Pertanyaan Jenis OCaml dari operator plus


Mengapa tipe plus (+) dianggap int -> int -> int sebagai lawan (int * int) -> int? Bagi saya, yang kedua masuk akal karena "menerima" 2-tupel (yang ditambahkan) dan mengembalikan satu int (jumlah mereka).

Terima kasih!


5
2017-07-03 01:25


asal


Jawaban:


Anda bisa membuat bahasa di mana (+) memiliki tipe (int * int) -> int. Bahkan, SML bekerja persis seperti ini. Itu hanya memengaruhi arti operator infiks. Namun konvensi OCaml sangat mendukung penggunaan fungsi kari (dari tipe a -> b -> c) daripada yang tidak kering. Satu hasil bagus adalah Anda dapat menerapkan sebagian. Sebagai contoh ((+) 7) adalah ekspresi tipe yang berarti int -> int. Saya menganggap notasi ini cukup berguna.


11
2017-07-03 01:42



Ini mungkin tampak sedikit tidak membantu, tetapi karena fungsinya membutuhkan dua argumen.

Ketika suatu fungsi mengambil tuple, itu berarti mengambil satu argumen.

Karena (+) adalah fungsi inline, mengambil satu argumen tidak akan berguna, karena akan terlihat seperti itu + (1,2) sebagai lawan 1 + 2.


2
2017-07-03 01:29