2014-10-10 53 views
0

我有几个函数。计划试图检查列表中是否有单词

(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”量进入当该功能只适用认为的两个会发生什么。为什么?

+3

您的缩进使它看起来像adj的定义?嵌套在adjs中,但它不是。 – 2014-10-10 21:46:05

+2

请不要像括号剪报那样乱扔括号。 – Svante 2014-10-11 12:19:42

+0

对不起,我是Scheme新手,我还有很多练习要做。我保证,我会变得更好。 – MipsMoreLikeWhips 2014-10-11 15:39:33

回答

2

没有与括号问题。有些是不必要的,人失踪,例如,当您递归调用的OK程序,或在路上你打电话adj? - 还记得,在我们计划调用过程是这样的:(f x),不喜欢这样的: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)))) 
+0

我很抱歉如此迟到的回应。我有紧急情况需要照顾。好吧,我明白你在说什么。事实上,你所建议的理由很有道理。计划对我来说是新的,我收到了很多困惑的细节。我只需要更多地练习基础知识。 – MipsMoreLikeWhips 2014-10-11 15:38:41

+1

我感谢您的帮助和建议。 – MipsMoreLikeWhips 2014-10-11 15:42:12