let rec dig l x = if (x = 0) then l else dig (x%10 :: l) (x/10)
let rec gen l n = if (n = 0) then l else gen (dig l n) (n-1)
Можно ли как-нибудь покороче записать подобные конструкции? Многословно как-то, if бесит...
Наверняка на Хаскеле раза в два короче можно, но меня интересует ситуация в окамле...
Re: [F#] Вопрос по синтаксису
От:
Аноним
Дата:
19.06.09 07:18
Оценка:
Здравствуйте, Пельмешко, Вы писали:
П>но меня интересует ситуация в окамле...
Так F# или OCaml? На F# можно еще так записать:
let rec dig l = function
|0 -> l
|x -> dig (x%10 :: l) (x/10)
let rec gen l = function
|0 -> l
|n -> gen (dig l n) (n-1)
Здравствуйте, deniok, Вы писали:
D>Зачем gen такой сложный, проверка на ноль уже же есть в dig?
Насчет gen прошу прощения, спросонья решил, что он должен делать что-то другое по сравнению с тем, что он делает. (Кстати, что он должен делать до сих пор не понимаю )
Здравствуйте, Пельмешко, Вы писали:
П>Здравствуйте, Аноним, Вы писали:
А>>Так F# или OCaml? На F# можно еще так записать: А>>
А>>let rec dig l = function
А>> |0 -> l
А>> |x -> dig (x%10 :: l) (x/10)
А>>let rec gen l = function
А>> |0 -> l
А>> |n -> gen (dig l n) (n-1)
А>>
П>F#, я видимо недооценил различие П>Спасибо, находил этот вариант, просто хотелось как-нить короче в одну строку...
Можно еще так:
let rec dig l x = match x with 0 -> l | n -> dig (n%10 :: l) (n/10)
Luck in life always exists in the form of an abstract class that cannot be instantiated directly and needs to be inherited by hard work and dedication.
let rec dig l = function
|0 -> l
|x -> dig (x mod 10 :: l) (x/10);;
let rec gen l = function
|0 -> l
|n -> gen (dig l n) (n-1);;
П>Спасибо, находил этот вариант, просто хотелось как-нить короче в одну строку...
Тогда тебе нужн изучать J и K или на худой конец APL
Re[5]: [F#] Вопрос по синтаксису
От:
Аноним
Дата:
20.06.09 09:48
Оценка:
Здравствуйте, FR, Пельмешко, Вы писали:
П>>Спасибо, находил этот вариант, просто хотелось как-нить короче в одну строку... FR>Тогда тебе нужн изучать J и K или на худой конец APL
Ну (простите, Пельмешко) на хаскеле тоже можно в одну строку:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, FR, Пельмешко, Вы писали:
П>>>Спасибо, находил этот вариант, просто хотелось как-нить короче в одну строку... FR>>Тогда тебе нужн изучать J и K или на худой конец APL
А>Ну (простите, Пельмешко) на хаскеле тоже можно в одну строку:
Так чуть выше и на F# в одну строку, ну и list comprehension доступен как в Ocaml (camlp4 из коробки и стороние расширения, например Batteries Included) так и F# правда только для генераторов
Re[7]: [F#] Вопрос по синтаксису
От:
Аноним
Дата:
20.06.09 11:06
Оценка:
Здравствуйте, FR, Вы писали:
FR>Так чуть выше и на F# в одну строку, ну и list comprehension доступен как в Ocaml
Там только половина решения в одну строку вытянуто. Ну и раз доступен, почему бы здесь не привести для сравнения?