Медленно получать навык согласования списка и хвостовую рекурсию, мне нужна функция, которая «стежки» список списков вместе оставляя от промежуточных значений (проще показать, чем объяснить):Merge/нарисуйте последующие статьи seqs
слияния [[1; 2; 3]; [3; 4; 5]; [5; 6; 7]] // -> [1; 2; 3; 4; 5; 6; 7]
Код для функции List.merge выглядит следующим образом:
///Like concat, but removes first value of each inner list except the first one
let merge lst =
let rec loop acc lst =
match lst with
| [] -> acc
| h::t ->
match acc with
| [] -> loop (acc @ h) t
| _ -> loop (acc @ (List.tl h)) t //first time omit first value
loop [] lst
(ОК, это не совсем так CONCAT, потому что он обрабатывает только два уровня списка)
Вопрос: Как это сделать для Seq Seqs (без использования изменяемого флага)?
UPDATE (вос комментарий от Juliet): Мой код создает «пути» состоит из «сегментов», которые основаны на типа опции:
type SegmentDef = Straight of float | Curve of float * float
let Project sampleinterval segdefs = //('clever' code here)
Когда я делаю List.map (проект 1.) ListOfSegmentDefs, я возвращаю список, где каждый сегмент начинается в той же точке, где заканчивается предыдущий сегмент. Я хочу присоединиться к этим спискам вместе, чтобы получить Path, сохраняя только «верх/конец» каждого перекрытия, но мне не нужно делать «Set», потому что я знаю, что у меня нет других дубликатов.
Не совсем понятно, на что вы ссылаетесь на «промежуточные значения». Вы пытаетесь сгладить список и удалить дубликаты одновременно? Пытаетесь отрубить первый элемент каждого подписок? – Juliet