Выбор некоторых списков из списка списков - PullRequest
0 голосов
/ 19 ноября 2018

Я хотел бы иметь несколько списков из списка списков при определенных условиях. Например:

`((a w) (e w))`

от

`((a w) (e w) (i u) (o u))`

, где условие должно иметь 'w во второй позиции.

Мой код

(filter (andmap (equal? (cdr lst) 'w)) 'lst)

с

(define lst '((a w) (e w) (i u) (o u)))

не работает. Что я делаю не так?

1 Ответ

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

Вы не должны цитировать список: 'lst - это не то же самое, что lst. А для доступа ко второму элементу используйте second (если он не определен, используйте cadr). С cdr вы получаете остаток списка (который является другим списком), а не его второй элемент . Да, и filter ожидает lambda в качестве первого аргумента, а не andmap. Вот что я имею в виду:

(define lst '((a w) (e w) (i u) (o u)))
(filter (lambda (sl) (equal? (second sl) 'w))
        lst)
=> '((a w) (e w))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...