我是Scheme的新手,目前还没有使用(Racket版本),因此我没有像过滤器这样的内置功能。</ p>
我现在的任务是从输入的列表中获取元素,只取出那些高于我的 MinValue 且低于我的 MaxValue
在我的“lst”变量中,我有(2 4 1 6 5 4 7 3)
在我的“MinValue
”中我有2
在MaxValue
我5
所以现在我应用了类似
之类的东西 (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)
谢谢!
标签“家庭作业”应该在那里,但我还不能创建它
答案 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