2016-11-06 3 views

답변

1

네, 그건 까다로운. 문제는 format이 모든 인수를 가지고 있다는 것을 알고 있어야하는 방법입니다. 형식이 출력 문자열을 구문 분석하여 필요한 인수의 수를 결정한 다음 적절한 수의 인수를 받았을 때 실행되도록하려는 것입니다. 너 자신을 굴려 버릴거야. 이 같은 것 (참고 : 미제공 코드) :

#lang racket 

;; given a format-string, return a curried function that 
;; accepts the format-string's arguments one at a time 
(define (curried-format fmt-str) 
    (define num-args-expected (count-format-string-args fmt-str)) 
    (define (so-far->waiter so-far) 
    (lambda (arg) 
     (define new-args (cons arg so-far)) 
     ;; do we have all of the args? 
     (if (= (length new-args) num-args-expected) 
      ;; yay! call format: 
      (apply format fmt-str (reverse new-args)) 
      ;; nope: wait for some more: 
      (so-far->waiter new-args)))) 
    (so-far->waiter '())) 
+0

매우 무겁습니다. 서식 지정 및 인쇄/문자열 작성의 목적으로이 방법이 유용 할 것입니다. 그러나 궁금한 점이 있습니다. 함수가 얼마나 많은 인수를 취할지 모르면 어떻게 될까요? 그러한 상황은 현재의 currying syntax rules 하에서도 가능할 것인가? – podington

+0

카레 기능은 언제 발사되는지 어떻게 알 수 있습니까? –

+0

그래서 나는 그것이 효과가있을 것이라고 생각하지 않았다. 임의의 수의 인수를 가지고있는'(define (f. l) ...) '구문과 같이 처리 할 수 ​​있기를 바라고 있었고'apply'를 사용하여 목록에서 함수를 호출 할 수 있습니다. – podington