Scheme尝试检查列表中是否有单词

时间:2014-10-10 20:04:59

标签: 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? adj? (car x)) OK(cdr x))
                ((else x            #f))
            )
       )
)

功能调整?正在检查输入是否是adjs中形容词列表的一部分。

我想用OK功能做的是用户输入一个列表并让该列表通过adj运行?看它是否是adjs列表的一部分。

当我运行该函数时会发生什么?我得到一个错误返回,表示当函数只预期两个时,我输入了“X”个参数。为什么呢?

1 个答案:

答案 0 :(得分:2)

括号有问题。有些是不必要的,有些是缺失的,例如当你递归调用OK过程时,或者你正在调用adj?时 - 请记住,在Scheme中我们调用这样的过程:{{1 }},不是这样的:(f x)。此外,递归的基本情况似乎已关闭,f(x)子句使用不正确。试试这个:

else