3
アクションの違いを示す簡単な例は、私にとってはどちらも互換性があると思われるので、本当に役に立ちますか?ありがとう:)LISPでは、 "let"と "with"の違いは何ですか?
アクションの違いを示す簡単な例は、私にとってはどちらも互換性があると思われるので、本当に役に立ちますか?ありがとう:)LISPでは、 "let"と "with"の違いは何ですか?
少なくとも、マクロのコンテキストでwith
しか使用できません。 Common Lisp Hyperspecを参照してください。
実際に機能的に同等です。
実際、少なくともSBCLはマクロ呼び出しでwith
の使用を、囲みのあるLET
形式に展開します。両方の機能的に同等 "と" "せ" とされている
(BLOCK NIL
(LET ((FOO 5))
(LET ((#:LOOP-REPEAT-1681 (CEILING 10)))
(DECLARE (TYPE INTEGER #:LOOP-REPEAT-1681))
(SB-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD (#:LOOP-LIST-HEAD-1682
#:LOOP-LIST-TAIL-1683)
(SB-LOOP::LOOP-BODY NIL
((IF (<= #:LOOP-REPEAT-1681 0)
(GO SB-LOOP::END-LOOP)
(DECF #:LOOP-REPEAT-1681)))
((SB-LOOP::LOOP-COLLECT-RPLACD
(#:LOOP-LIST-HEAD-1682 #:LOOP-LIST-TAIL-1683)
(LIST FOO)))
((IF (<= #:LOOP-REPEAT-1681 0)
(GO SB-LOOP::END-LOOP)
(DECF #:LOOP-REPEAT-1681)))
((RETURN-FROM NIL
(SB-LOOP::LOOP-COLLECT-ANSWER
#:LOOP-LIST-HEAD-1682))))))))
をしかし、次の展開に
結果:
次のことを実行していますか? –