metaclass: (Default)
[personal profile] metaclass
В обычных языках параметры, которые содержат дефолтные значения, нужно запиливать в конец списка параметров, иначе не скомпилируется. Т.е что-то вроде strToIntDef(s:string;default:integer=0);

В хаскеле сия привычка вылазит боком, так как сделать из функции с полным набором параметров функцию с дефолтными можно частичным ее применением, а для этого нужно чтобы параметры, которые часто используются с дефолтными значениями были в начале, иначе объявления получаются слишком многословные или приходится использовать всякие flip:
strToIntDef:: String -> Int -> Int
...
strToIntDef' x = strToIntDef x 0

а вот если сделать так, то получается гуманно, и можно вообще вторую функцию не объявлять, а использовать сразу (strToIntDef 0) где нужно
strToIntDef:: Int -> String -> Int
...
strToIntDef' = strToIntDef 0

Date: 2009-12-06 12:53 pm (UTC)
From: [identity profile] lionet.livejournal.com
Тебе в OCaml: там аргументы можно, при желании, именовать, и даже делать частичное применение с аргументами, стоящими на произвольных местах в списке аргументов.

Date: 2009-12-07 11:27 am (UTC)
From: [identity profile] potan.livejournal.com
Особенно забавно это смотрится с учетом карринга.
Еще интересный факт - функция с именованным параметром с значением поумолчанию отличается по типу от функции с обязательным именованным параметром.

Date: 2009-12-06 01:59 pm (UTC)
From: [identity profile] gds.livejournal.com
кстати да, в окамле кроме именованных аргументов ещё есть и опциональные аргументы.
# value print_int ?(title="some int") x = Printf.printf "%s = %i\n%!" title x;
value print_int : ~?title:string -> int -> unit = <fun>
# print_int 123;
some int = 123
- : unit = ()
# print_int ~title:"my int" 42;
my int = 42
- : unit = ()
# 

Date: 2009-12-06 11:43 pm (UTC)
From: [identity profile] udpn.livejournal.com
В сишарпе нельзя вообще пропускать =)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 8th, 2025 02:51 am
Powered by Dreamwidth Studios