几个列表作为函数的输入

时间:2018-11-05 12:13:55

标签: scheme

我正在定义一个使用三个列表的函数(下面的“ my-function” )。 它检查这三个列表是否满足特定条件,然后执行其他操作。此条件的长度为2(我怀疑这并不重要,但我更愿意提及)。因此,其格式为:

(define my-function (lambda (list1 list2 list3)
    (cond                                                                            
     [(and (= (length list1) 2) (= (length list2) 2) (= (length list3) 2))...

我的问题是:如何将“我的功能”推广到许多列表?

更笼统地说:有没有办法将列表索引到函数的输入中,然后一一调用它们以检查条件?

1 个答案:

答案 0 :(得分:2)

您可以使用andmap来检查条件是否满足列表中的 all 个元素:

(define lsts (list list1 list2 list3 list4))
(andmap (lambda (lst) (= (length lst) 2))
        lsts)

诀窍是用您要检查的元素创建一个列表,在这种情况下,它们就是列表本身。为了进一步概括这一点,您可以将进行检查的lambda作为参数传递,并且可以将子列表作为变量参数传递:

(define (my-function check . lsts)
  (andmap check lsts))

(my-function (lambda (lst) (= (length lst) 2))
             list1 list2 list3 list4)