[英]Racket - How to use foldr to evaluate if any element in a list satisfies an argument?
我有編寫一個名為any?
的程序的任務any?
它要求輸入一個列表和一個參數的過程,然后告訴您列表中的任何元素是否滿足該過程。
例如:( (any? odd? (list 2 4 6 8))
->錯誤
我需要在程序中使用文件夾。
(define (any? procedure list1)
(foldr (lambda (x y) (if (procedure x) true (any? procedure y))) false list1))
到目前為止,這是我所擁有的,但是當我在(any? odd? (list 2 4 6 8))
上運行程序時,我不斷收到錯誤消息,說“ folder:第三個參數必須是列表,給定false”。 我認為這是因為空的基本情況變為布爾假,然后將其替換為y,這是無效的,因為您需要一個列表來運行遞歸調用。
有人可以幫助我解決整個問題嗎?
foldr
為您處理遞歸; 你不應該打any?
電話any?
再次在lambda
內部。 相反,假分支可以只是y
。
或者,也許更明顯一點:
(define (any? procedure lst)
(foldr (lambda (x y) (or (procedure x) y)) #f lst))
另外,您得到的錯誤是因為在lambda
, y
是布爾值。 然后,您將其作為第二個參數傳遞給any?
參數any?
,您希望在其中找到列表。 悲傷的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.