嗨,我是Scheme的新手,一次练习有些问题。
在这里:编写genlist函数,以两个整数作为参数并返回一个列表,该列表包含所提供的两个整数之间的整数集。
例如:(genlist 5 12)=>(5 6 7 8 9 10 11 12)
我已经在Python中做到了,但是我不知道如何在Scheme中实现。
答案 0 :(得分:0)
您可以使用递归来实现。
(genlist x y)的基本情况是x = y时,则产生(list x)
递归停止将从(genlist x y)到(genlist(+ x 1)y)
答案 1 :(得分:0)
像(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
仅通过提供空列表作为初始累加器来调用帮助程序。也可以使用本地过程来执行此操作,在该过程中,您不需要添加第一个参数,因为它具有词法闭包,甚至可以通过使用命名为let
来简化它。
我不知道您是如何在Python中完成的。我不记得python有缺点细胞。学习第一门口语时,Algol知识通常无济于事。就像您做出这样的假设:既然意大利语和西班牙语是如此相似,那么斯洛文尼亚语也必须如此。