OCaml:输入两个值的顺序

Rod*_*nko 0 ocaml arguments

在函数式语言中,评估函数的参数应该没有意义.

然而,即使是最简单的程序也可能不是很有用.这里代码读取两个整数并将其中一个引入其他整数:

let pwr x y =
    let rec pwrx = function 0 -> 1 | y -> x * pwrx (y - 1)
    in pwrx y;;

print_int (pwr (read_int ()) (read_int ()));;
Run Code Online (Sandbox Code Playgroud)

该代码,很明显,首先读取第二个参数:如果54被输入,结果是1024.

我认为问题在于错误处理语言而缺乏对其意识形态的理解.我该如何正确地写这些东西?在调用函数之前,我应该在单独的行中读取两个值吗?

let x = read_int();;
let y = read_int();;
print_int (pwr x y);;
Run Code Online (Sandbox Code Playgroud)

它有效,但看起来有点开销 - 不是吗?

Jac*_*ack 5

问题不在于缺乏语言的功能方面,而是read_line因为它依赖于外部输入,因此这样的功能本身并不具有功能性stdin.

你应该像你一样使用本地声明(甚至在官方文档中也指出了这一点).因为它们只是声明,所以没有真正的开销.