2014-02-14 68 views
0

發現這個功能在球拍的書境界:拍功能,是錯還是我失去了somethng

(define (my-filter pred lst) 
    (cond [(empty? lst) empty] 
     [(pred (first lst)) 
     (cons (first lst) (my-filter (rest lst)))] 
     [else (my-filter (rest lst))])) 

與調用它:

(my-filter (lambda (i) (> i 5)) `(1 2 3 4 5 6 7 8)) 

給出:

my-filter: arity mismatch; 
the expected number of arguments does not match the given number 
    expected: 2 
    given: 1 
    arguments...: 
    '(2 3 4 5 6 7 8) 

所以我把它改爲:

(define (my-filter pred lst) 
    (cond [(empty? lst) empty] 
     [(pred (first lst)) 
     (cons (first lst) (my-filter pred (rest lst)))] 
     [else (my-filter pred (rest lst))])) 

現在它工作正常。那麼,如果我在那裏錯過了任何東西,或者如果這本書錯了,我就會徘徊?

+0

看起來像只是一個錯字 – jozefg

+0

@jozefg我編輯了答案,我改名爲我的RKT我,過濾器2,因爲它與另一種相沖突(它們在同一個文件) –

+1

與問題無關,但對逗號運算符的使用相當混亂。 – sepp2k

回答

2

事實證明這本書是錯誤的。發現這在球拍home page的領域。我認爲這可能是我不明白的,因爲這是我第一次做球拍。

第114頁my過濾器函數的定義需要兩個參數 ,但只有一個參數在循環時提供。定義 應改爲:

(define (my-filter pred lst) 
    (cond [(empty? lst) empty] 
     [(pred (first lst)) 
     (cons (first lst) (my-filter pred (rest lst)))] 
     [else (my-filter pred (rest lst))))) 
+0

感謝您鏈接到我們的勘誤頁面。此外,僅供參考,我們的發佈商正準備進行第二次打印。這份更新的副本將包含此修復和我們收到的所有其他勘誤提交。 –

相關問題