在LISP中,什么';这两者之间的区别是什么;让我们;及;有“吗?”;?
一个简单的例子来说明行动上的差异真的很有帮助,因为对我来说,它们似乎都是可以互换的?谢谢:)至少在Common Lisp中,您只能在在LISP中,什么';这两者之间的区别是什么;让我们;及;有“吗?”;?,lisp,substitution,let,Lisp,Substitution,Let,一个简单的例子来说明行动上的差异真的很有帮助,因为对我来说,它们似乎都是可以互换的?谢谢:)至少在Common Lisp中,您只能在循环宏的上下文中使用with。参见。它们在功能上确实是等效的 事实上,至少SBCL将循环宏调用中的with的任何用法扩展为一种封闭的LET形式 运行以下命令: (macroexpand '(loop with foo = 5 repeat 10 collect foo)) 导致以下扩展: (BLOCK NIL (LET ((FOO 5)) (LET (
循环
宏的上下文中使用with
。参见。它们在功能上确实是等效的
事实上,至少SBCL将循环
宏调用中的with
的任何用法扩展为一种封闭的LET
形式
运行以下命令:
(macroexpand '(loop with foo = 5 repeat 10 collect foo))
导致以下扩展:
(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))))))))
(块零
(LET((FOO 5))
(让(#:LOOP-REPEAT-1681(天花板10)))
(声明(整型#:LOOP-REPEAT-1681))
(SB-LOOP::WITH-LOOP-LIST-COLLECTION-HEAD(#:LOOP-LIST-HEAD-1682)
#:LOOP-LIST-TAIL-1683)
(SB-LOOP::环体NIL
((如果)但是“let”和“with”在功能上是等效的吗?