gur*_*ing 1 recursion fold racket
我的任务是编写一个名为的程序any?,需要输入一个列表和一个参数的过程,然后告诉你该列表中的任何元素是否满足该过程.
例如:(any? odd? (list 2 4 6 8))- >假
我需要在程序中使用foldr.
(define (any? procedure list1)
(foldr (lambda (x y) (if (procedure x) true (any? procedure y))) false list1))
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所做的,但是当我运行该程序时,(any? odd? (list 2 4 6 8))我不断收到错误说"foldr:第三个参数必须是一个列表,给定为false".我认为这是因为空的基本情况变为布尔值false,然后替换为y,这是无效的,因为您需要一个列表来运行递归调用.
有人可以帮助我完成思考过程吗?
foldr为你处理递归; 你不应该any?在里面再次打电话lambda.相反,假分支可以y.
或者,更明显一点,也许:
(define (any? procedure lst)
(foldr (lambda (x y) (or (procedure x) y)) #f lst))
Run Code Online (Sandbox Code Playgroud)
此外,你得到的错误是因为里面lambda,y是一个布尔值.然后你将它作为第二个参数传递给any?你,你期待一个列表.悲伤的结果.