簡體   English   中英

球拍-如何使用文件夾評估列表中的任何元素是否滿足參數?

[英]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))

另外,您得到的錯誤是因為在lambday是布爾值。 然后,您將其作為第二個參數傳遞給any?參數any? ,您希望在其中找到列表。 悲傷的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM