Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在LISP中,什么';这两者之间的区别是什么;让我们;及;有“吗?”;?_Lisp_Substitution_Let - Fatal编程技术网

在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 (

一个简单的例子来说明行动上的差异真的很有帮助,因为对我来说,它们似乎都是可以互换的?谢谢:)

至少在Common Lisp中,您只能在
循环
宏的上下文中使用
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”在功能上是等效的吗?