スキームに関連する質問があります。let* をラムダ式として実装するにはどうすればよいですか。もっと正確に言うと、「通常の」let については疑問に思っていませんが、ある let 式を別の式の中で使用できるようにする * 付きの let については疑問に思っています。
2 に答える
5
let*
フォームは一連のネストされたですlambda
。たとえば、次のようになります。
(let* ((a 10)
(b (+ 10 a)))
(+ a b))
これと同等です:
((lambda (a)
((lambda (b)
(+ a b))
(+ 10 a)))
10)
于 2013-05-22T18:03:23.110 に答える
4
'regular' について疑問に思っていないのでlet
、 alet*
を変換できる場合let
は答えが得られます。したがって、次のことを知っておいてください。
(let* ((a ...) (b ...) (c ...)) body ...)
次と同等です。
(let ((a ...))
(let ((b ...))
(let ((c ...))
body ...)))
(44 ページの R5RS を参照(define-syntax let* ...)
)。さて、これと次の知識を考えると:
(let ((a ...)) body ...)
次と同等です。
((lambda (a) body ...) ...)
上で示した の「拡張」は次のlet*
ようになります。
((lambda (a)
((lambda (b)
((lambda (c)
body ...)
<c-init>))
<b-init>))
<a-init>)
于 2013-05-22T21:01:38.623 に答える