0
카레 문법으로 format
과 같은 함수를 정의하고 싶다고합시다. 전달할 수있는 추가 인수는 어떻게 처리합니까? 예를 들어, 나는 다음과 같은 일을 할 수 있도록하려는 것 :어떻게 Racket에서 임의의 수의 인수로 currying을 사용합니까?
(((format "~a ~a") 5) 9)
카레 문법으로 format
과 같은 함수를 정의하고 싶다고합시다. 전달할 수있는 추가 인수는 어떻게 처리합니까? 예를 들어, 나는 다음과 같은 일을 할 수 있도록하려는 것 :어떻게 Racket에서 임의의 수의 인수로 currying을 사용합니까?
(((format "~a ~a") 5) 9)
네, 그건 까다로운. 문제는 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 '()))
매우 무겁습니다. 서식 지정 및 인쇄/문자열 작성의 목적으로이 방법이 유용 할 것입니다. 그러나 궁금한 점이 있습니다. 함수가 얼마나 많은 인수를 취할지 모르면 어떻게 될까요? 그러한 상황은 현재의 currying syntax rules 하에서도 가능할 것인가? – podington
카레 기능은 언제 발사되는지 어떻게 알 수 있습니까? –
그래서 나는 그것이 효과가있을 것이라고 생각하지 않았다. 임의의 수의 인수를 가지고있는'(define (f. l) ...) '구문과 같이 처리 할 수 있기를 바라고 있었고'apply'를 사용하여 목록에서 함수를 호출 할 수 있습니다. – podington