2011-11-02 63 views
1

這裏的第一元素的LST是這樣的問題:方案:返回只包含LST

寫功能(first-n-elements lst n),它返回僅含有lst第一n單元的明細表。例如,(first-n-elements '(1 2 3 4 5 6) 3)應返回'(1 2 3)。你的函數應該處理n大於列表長度的情況(在這種情況下它將返回整個列表),並且其中n是0(應該返回'())。

我的回答是:

(define (first-n-elements lst n) 
    (cond((null? lst) '())  
     ((= n 0) lst)) 
     ((> n 0) (cons (+ (car lst) 1) (first-n-elements) (cdr lst) (- n 1)))) 

我知道這是錯的,請大家幫忙問題的

回答

1

部分說,如果n爲0,它應該返回'()。但是當n爲0時,你的函數做什麼?

另外,想想這裏的遞歸案例(> n 0)。您目前正在返回四個cons參數:

  • (+ (car lst) 1)
  • (first-n-elements)
  • (cdr lst)
  • (- n 1)

cons只需要兩個參數。你擁有所有的零件,但它們並不完全一樣。你想成爲什麼cons

另外:爲什麼你加1到(car lst)?如果lst有其他數字以外的東西,那就行不通了。

3

你已經有了一個自然數和一個列表,並且你需要在上做遞歸,他們都是。請參閱本章recursion on two complex arguments。簡單的答案是,你必須考慮兩個參數(笛卡爾乘積,本質上)的所有情況的組合。當然,你可能會發現有些案例可能會一起崩潰,但如果有疑問,可以分別考慮它們。