And*_*eri 1 scheme loops let named chicken-scheme
我无法理解let
在我发现的示例中的这种用法。我正在使用鸡肉计划。
(let loop ()
(print "hello world")
(loop)
)
Run Code Online (Sandbox Code Playgroud)
这是一个简单的无限循环,它递归地调用自己,我无法理解的是语法。我知道第一个参数必须是一个成对列表,((<var[1]> <value[1]>)...(<var[n]> <value[n]))
其他参数是 let 的主体。那么,为什么这个片段有效呢?
这是一个namedlet
,它是辅助过程的简写,通常用于使用递归进行循环,参数随着递归的进行而前进(尽管在您的代码中没有使用参数)。例如,这个过程:
(define (test)
(let loop ((i 5))
(cond ((<= i 0) 'ok)
(else (print i)
(loop (- i 1))))))
Run Code Online (Sandbox Code Playgroud)
...相当于这个:
(define (test)
(define (loop i)
(cond ((<= i 0) 'ok)
(else (print i)
(loop (- i 1)))))
(loop 5))
Run Code Online (Sandbox Code Playgroud)
现在您看到问题中的代码片段与编写此代码相同:
(define (loop)
(print "hello world")
(loop))
(loop)
Run Code Online (Sandbox Code Playgroud)
另请注意,名称“循环”只是一个约定,您也可以将其命名为“iter”或“helper”或您喜欢的任何其他名称,这并不重要。