我刚刚开始在DrRacket中编写方案。但是,正如大家可能知道的那样,语法上的那些细微变化总是使我们感到困惑!
我相信我的错误在于和有条件。如果有人可以看看并告诉我哪里出了问题,那太好了!
; in-range?: int int list of numbers --> boolean
(define in-range?
(lambda (a b s)
(cond [(null? s) #t] ;List is empty
[(null? a) #f]
[(null? b) #f]
[((and >= (car s)) ((a) <= (car s)) (b)) (in-range? (a) (b) (cdr s))]
[else #f]
)))
想象一下这种形式:
(test a b)
您可以看到它是一个应用程序,因为括号test
不是语法操作数。然后test
进行评估,并且预期结果是可以使用评估后的参数a
和调用的过程b
。
这是cond术语中唯一的表达形式:
((and >= (car s)) ((a) <= (car s)) (b)) (in-range? (a) (b) (cdr s))
这是一个应用程序。(and >= (car s)) ((a) <= (car s)) (b))
不是语法操作数。然后对其进行评估,并且预期结果是一个过程,该过程至少接受一个参数,即对的评估(in-range? (a) (b) (cdr s))
。
由于表达式是and
一个语法操作数,我们知道它要么是#f
要么,#t
并且您应该得到一个错误,例如Application: not a procedure
在Scheme中,括号周围的内容就像在C#和JavaScript等algol语言中后面的括号一样。想象一下这个表达式:
((a.car >=)(), (<= a() s.car)())(in-range(a(), b(), s.cdr))
JavaScript中也存在很多语法错误:-o
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句