Несколько списков в качестве входа для функции - PullRequest
0 голосов
/ 05 ноября 2018

Я определяю функцию ( "my-function" ниже), используя три списка. Он проверяет, удовлетворяют ли эти три списка определенному условию, а затем выполняет что-то большее. Это условие должно иметь длину 2 (я подозреваю, что это не важно, но я предпочитаю упомянуть об этом). Следовательно, оно имеет вид:

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

Мой вопрос: как я могу обобщить «мою функцию» для нескольких списков?

В более общем смысле: есть ли способ индексировать списки во входные данные функции и затем вызывать их один за другим для проверки условия?

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...