方案“错误:(4 6 5 87 7)不是一个功能”

时间:2016-03-04 01:22:34

标签: scheme

我刚问了一个类似的问题并得到了我需要的答案,但他的时间我找不到任何可能导致此错误的额外括号:“错误:(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))

2 个答案:

答案 0 :(得分: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)))))

答案 1 :(得分:1)

else后有太多括号。

对于它的价值,几乎所有" foo的实例都不是一个程序"我在Stack Overflow上看到的错误是由无关的括号引起的。