cyc*_*115 3 ocaml functional-programming
我num_order rank -> int定义了一个函数。
以下函数调用将导致错误
let dom_rank r1 r = (num_order r1) > (num_order r)
dom_rank Seven Eight
Run Code Online (Sandbox Code Playgroud)
第1行:错误:此表达式的类型为int
Run Code Online (Sandbox Code Playgroud)This is not a function; it cannot be applied.
它似乎是导致问题的第一行...但是,当我删除第二行时,错误消失了。
该声明
let dom_rank r1 r = (num_order r1) > (num_order r)
dom_rank Seven Eight
Run Code Online (Sandbox Code Playgroud)
与...完全一样
let dom_rank r1 r = (num_order r1) > (num_order r) dom_rank Seven Eight
Run Code Online (Sandbox Code Playgroud)
要么
let dom_rank r1 r = (num_order r1) > ((num_order r) dom_rank Seven Eight)
Run Code Online (Sandbox Code Playgroud)
因为函数应用程序优先于二进制运算符(如>。考虑到这一点,编译器的错误消息应该很清楚。
要分离这两个语句,您可能会将它们写为
let dom_rank r1 r = (num_order r1) > (num_order r);;
dom_rank Seven Eight;;
Run Code Online (Sandbox Code Playgroud)
在互动式顶层,或
let dom_rank r1 r = (num_order r1) > (num_order r)
let dr78 = dom_rank Seven Eight
Run Code Online (Sandbox Code Playgroud)
在模块定义中,还为您计算的值命名。
触发仅具有副作用的功能的通常方法是使用特质
let () = print_endline "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
不要因为使用OCaml交互式循环和常规编程之间的差异而感到困惑。在OCaml交互式循环中,可以评估单个表达式,这具有打印结果值的副作用。在编写OCaml程序时,对表达式求值是错误的,我们应该改用let绑定。在OCaml交互式循环中,该;;序列可用于分隔短语。尽管也可以通过编写常规程序来支持此功能,但通常将其视为hacky结构,以增强交互式顶级代码和常规程序代码之间的兼容性。
的;是用于在若干个表达式在一个表达结合序列操作。不应;;仅将其表示句子的结尾与之混淆。
| 归档时间: |
|
| 查看次数: |
6128 次 |
| 最近记录: |