LINUX.ORG.RU

Помогите с OCaml


0

0

Например ф-я

let rec sum = function
    [] -> 0
    | k :: l -> k + sum l;;

и 

let rec fib = function 
    0 -> 0
    | 1 -> 1
    | j -> fib (j - 2) + fib (j - 1);;

В случае с fib, все ясно. А вот с sum, не вижу логики. 
(off: спец. для Pi - спасибо конечно, но результат я вижу и знаю,
 что это pattern matching)

К примеру, как будет выглядеть sum, если нужно высчитать
сумму каждого 2 элемента ?

Объясните плиз, или ткните носом туда, где все это подробно расписано.
 
Спасибо заранее.
anonymous

Pi действительно верно указал, а я дурак.

Как пример, помоему будет легче понять:

let rec sum = function
  [] -> 0
  | head :: tail -> head + sum tail;;

т.е head - первый элемент; tail - остальная часть списка

А сумму каждого 2 элемента, получается, можно высчитать 
примерно так:

let rec sum2 = function	
  [] -> 0
  | _::[] -> 0
  | x :: y :: z -> y + sum2 (z);;

anonymous
()

Кстати, что мне понравилось, так это то, что fib собранный ocamlopt высчитывается быстрее чем fib на C (gcc) и в разы быстрее чем аналог на ruby. До остального я еще не добрался, но уже радует. Жаль, только библиотек к нему мало.

И еще, кто-то, что либо серьезно на нем писал ? Я пока не знаю куда его можно будет применить, кроме как для самообразования ;)

anonymous
()

А так же - | i :: j :: tl -> i + (sum2 tl) | i :: [] -> i

Серьёзного на нём много чего пишут. Например, его серьёзно используют в Microsoft Research, применяют по назначению - для систем автоматического доказательства. Что и не шибко удивляет - сам создатель ML там и работает.

anonymous
()
Ответ на: комментарий от anonymous

> можешь воспользоваться F#, к нему библиотека - весь .NET.

При этом он тормознее того же C#

anonymous
()
Ответ на: комментарий от anonymous

> И еще, кто-то, что либо серьезно на нем писал ?

Нифига серьезного на нем не пишут. Да, применяется во всяких научно-исследовательских проектах за бугром, но не более. Для "промышленного" программирования ocaml слаб: библиотек мало, поддержка хреновая, знающих его программистов почти нет и т.д.

Справедливости ради следует отметить, что ocaml единственная более или менее жизнеспособная с позиции практики поделка из всего зоопарка (полу)функциональных языков программирования.

> Я пока не знаю куда его можно будет применить, кроме как для самообразования ;)

Туда его, туда ...

anonymous
()
Ответ на: комментарий от anonymous

>Справедливости ради следует отметить, что ocaml единственная более или менее жизнеспособная с позиции практики поделка из всего зоопарка (полу)функциональных языков программирования.

А как же Erlang? Практичный язык (для своих задач).

WFrag ★★★★
()
Ответ на: комментарий от anonymous

А ещё Nemerle.

А ещё Common Lisp. Промышленный, проверенный десятилетиями, отточенный, в общем mature.

anonymous
()
Ответ на: комментарий от anonymous

Уже не тормознее. И уже совсем Open Source. И уже toplevel приделали.

anonymous
()
Ответ на: комментарий от anonymous

Например, в NY есть один инвестиционный банк, где всю аналитику на OCaml пишут. Это не промышленное применение, да?

anonymous
()
Ответ на: комментарий от anonymous

Да, и вообще, с какого хера быдло посмело называть научно-исследовательские проекты "несерьёзными"? Ничего более серьёзного, чем наука, в мире нет. Всё, что есть - это продукт науки. А уж когда наука доведёт продукт до ума, и разжуёт так, что даже быдло сможет реализовать - тогда оно попадает в индустрию (набитую быдлом и серыми убогими личностями). Очень смешно (и очень грустно) когда это быдло и убожества начинают вякать на науку, что она типа несерьёзная, а их сайтики васепупкиных - суперсерьёзные промышленные приложения.

anonymous
()
Ответ на: комментарий от anonymous

> А ещё Nemerle. > А ещё Common Lisp.

Хлам. По тем же причинам - непопулярны, и как следствие пригодны для ограниченного круга задач.

anonymous
()
Ответ на: комментарий от anonymous

> Например, в NY есть один инвестиционный банк, где всю аналитику на OCaml пишут. Это не промышленное применение, да?

Родной, расскажи как ты об этом узнал ? Ты наверное что-то перепутал.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.