Functional programming Scheme正在尝试检查列表中是否有单词

Functional programming Scheme正在尝试检查列表中是否有单词,functional-programming,scheme,lisp,Functional Programming,Scheme,Lisp,我有一些功能 (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

我有一些功能

 (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”个参数,而函数只需要两个参数。为什么?

括号有问题。有些是不必要的,有些是缺失的,例如,当您递归调用
OK
过程时,或者以调用
adj?
的方式调用时-请记住,在Scheme中,我们调用这样的过程:
(fx)
,而不是这样:
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))))

你的缩进让它看起来像adj的定义?是嵌套在形容词中的,但不是。请不要像剪指甲一样乱丢括号。对不起,我是Scheme新手,我还有很多练习要做。我保证,我会好起来的。我很抱歉这么晚才回复。我有急事要处理。好的,我明白你的意思。事实上,你的建议很有道理。这个计划对我来说是新的,我对很多细节感到困惑。我只需要更多地练习基础知识。