5

スキームに関連する質問があります。let* をラムダ式として実装するにはどうすればよいですか。もっと正確に言うと、「通常の」let については疑問に思っていませんが、ある let 式を別の式の中で使用できるようにする * 付きの let については疑問に思っています。

4

2 に答える 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 に答える