List 比较DrRacket中相同长度的两个列表的单个元素

List 比较DrRacket中相同长度的两个列表的单个元素,list,scheme,racket,List,Scheme,Racket,我正在尝试编写一个函数,它接受两个列表(长度必须相等),然后遍历每个列表,比较各个项目 例如:(1 2 3)和(2 4 5)将返回true,因为列表2中的每个元素都大于列表1中相应的元素(1 2 3)和(0 4 1)将返回false,正如(1 2 3)和(1 2 3 4)一样,因为它们的大小不同。使用Dr Racket (define (each-bigger? a-lon another-lon) (cond (if [(= (length a-lon) (length a

我正在尝试编写一个函数,它接受两个列表(长度必须相等),然后遍历每个列表,比较各个项目

例如:
(1 2 3)
(2 4 5)
将返回true,因为列表2中的每个元素都大于列表1中相应的元素
(1 2 3)
(0 4 1)
将返回
false
,正如
(1 2 3)
(1 2 3 4)
一样,因为它们的大小不同。使用Dr Racket

(define (each-bigger? a-lon another-lon)
  (cond
    (if
    [(= (length a-lon) (length another-lon))true]
    (then
    [(> (first a-lon) (first another-lon))true]
    (then
    [(> (rest a-lon) (rest another-lon))true]
    [else false]))))) 

这不起作用。

不幸的是,您的语法和逻辑都错了。我相信你的意图是写这样的东西:

(定义(每个更大的?lst1 lst2)
(续)
((和(null?lst1)(null?lst2))#t);两个列表都为空=>true
((或(null?lst1)(null?lst2))#f);只有一个为空=>长度不同=>false
((>=(car lst1)(car lst2))#f);lst1的第一个元素>=lst2的第一个元素=>false
(其他(每个更大的)(cdr lst1)(cdr lst2()()));在列表的其余部分重复出现
可以缩短为

(定义(每个更大的?lst1 lst2)
(或(和(null?lst1)(null?lst2));两个列表都为空
(和(不是(或(null?lst1)(null?lst2)));或1)它们都不是空的
(<(车辆lst1)(车辆lst2));2)和lst1的第一个元素

希望这有帮助

显然,您希望从头开始实施一个解决方案,@uselpa的建议非常恰当。但在非学术背景下,你应该使用现有的程序来解决这类问题,尤其是你最好的朋友:

(define (each-bigger? lst1 lst2)
  (and (= (length lst1) (length lst2))
       (andmap < lst1 lst2)))

不幸的是,
和map
不能处理列表大小不相同的情况。@uselpa这个问题没问题,如前所述:“编写一个函数,它包含两个列表(长度必须相等)…”它还说“将返回false,因为它们的大小不同。”@uselpa mmm,我错过了那部分。对,我正在更新我的答案。谢谢你指出!唐纳:想评论一下吗?有没有改进我的答案的建议,或者在目前的状态下有什么问题?
(each-bigger? '(1 2 3) '(2 4 5))
=> #t
(each-bigger? '(1 2 3) '(0 4 1))
=> #f
(each-bigger? '(1 2 3) '(2 4 5 6))
=> #f