Racket 不使用andmap比较列表列表的所有元素

Racket 不使用andmap比较列表列表的所有元素,racket,Racket,我有两份清单: (define casos ’((a 3 15 r +)(l 41 9 -))) (define extension ’((b 4 5 r -)(c 4 90 d -))) 我想得到这两个列表中最后一个元素不同的列表数(+或-) 为此,我使用了和map: (define iguales 0) (andmap (lambda (x y) (cond ((eq? (last x) (last y)) (se

我有两份清单:

(define casos ’((a 3 15 r +)(l 41 9 -)))
(define extension ’((b 4 5 r -)(c 4 90 d -)))
我想得到这两个列表中最后一个元素不同的列表数(
+
-

为此,我使用了
和map

(define iguales 0)

(andmap
    (lambda (x y)
        (cond 
          ((eq? (last x) (last y)) 
             (set! iguales (add1 iguales)))) iguales)
    casos extension) 
如果使用前面的列表运行此代码,
iguales
将为1

我不认为
和map
是正确的方法

有没有更好的方法不用使用
和map

如果需要计算满足条件的元素数量,那么使用,这非常简单,并且可以将多个列表作为参数传递(如您的情况):

特别是在这种情况下,
和map
不是正确的工具。一般情况下:避免使用
set
,大多数情况下,您可以使用函数式编程风格执行您想要的操作。请花些时间研究标准库中的可用元素。

如果需要计算满足条件的元素数量,请使用,这非常简单,您可以传递多个列表作为参数(如您的情况):

特别是在这种情况下,
和map
不是正确的工具。一般情况下:避免使用
set
,大多数情况下,您可以使用函数式编程风格执行您想要的操作。请花些时间学习标准图书馆中提供的内容。

对于Scheme,“SICP”是一本非常好的学习书籍。还有“如何设计程序”和“小阴谋家”,这可能更容易掌握。对于阴谋来说,“SICP”是一本非常棒的学习书籍。还有“如何设计程序”和“小阴谋家”,这可能更容易掌握。
(define casos '((a 3 15 r +)(l 41 9 -)))
(define extension '((b 4 5 r -)(c 4 90 d -)))

(count (lambda (caso ext) (eq? (last caso) (last ext)))
       casos
       extension)

=> 1