首页 > 解决方案 > 几个列表作为函数的输入

问题描述

我正在使用三个列表定义一个函数(下面的“my-function” )。它检查这三个列表是否满足某个条件,然后做更多的事情。这个条件是长度为 2(我怀疑这并不重要,但我更愿意提及它)。因此,它具有以下形式:

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

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

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

标签: scheme

解决方案


您可以使用andmap检查条件是否适用于列表中的所有元素:

(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)

推荐阅读