Я новичок в Моцарте Оз, и мне нужно решить следующие проблемы:
a) Implement a function Zip that takes a pair Xs#Ys of two lists Xs and Ys (of the
same length) and returns a pairlist, where the first field of each pair is taken
from Xs and the second from Ys. For example, {Zip [a b c]#[1 2 3]} returns the
pairlist [a#1 b#2 c#3].
b) The function UnZip does the inverse, for example {UnZip [a#1 b#2 c#3]}
returns [a b c]#[1 2 3]. Give a specification and implementation of UnZip.
Все, что я знаю, это то, что #
— это своего рода метка, которая составляет пару/кортеж, взятую из документации, но я не смог найти пример, иллюстрирующий, как с ней работать.
Мой вопрос заключается в том, как разделить его, чтобы получить элементы или как работать с этим ярлыком (или любым источником, в котором может быть пример того, как с ним работать).
Я немного поискал и пришел к этому фрагменту кода (я не знаю, правильно ли он вообще синтаксически):
declare
fun {Zip L}
case L of nil then nil
[] L1#L2 then .... % Here i'm stuck or i don't know how to proceed
end
end
{Browse {Zip ['a' 'b' 'c']#[1 2 3]}}
Любая помощь будет оценена.
Спасибо за ваше время.