2013-03-10 98 views
2
Design a function that consumes a [Listof Number] and checks if 0 is in the list. 

我想用lambda來解決這個問題。我一直在閱讀這本書,這是我迄今爲止所提出的。我希望我接近。使用拉姆達球拍

(define (five? lon) 
    (..... (lambda (x) 
      (= x 5)) 
     lon)) 

你會如何完成這個(如果正確)?

+1

它是5還是0?問題描述指出它是0,但代碼使用5 – 2013-03-10 04:13:46

回答

1

是!檢出ormap功能。

過程

(ormap proc lst ...+) → any 
    proc : procedure? 
    lst : list? 

From the Racket documentation:

類似的意義上,PROC施加到 LST的每個元素映射,但

  • 結果#F如果proc的每個應用程序都生成#f;和

  • 結果是proc產生的值不是#f的第一個應用程序,在這種情況下,proc不適用於lsts的後續 元素; pro對 的最後一個元素的應用lsts與ormap調用相比處於尾部位置。

1

假設多數民衆贊成被搜索的數量是5(根據碼,而不是問題的描述推斷) - 有一個已經做什麼被問的過程,這就是所謂的member

(member 5 '(1 3 5 7)) 
=> '(5 7) 

其中,根據文檔:

定位lst的第一個元素是否相等?到v。如果存在這樣的元素,則返回從該元素開始的lst的尾部。否則,結果是#f。

但是,如果我們從頭開始實現一個類似的過程,這是解決方案將如何看,填充了空白:

(define five? 
    (lambda (lon) 
    (if <???>     ; is the list empty? 
     <???>     ; then the number is not in the list 
     (or <???>    ; otherwise the current element is 5 or 
      (five? <???>))))) ; the number is in the rest of list 

不要忘記對代碼進行測試:

(five? '()) 
=> #f 
(five? '(1 2 3 6 7 9)) 
=> #f 
(five? '(1 2 3 5 7 9)) 
=> #t