从 Scheme 中的列表中收集最小值和最大值范围内的元素
Gathering elements in range of Min and Max values from a list in Scheme
我是 Scheme 的新手,目前没有使用(Racket 版本),因此我没有过滤器等内置功能
我现在的任务是从我输入的列表中取出元素,并且只取出那些高于我的 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)
谢谢!
标签 "homework" 应该在那里,但我还不能创建它
我知道的几乎所有 Scheme 都包含一个 filter
过程,它不是特定于 Racket,你应该能够使用它(remove
不是这项工作的正确工具)。
只需传递一个 lambda
依次接收每个元素,您可以设置任何条件来确定输出列表中的元素:
(filter (lambda (e) (and (>= e 2) (< e 5)))
'(2 4 1 6 5 4 7 3))
=> '(2 4 4 3)
没有 #
变量遍历列表并依次为您提供每个元素,为此您必须使用递归显式遍历列表,或使用内置过程之一期待一个列表和一个 lambda - lambda 的参数代表每个元素。
如果由于某种原因不允许您使用 filter
,从头开始实现它很容易,再次注意我们不需要使用 remove
,并且 pred
被每个元素调用:
(define (filter pred lst)
(cond ((null? lst) '())
((pred (car lst))
(cons (car lst) (filter pred (cdr lst))))
(else (filter pred (cdr lst)))))
我是 Scheme 的新手,目前没有使用(Racket 版本),因此我没有过滤器等内置功能
我现在的任务是从我输入的列表中取出元素,并且只取出那些高于我的 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)
谢谢!
标签 "homework" 应该在那里,但我还不能创建它
我知道的几乎所有 Scheme 都包含一个 filter
过程,它不是特定于 Racket,你应该能够使用它(remove
不是这项工作的正确工具)。
只需传递一个 lambda
依次接收每个元素,您可以设置任何条件来确定输出列表中的元素:
(filter (lambda (e) (and (>= e 2) (< e 5)))
'(2 4 1 6 5 4 7 3))
=> '(2 4 4 3)
没有 #
变量遍历列表并依次为您提供每个元素,为此您必须使用递归显式遍历列表,或使用内置过程之一期待一个列表和一个 lambda - lambda 的参数代表每个元素。
如果由于某种原因不允许您使用 filter
,从头开始实现它很容易,再次注意我们不需要使用 remove
,并且 pred
被每个元素调用:
(define (filter pred lst)
(cond ((null? lst) '())
((pred (car lst))
(cons (car lst) (filter pred (cdr lst))))
(else (filter pred (cdr lst)))))