Синтаксис OCaml: переменные рядом - PullRequest
0 голосов
/ 04 мая 2020

Мне кажется, что мне не хватает некоторых важных основ, касающихся этого странного языка.

Рассмотрим следующую программу:

let q f x = f x x;;
let s = q (+);;

Если я запусту это в OCaml, я получу:

val q : ('a -> 'a -> 'b) -> 'a -> 'b = <fun>
val s : int -> int = <fun>

По сравнению с другим кодом OCaml, который я видел, синтаксис для меня действительно странный. В первой строке, что делает установка q в fxx? Что делает q (+) также (надеясь, что смогу понять это, если получу первую часть)? Любая помощь в понимании этого кода поможет.

1 Ответ

1 голос
/ 04 мая 2020

Возможно, вы упускаете тот факт, что для функции используется пробел.

С круглыми скобками для аргументов у вас есть

q(f,x)    = f(x,x)
s(n)      = q(plus, n)
plus(k,l) = k + l

(+), являющийся ярлыком для функции который принимает x и y и возвращает x + y, который вы также можете написать (+) x x.

В вашем случае q (+) - это функция

fun x -> x + x
...