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新手,我还有很多练习要做。我保证,我会好起来的。我很抱歉这么晚才回复。我有急事要处理。好的,我明白你的意思。事实上,你的建议很有道理。这个计划对我来说是新的,我对很多细节感到困惑。我只需要更多地练习基础知识。