从Scheme中的列表中收集Min和Max值范围内的元素

时间:2016-11-23 17:20:08

标签: list scheme range remove-if

我是Scheme的新手,目前还没有使用(Racket版本),因此我没有像过滤器这样的内置功能。<​​/ p>

我现在的任务是从输入的列表中获取元素,只取出那些高于我的 MinValue 且低于我的 MaxValue

在我的“lst”变量中,我有(2 4 1 6 5 4 7 3)

在我的MinValue中我有2

MaxValue5

所以现在我应用了类似

之类的东西
 (remove (< # minVal) lst)

技术上应该给予删除和遗漏:

(2 4 4 3)

但我收到错误:

READ from #<INPUT CONCATENATED-STREAM #<INPUT STRING-INPUT-STREAM> #<IO TERMINAL-STREAM>>: objects printed as # in view of *PRINT-LEVEL* cannot be read back in

主要问题:

当使用remove / remove-if函数时,Scheme是否有像#这样的特定定义变量迭代遍历列表,所以我可以使用它吗?

是否有办法让这种方式以这种方式发挥作用:

(remove (< # minVal) lst)

谢谢!

标签“家庭作业”应该在那里,但我还不能创建它

1 个答案:

答案 0 :(得分:0)

我所知道的几乎所有方案都包含一个filter程序,它不是特定于Racket的,你应该可以使用它(remove不适合这项工作。)

只需传递依次接收每个元素的lambda,您就可以设置任何条件来确定哪些元素在输出列表中:

(filter (lambda (e) (and (>= e 2) (< e 5)))
        '(2 4 1 6 5 4 7 3))

=> '(2 4 4 3)

没有#变量遍历列表并依次为您提供每个元素,为此您必须使用递归显式遍历列表,或者使用其中一个期望的内置过程list和lambda - lambda的参数表示每个元素。

如果由于某种原因您不允许使用filter,则可以从头开始实施,并再次注意我们不需要使用remove,{{1}用每个元素调用:

pred