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