2014-10-10 52 views
0

我有幾個函數。計劃試圖檢查列表中是否有單詞

(define adjs '(black brown fast hairy hot quick red slow)) 
    (define adj? 
     (lambda (a) (if (member a adjs) #t #f) 
    ) 


    (define OK 
     (lambda (x) 
      (cond 
       ((equal? x()) #t) 
       ((equal? adj? (car x)) OK(cdr x)) 
       ((else x   #f)) 
      ) 
     ) 
) 

函數adj?正在檢查以查看輸入是否是形容詞列表的一部分。

我試圖用OK功能做的是用戶將輸入列表,並有一個列表,通過ADJ運行?看看它是否是調整列表的一部分。

當我運行的功能是我得到一個錯誤的回報,說我在參數「X」量進入當該功能只適用認爲的兩個會發生什麼。爲什麼?

+3

您的縮進使它看起來像adj的定義?嵌套在adjs中,但它不是。 – 2014-10-10 21:46:05

+2

請不要像括號剪報那樣亂扔括號。 – Svante 2014-10-11 12:19:42

+0

對不起,我是Scheme新手,我還有很多練習要做。我保證,我會變得更好。 – MipsMoreLikeWhips 2014-10-11 15:39:33

回答

2

沒有與括號問題。有些是不必要的,人失蹤,例如,當您遞歸調用的OK程序,或在路上你打電話adj? - 還記得,在我們計劃調用過程是這樣的:(f x),不喜歡這樣的:f(x)。此外,遞歸的基本情況似乎關閉,並且else子句使用不正確。試試這個:

(define adj? 
    (lambda (a) 
    (if (member a adjs) #t #f))) 

(define OK 
    (lambda (x) 
    (cond 
     ((null? x) #t) 
     ((adj? (car x)) (OK (cdr x))) 
     (else #f)))) 
+0

我很抱歉如此遲到的迴應。我有緊急情況需要照顧。好吧,我明白你在說什麼。事實上,你所建議的理由很有道理。計劃對我來說是新的,我收到了很多困惑的細節。我只需要更多地練習基礎知識。 – MipsMoreLikeWhips 2014-10-11 15:38:41

+1

我感謝您的幫助和建議。 – MipsMoreLikeWhips 2014-10-11 15:42:12