Как отобразить список на список в схеме - PullRequest
1 голос
/ 27 февраля 2011

Я пишу функцию, которая принимает два списка и должна создать новый список, подобный этому:

(a b) (c d e f) --> ((a b c) (a b d) (a b e) (a b f))

т.е. каждый элемент второго списка добавляется как элемент в первый список, одиндля каждого элемента второго списка.

Я не могу понять, как это сделать.Я пробовал варианты:

(map list (list1) (list2))

безуспешно.

Любой совет приветствуется.

1 Ответ

2 голосов
/ 27 февраля 2011

Использование map с несколькими аргументами будет повторять списки параллельно, а это не то, что вам нужно.

То, что вы хотите, это в основном добавить первый список к каждому из элементов второго списка. Итак, вы хотите что-то вроде:

(map (lambda (x) (append list1 (list x))) list2)

Обратите внимание, что добавление в конец списка - это операция O(n), поэтому, если вы сможете реструктурировать свой алгоритм, чтобы можно было добавлять каждый элемент в начале списка, это было бы лучше.

...