Ocaml: Как получить список каждой комбинации перестановки двух списков? - PullRequest
1 голос
/ 22 октября 2011

У меня есть два списка, скажем, например:

let x = [1;2];;
let y = [true;false];;

Я хочу иметь (int * boolean) список списков с

[[(1,true);(2;false)];[(1,true);(2,true);];[(1,false);(2,true);];[(1,false);(2,false);]]

Кто-нибудь знает, каксделать это?

Ответы [ 3 ]

2 голосов
/ 22 октября 2011

Вопрос не очень хорошо задан относительно того, что именно является операцией.А как насчет [(1,true);(1,false)]?Кажется, что операция не симметрична - вещи в x всегда появляются в этом порядке, в то время как вещи в y могут повторяться и появляться в любом порядке.Возможно, это поможет, если разбить его на две задачи:

  1. Каждая перестановка с повторением второго списка
  2. Сжатие каждого результата с первым списком
2 голосов
/ 22 октября 2011

Я думаю, что никто не отвечает, потому что это похоже на домашнее задание. Я бы начал с рассмотрения только вторых элементов всех пар в желаемом результате. Я вижу довольно регулярную структуру: TF, TT, FT, FF. Было бы немного больше регулярных в порядке (скажем) FF, FT, TF, TT. В любом случае, если вы можете создать список списков, который выглядит следующим образом, объединить списки с другими списками довольно просто, используя функции из модуля List.

(Вы могли бы получить больше ответов, если бы показали некоторые вещи, которые вы пробовали, и объяснили, почему они не работают.)

С уважением,

0 голосов
/ 22 октября 2011

Вы можете обратиться к Список документов модуля

В противном случае просто введите

$ cd `ocamlc -where`
$ less list.mli

Вы можете найти функции для того, что вы хотите сделать.

...