Dlaczego typ plusa (+) jest uważany za int -> int -> int
w przeciwieństwie do (int * int) -> int
? Dla mnie drugi ma sens, ponieważ "akceptuje" 2-tkę (dodatki) i zwraca pojedynczą int
(ich sumę).Typ OCaml operatora plusa
Dziękujemy!
Dlaczego typ plusa (+) jest uważany za int -> int -> int
w przeciwieństwie do (int * int) -> int
? Dla mnie drugi ma sens, ponieważ "akceptuje" 2-tkę (dodatki) i zwraca pojedynczą int
(ich sumę).Typ OCaml operatora plusa
Dziękujemy!
Można utworzyć język, w którym (+)
ma typ . W rzeczywistości SML działa dokładnie w ten sposób. Wpływa tylko na znaczenie operatorów infiksów. Jednak konwencje OCaml zdecydowanie faworyzują użycie funkcji curry (typu a -> b -> c
), a nie niespokojnych. Jednym dobrym wynikiem jest to, że możesz je częściowo zastosować. Na przykład ((+) 7) jest znaczącym wyrażeniem typu int -> int
. Ta notacja jest dość przydatna.
Może wydawać się to trochę nieprzydatne, ale dzieje się tak dlatego, że funkcja przyjmuje dwa argumenty.
Gdy funkcja przyjmuje krotkę, przyjmuje jeden argument.
Ponieważ (+)
jest funkcja inline, biorąc jeden argument nie byłby przydatny, jak to będzie wyglądać + (1,2)
w przeciwieństwie do 1 + 2
.
Czy możesz wyjaśnić, że ((+) 7) jest typu int-> int? To mnie myli. Jak przebiega od int do int? –
Krótka odpowiedź brzmi, że jest to funkcja dodająca 7 do tego, co mu dasz. Odpowiada to "zabawie x -> x + 7". Aby uzyskać dłuższą odpowiedź, mogę edytować powyższą odpowiedź, jeśli chcesz. –
@JeffreyScofield: cóż, technicznie rzecz biorąc, jest to odpowiednik "zabawy x -> 7 + x", ale tutaj jest to ta sama rzecz. – newacct