我试图使用DrRacket比较方案中两个不同列表中的元素。如果m1小于m2,则需要返回true。否则,返回false。我得到了以下错误:
<:合同违约预期:真实?给予:(3)论点立场:第一,其他论点.:
如果能提供任何指导的话。
谢谢!
#lang scheme
(define t '( "Apple" 3))
(define t2 '("Orange", 1))
(define compare (lambda (m1 m2)
(if (<(cdr m1)(cdr m2)) #t #f)
))
(compare t t2)发布于 2016-03-31 22:54:27
像("Apple" 3)这样的列表的("Apple" 3)不是3,但正如错误消息告诉您的那样,它是一个具有单个元素的 list :(3)。您不能将列表与函数<进行比较,因为它指示违反合同的行为。
图形化:
m1 --> [A|Y]
| |-----> [A|Y]
car| cdr | |-------> NIL
V car| cdr
"Apple" V
3因此:
(car m1) ;; "Apple"
(cdr m1) ;; (3)
(car (cdr m1)) ;; 3(car (cdr m1))也可缩短为(cadr m1)。但是请注意,最好使用first而不是car和rest来代替cdr (如果所选的语言允许的话)。
还有,不要写
(if (some-test) #t #f)当some-test已经返回true或false时,只需编写
(some-test)https://stackoverflow.com/questions/36345107
复制相似问题