Pull to refresh

Comments 14

Ага, теперь я осознал, НАСКОЛЬКО близок F# к OCaml!
Ну конечно, взяли окамл, с которым была одна проблема — NIH, ну и осилили из него, сколько смогли.
Остаётся только гадать какие же синтаксические правила заставили в list literal разделять элементы точкой с запятой, а не пробелом.
Неужели кто-то считает что
[1; 2; 3; 4; 5]
читать проще чем
[1 2 3 4 5]

?
Да, не перевелись ещё кодеры, ценящие синтаксический мусор в сорцах.
Ровно до того момента, пока вы не захотите наполнить его чем-то сложнее int'а (например, выражениями).
Вот я и интересуюсь, какие правила в достаточно простом языке OCaml могли этому помешать. Куда уж запутаннее синтаксис чем в языке matlab (не к ночи будь помянут), а проблем не возникло.

octave:1> [1 2+3 sin(4)]
ans =

1.00000 5.00000 -0.75680

Не говоря уж языках без инфиксной арифметики и прочих тиклях.
Аргументы в скобках. В окамле — без. А скобки означают touple.
Ясно. Проблема в отсутствии обозначения для операции вызова функции, что в общем случае не обязательно плохо. Точки с запятой всё-равно можно было бы убрать, но тогда синтаксис контекстно-зависимым станет.

Сколько ни вижу новых языков, самым читаемым остаётся TCL 88-го года. :)
Нет, конечно, я не говорю, что он лучше чем OCaml, у них области применения даже не пересекаются.
Нет, проблема вовсе не в этом. Обозначение для операции вызова функции (аппликации) есть:

a b — это применить функцию a к операнду b.

В данном месте никакой проблемы нет — просто такой вот синтаксис у ML. Так сложилось.
Вообще-то, tuple обозначается запятыми:

# 1,2,3
;;
— : int * int * int = (1, 2, 3)
#

А скобки — это ээ, скобки. Группируют выражение. В т.ч. и пустое выражение unit.
Совсем не обязательно лепить ;; в конце каждой конструкции. Если посмотреть на реальные проекты на окамле, то можно увидеть, что этот оператор практически никогда не используется.

Я понимаю что приведенные исходники набирались, вероятно, в консоли, где (;;) нужен интерпретатору, но нормальные исходники могут обходиться без этого мусора.
UFO just landed and posted this here
Пролог — это не функциональный язык. OCaml ближе к LISP'у.
Пролог работает по правилам вывода, т.е. из известных выводит неизвестные, перебирая доступные правила (факты).
Здесь же выполнение идет от аргументов функции к ее результату, фактически линейное с callback'ами.
Sign up to leave a comment.

Articles