Я не уверен, что я даже знаю, как задать этот вопрос .. При реализации компилятора я хотел бы разрешить клиенту указывать, скажем, складки на кортежах. Я предоставил способ карри и раскручивать функцию, но только потому, что написал в Ocaml двоичный оператор и сложен его над представлениями типа и типа. Пользователь не смог записать эту функцию.Реализовать и представлять полиадические операции
В макропроцессоре пользователь может написать эту функцию, потому что кортежи - это списки.
Для функций в карри, пользователь может легко писать трансформаторы, поскольку этот термин является двоичным как на целевом, так и на представлении Ocaml этого термина и набрав.
Но они не могут сделать это для кортежей. Вот еще один пример: пользователь легко определяет оператор серийной функциональной композиции. Но пользователь не может определить параллельный состав: бинарная версия:
f1: D1 -> C1, f2: D2-> C2 --> f1 * f2: D1 * D2 -> C1 * C2
легко написано, но не может быть продлен до 3-х условиях: здесь складка бы вычислить
f1 * (f2 * f3)
вместо
f1 * f2 * f3
[изоморфно, но не равно]
Обобщение этого вопроса: «Как мне внедрить полиадический язык программирования ", который слишком много, чтобы спросить здесь. То, что я пытался сделать, это обеспечить встроенный трансформатор:
карри: T1 * T2 * T3 ... -> T1 -> T2 -> ... uncurry: T1 -> T2 -> .. T1 * T2 * T3
так, то пользователь просто может сделать сгибы с бинарным оператором:
uncurry (fold user_op (uncurry term))
, но это не является ни достаточно универсален и не работает так хорошо .. :)
Я думаю, эквивалентный вопрос для Haskell было бы: поскольку Haskell не имеет n-арных продуктов, конструкторы n-ary tuple моделируются в th e библиотека с n функциями, каждая из которых должна быть выписана вручную. Это явно отстой. Как это будет исправлено?
[Я имею в виду, это тривиально, чтобы написать сценарий Python для создания этих п функций вплоть до некоторого предела п, так почему это так трудно сделать это в хорошо напечатанные образом внутри язык?]
Да, но это не мой вопрос: я не спрашиваю о том, что делает система типа Ocaml, я спрашиваю, как реализовать это на другом языке (мой язык Felix на самом деле, компилятор для которого написан в Ocaml). – Yttrill