2016-03-04 15 views
0

我剛剛問了一個類似的問題,並得到了我需要的答案,但他的時間我找不到任何會導致此錯誤的額外括號:「錯誤:(4 6 5 87 7)不是一個函數「。是否由於其他原因?我的代碼需要一個數字,如果它已經在列表中,它不會添加它。如果該列表尚未包含該號碼,則將其添加。計劃「錯誤:(4 6 5 87 7)不是函數」

(define (insert x ls) 
     (insertHelper x ls '() 0) 
) 

(define (insertHelper x ls lsReturn counter) 
     (cond 
      (
       (and (null? ls) (= counter 0)) 
       (reverse (cons x lsReturn)) 
      ) 
      (
       (and (null? ls) (>= counter 1)) 
       (reverse lsReturn) 
      ) 
      (
       (eqv? x (car ls)) 
       (insertHelper x (cdr ls) (cons (car ls) lsReturn) (+ counter 1)) 
      ) 
      (
       else ((insertHelper x (cdr ls) (cons (car ls) lsReturn) (+ counter 0))) 
      ) 

     ) 
) 



(define theSet (list 4 6 5 87)) 
(display theSet) 
(display "\n") 
(display (insert 7 theSet)) 

回答

1

else之後有太多括號。

對於什麼是值得的,幾乎所有「foo不是程序」的實例我看到堆棧溢出是由多餘的括號引起的。

2

您患有過度括號的情況,並伴有不良縮進。這應該治癒你的疾病:

(define (insert x ls) 
    (insertHelper x ls '() 0)) 

(define (insertHelper x ls lsReturn counter) 
    (cond ((and (null? ls) (= counter 0)) 
     (reverse (cons x lsReturn))) 
     ((and (null? ls) (>= counter 1)) 
     (reverse lsReturn)) 
     ((eqv? x (car ls)) 
     (insertHelper x (cdr ls) (cons (car ls) lsReturn) (+ counter 1))) 
     (else 
     (insertHelper x (cdr ls) (cons (car ls) lsReturn) (+ counter 0))))) 
+0

我通常做正確的縮進,但是我確實遭受了過多的括號哈哈。謝謝你的幫助奧斯卡! – Adam