Lambda 这个错误在Scheme中是什么意思;and:and“中的and:bad语法错误;?
我在:and中遇到以下错误“and:语法错误”: 从本质上讲,我尝试将以下递归调用作为基本情况(在java中等效):Lambda 这个错误在Scheme中是什么意思;and:and“中的and:bad语法错误;?,lambda,functional-programming,scheme,racket,Lambda,Functional Programming,Scheme,Racket,我在:and中遇到以下错误“and:语法错误”: 从本质上讲,我尝试将以下递归调用作为基本情况(在java中等效): a==b&&c==d是(和(eqv?ab)(eqv?cd)),但是您使用的cond是错误的。正确的方法是: (cond (predicate-expression consequence-expression ...) ... (else alternative-expression ...)) 您的尝试如下所示: (cond (null? list1) (
a==b&&c==d
是(和(eqv?ab)(eqv?cd))
,但是您使用的cond
是错误的。正确的方法是:
(cond
(predicate-expression consequence-expression ...)
...
(else alternative-expression ...))
您的尝试如下所示:
(cond
(null? list1)
(and (eqv? a b) (eqv? c d))
(two-subsets (cdr list1) a b c d))))
这使得null?
成为谓词,list1
成为结果。由于null?
是一个过程,它不能是#f
,因此您的cond
应该始终返回list1
。由于和
不允许单独计算,而且它是一个宏,因此会出现编译时错误
我不知道你想用这个cond
做什么,因为如果我加上括号,我会得到:
(cond
((null? list1) #t)
((and (eqv? a b) (eqv? c d)) #t)
(else (two-subsets (cdr list1) a b c d))))))
这是基于无后果的cond
术语返回其真实值,并且null?
和eqv?
返回\t
,而不是\f
。同样清楚的是,这可以用#t
代替,因为无论参数是什么,这都是结果
cond
不是原语,它只是将您的代码转换为if
。为了好玩,这里是您的原始cond
被翻译成的内容:
(if null?
list1
(if and
(begin
(eqv? a b) ; dead code
(eqv? c d))
(if two-subsets
(begin
(cdr list1) ; dead code
a ; dead code
b ; dead code
c ; dead code
d)
'undefined-return-value))) ; no else clause
a==b&&c==d
是(和(eqv?ab)(eqv?cd))
,但是您使用的cond
是错误的。正确的方法是:
(cond
(predicate-expression consequence-expression ...)
...
(else alternative-expression ...))
您的尝试如下所示:
(cond
(null? list1)
(and (eqv? a b) (eqv? c d))
(two-subsets (cdr list1) a b c d))))
这使得null?
成为谓词,list1
成为结果。由于null?
是一个过程,它不能是#f
,因此您的cond
应该始终返回list1
。由于和
不允许单独计算,而且它是一个宏,因此会出现编译时错误
我不知道你想用这个cond
做什么,因为如果我加上括号,我会得到:
(cond
((null? list1) #t)
((and (eqv? a b) (eqv? c d)) #t)
(else (two-subsets (cdr list1) a b c d))))))
这是基于无后果的cond
术语返回其真实值,并且null?
和eqv?
返回\t
,而不是\f
。同样清楚的是,这可以用#t
代替,因为无论参数是什么,这都是结果
cond
不是原语,它只是将您的代码转换为if
。为了好玩,这里是您的原始cond
被翻译成的内容:
(if null?
list1
(if and
(begin
(eqv? a b) ; dead code
(eqv? c d))
(if two-subsets
(begin
(cdr list1) ; dead code
a ; dead code
b ; dead code
c ; dead code
d)
'undefined-return-value))) ; no else clause