2011-03-02 110 views
0

所以我一直在這個簡單的轉置編工作可能有人告訴我爲什麼我的追加不工作?即時通訊與計劃中的追加功能問題

(define stuff 
    (lambda (x y) 
     (if (null? y) 0) 
     (if (not (null? (car y))) (stuff (append x (list (map car y))) (map cdr y))) 
)) 

(define x '()) 
(define y '((1 2 3 4)(4 5 6 7)(7 8 9 0))) 
(stuff x y) 

看來,如果你看一下調試語句

+0

你想做什麼?例如:'(地圖列表'(1 2 3 4)'(4 5 6 7)'(7 8 9 0))'? – knivil 2011-03-03 15:15:03

+0

而「如果你看看調試語句」不是很有幫助。我看到沒有調試聲明... – knivil 2011-03-03 17:14:47

回答

2

不能連續寫兩個if表情就像你正在做的工作;因爲if是一個表達式,它將評估第一個((if (null? y) 0)),放棄答案(因爲您沒有在任何地方使用它),然後運行第二個(如果(car y)爲空,將返回未定義的值)。另外,如果y不是空的,但它的第一個元素是空的,會發生什麼?該案件沒有處理。通常,在Scheme中,您使用cond來替換其他語言中if-elseif-else鏈。有什麼特別的失敗呢?如果您修復if問題並處理我提到的其他情況,我認爲您的代碼可以工作或幾乎可以工作。

+0

我得到相同的錯誤(定義的東西 (lambda(xy) (cond ((not(null?(car y)))(stuff(append x(list(map car y)))(map cdr y))) ))) – Danger 2011-03-03 00:05:59

+0

您還需要在'cond'表達式中處理'(null?y)'和'(null?(car y))'case。 – 2011-03-03 00:15:55