У меня есть этот тип данных:Сведение поток в SML
datatype 'a stream' = Susp of unit -> 'a stream
and 'a stream = Empty | Cons of 'a * 'a stream'
, и я хочу, чтобы написать функцию, которая имеет Свести ниже типа.
flatten: ’a stream’ stream’ -> ’a stream’
Функция flatten будет принимать поток потоков в качестве входных данных и сгладить их, добавив их.
Как это сделать? Есть идеи?
Спасибо.
Редактировать: Я знаю, как это сделать для списков. Это довольно просто: fun flatten [] = [] | flat (l::ls) = l @ flatten ls;
Помогите мне с потоками, пожалуйста, я не знаю, как шаблон сопоставить поток потока.
Я предполагаю, что это домашнее задание. Я предлагаю сначала попробовать сгладить список списков, а затем адаптировать его к потокам. –
@ AndreasRossberg, я знаю, как это сделать для списков. Это довольно просто: 'fun flatten [] = [] | flat (l :: ls) = l @ flatten ls; ' Помогите мне с потоками, пожалуйста, я не знаю, как шаблон сопоставить поток потока. – Dave
Вы рисуете как обычно: 'fun flatten Empty = ... | flatten (Cons (x, xs)) = ... '. Вам также необходимо определить 'append' в потоках. Единственным оставшимся трюком является вставка 'fn' в нужные места. –