Scheme 如何在计划中实施这一点

Scheme 如何在计划中实施这一点,scheme,Scheme,我是个新手,在一次练习中遇到了一些问题 接下来:以两个整数为参数编写genlist函数,并返回一个包含两个整数之间的整数集的列表 例如:(genlist 5 12)=>(5 6 7 8 9 10 11 12) 我已经在Python中实现了,但我不知道如何在Scheme中实现。可以使用递归实现 (genlist x y)的基本情况是当x==y时,在这种情况下,生成(list x) 递归停止将从(genlist x y)到(genlist(+x 1)y)类似(5 6 7)的列表将类似(cons 5(

我是个新手,在一次练习中遇到了一些问题

接下来:以两个整数为参数编写genlist函数,并返回一个包含两个整数之间的整数集的列表

例如:
(genlist 5 12)
=>
(5 6 7 8 9 10 11 12)


我已经在Python中实现了,但我不知道如何在Scheme中实现。

可以使用递归实现

(genlist x y)
的基本情况是当
x==y
时,在这种情况下,生成
(list x)

递归停止将从
(genlist x y)
(genlist(+x 1)y)
类似
(5 6 7)
的列表将类似
(cons 5(cons 6(cons 7’()))
,因此最简单的解决方案是:

(genlist 8 7) ; ==> ()
(genlist 7 7) ; ==> (cons 7 (genlist 8 7))
这不是最好的方法,只是最简单的方法。最好的方法是使用帮助器从头到尾创建列表:

(genlist-helper 6 7 '())                  ; ==>
(genlist-helper 6 6 (cons 7 '()))         ; ==>
(genlist-helper 6 5 (cons 6 (cons 7 '())) ; ==>
(cons 6 (cons 7 '())
现在,
genlist
只是通过提供空列表作为初始累加器来调用helper。也可以使用本地过程来实现这一点,在本地过程中,您不需要添加第一个参数,因为在词法闭包中有第一个参数,您甚至可以通过使用named
let
使其更简单

我不知道你是怎么用Python实现的。我不记得python有cons单元格。学习第一种lisp语言时,Algol知识通常没有帮助。就像你假设,既然意大利语和西班牙语如此相似,斯洛文尼亚人也一定如此