0
보다 기본적인 함수로 특정 함수를 다시 쓰기 위해 match-lambda를 사용하고 있습니다. 여기 패턴 일치에서 재귀 호출의 강제 평가
(define let*→nested-unary-lets
(match-lambda
(`(let* (()) ,<exprs>)
`(let() ,<exprs>))
(`(let* ((,<var> ,<val>)) ,<exprs>)
`(let ((,<var> ,<val>)) (let() ,<exprs>)))
(`(let* ((,<var> ,<val>) . ,<clauses>) ,<exprs>)
`(let ((,<var> ,<val>)) (let*→nested-unary-lets '(let* (,@<clauses>) ,<exprs>))))))
이 * → 중첩 된 단항-할 수 있도록하는 호출의 예입니다 : 여기에하자 * 통화에 대한 입력 코드를 나타내는 문자열을 받아 중첩 된 단항로 변환 문자열을 할 수 있습니다로를 반환하는 예제입니다
단지 중첩 포함 출력 문자열이 있습니다 더 이상의 평가를 (GPT)를 사용하지 않도록 * → 수 있도록 재귀 호출의 평가를 강제로 어떤 방법이 있는지
(let*→nested-unary-lets '(let* ((a 1) (b (+ a 1)) (c (+ a b))) (displayln c)))
'(let ((a 1))
(let*→nested-unary-lets
'(let* ((b (+ a 1)) (c (+ a b)))
(displayln c))))
하는 것이 궁금 중첩 된 단항가-수 있습니다.
감사합니다.
감사합니다. 그것은 (* *, nets-unary-lets'(let * (, @), )) 필요합니다. 그러나 나는 결코 당신의 제안없이 거기에 도착했을 것입니다. :-) –
Schemer
@Schemer : 둘 이상을 허용하기 위해'.'앞에'.'를 추가했습니다. 만약 당신이 하나만 일치한다면, quasiquoted 출력에'.'을 써서는 안됩니다. –