Scheme 如何在计划中实施这一点
我是个新手,在一次练习中遇到了一些问题 接下来:以两个整数为参数编写genlist函数,并返回一个包含两个整数之间的整数集的列表 例如: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 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。也可以使用本地过程来实现这一点,在本地过程中,您不需要添加第一个参数,因为在词法闭包中有第一个参数,您甚至可以通过使用namedlet
使其更简单
我不知道你是怎么用Python实现的。我不记得python有cons单元格。学习第一种lisp语言时,Algol知识通常没有帮助。就像你假设,既然意大利语和西班牙语如此相似,斯洛文尼亚人也一定如此