G>Как в Окамл реализовать конверсию кортежа в список, в массив, в запись?
G>Записи в массив, в кортеж
итп. ?
G>Средствами самого ОКамла это вроде бы невозможно?
G>Расширения на Си?
По честному, это невозможно. Однако, учитывая, что массивы, записи и кортежи хранятся внутри окемла одинаково, то можно их грязно преобразовывать при помощи Obj.magic. Только за любые дальнейшие беды (в основном связанные со сборкой мусора и дальнейшим падением программы) разработчики окемла уже не отвечают.
Примеры из серии "никогда не повторяйте этого дома":
# (Obj.magic (1,2,3,4,5) : int array);;
- : int array = [|1; 2; 3; 4; 5|]
# Array.length (Obj.magic (1, 'a', "bcd", [2;3]));:
- : int = 4 (* к массиву лучше не приводить ;) *)
# type 'a l = {hd:'a; tl:'a l};;
type 'a l = { hd : 'a; tl : 'a l; }
# (Obj.magic {hd=1; tl={hd=2; tl=Obj.magic 0}} : int list);;
- : int list = [1; 2]
Повторюсь, делать этого официально нельзя. Хавьер Лерой сказал: "мы не принимаем баг-репорты с программами, использующими модуль Obj".
G>Кстати в SML, оказывается, операция индексирования кортежа есть, но в ОКамл похоже не попала
.
G>Опять же, как и задача вызова curryied функции со списком аргументов, в Java это решаемо при помощи Reflection API.
G>Кстати очень хотелось бы чего либо подобного для OCaml.
Никогда в окемле не будет рефлекшна. Окемл не хранит информацию о типах в рантайме. Иначе, зачем тогда статическая типизация.