2012-07-03 20 views
5

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!

Odpowiedz

11

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.

+1

Czy możesz wyjaśnić, że ((+) 7) jest typu int-> int? To mnie myli. Jak przebiega od int do int? –

+1

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. –

+0

@JeffreyScofield: cóż, technicznie rzecz biorąc, jest to odpowiednik "zabawy x -> 7 + x", ale tutaj jest to ta sama rzecz. – newacct

2

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.