Как вы читаете вывод функции ввода OCaml в своем ментальном диалоге? - PullRequest
3 голосов
/ 04 июля 2011

Для [1] :

# let make pair int (x:int) (y:int) = x,y ;;
val make_pair_int : int -> int -> int * int = <fun>

Как вы читаете вывод информации о наборе? На других языках я считаю, что возможность составить убедительное английское предложение из синтаксиса или распечаток имеет решающее значение для понимания происходящего. Какое предложение для приведенного выше заявления OCaml?

Может ли кто-нибудь нарисовать схему распечатки, чтобы соотнести информацию о наборе с английской версией? Как:

val make_pair_int : int -> int -> int * int = <fun>
      |              |   |  |   |  \_____/  \__/
      |              |   |  |   |     |       ` is a function
      |              |   |  |   |     ` a tuple of integers
      |              |   |  |   `
      |              |   |  `
      |              |   `
      |              `
      ` symbol make_pair_int is bound to

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Это всего лишь карри версия вашей функции.Чтение такой функции зависит от того, насколько вы удобны с каррированной нотацией для функций.

Суть в том, что с двумя аргументами - это совершенно другое понятие, чем с парой аргументов в том смысле, что пара делает ссылку на конструктор определенного типа (что скрыто под символами * и , в вашем фрагменте ocaml).

Что делать, если вы не хотите ссылаться на конструкцию Pairing (или tupling , если вам нужен произвольный массив аргументов)?Карри ответ на этот вопрос - тот, который использует функции высшего порядка :

val make_pair_int : int -> int -> int * int = <fun>
      |              |   |  |   |  \_____/  \__/
      |              |   |  |   |     |       ` and all that is a higher-order function
      |              |   |  |   |     ` a pair of integers
      |              |   |  |   `and returns
      |              |   |  `a function that takes an integer as an argument
      |              |   `and returns
      |              ` something that takes an integer as an argument 
      ` symbol make_pair_int is bound to

С неявным соглашением, что эта карри интерпретация (и обозначение, которое идет с ним)это допустимый способ восприятия функции, принимающей несколько аргументов, вы можете просто посчитать количество стрелок в типе и считать те, которые стоят перед последним, как «аргументы» вашей функции.

2 голосов
/ 04 июля 2011

Я думаю, это очень субъективно и зависит от использования функции.Обычно я пытаюсь прочитать это как незакрытую версию функции, а затем читаю это в уме.Однако, если бы я фактически использовал эту функцию для создания замыканий, я мог бы прочитать ее как нечто иное.

Так что в этом случае, в зависимости от контекста, в котором я использую эту функцию, я бы прочитал ее как:

"функция от int и int до кортежа целых чисел "

В других случаях то же самое может стать:

" функция от int до функции от int до кортежа целых чисел "

IУгадайте, что возможность переключения между двумя представлениями одной и той же функции обеспечивает большую гибкость при использовании этой функции позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...