gpt4 book ai didi

functional-programming - OCaml 这不是一个函数;它不能应用

转载 作者:行者123 更新时间:2023-12-04 08:42:03 28 4
gpt4 key购买 nike

我定义了一个函数 num_order rank -> int

下面的函数调用会报错

let dom_rank r1 r = (num_order r1) > (num_order r)
dom_rank Seven Eight

Line 1: Error: This expression has type int

  This is not a function; it cannot be applied.

这似乎是导致问题的第一行......但是当我删除第二行时,错误消失了。

最佳答案

声明

let dom_rank r1 r = (num_order r1) > (num_order r)
dom_rank Seven Eight

完全一样
let dom_rank r1 r = (num_order r1) > (num_order r) dom_rank Seven Eight

let dom_rank r1 r = (num_order r1) > ((num_order r) dom_rank Seven Eight)

因为函数应用优先于像 > 这样的二元运算符。考虑到这一点,编译器的错误信息应该很清楚了。

要将这两个语句分开,您可能会将它们写成

let dom_rank r1 r = (num_order r1) > (num_order r);;
dom_rank Seven Eight;;

在交互式顶层,或作为

let dom_rank r1 r = (num_order r1) > (num_order r)
let dr78 = dom_rank Seven Eight

在模块定义中,还为您计算的值命名。

触发只有副作用的函数的通常方法是使用特殊的

let () = print_endline "Hello, World!"

不要被使用 OCaml 交互式循环和常规编程之间的差异所迷惑。在 OCaml 交互式循环中,可以计算单个表达式,这具有打印结果值的副作用。在编写 OCaml 程序时,计算表达式是错误的,我们应该使用 let 绑定(bind)来代替。在 OCaml 交互循环中,;; 序列可用于分隔短语。虽然这也支持编写常规程序,但这通常被视为一种 hacky 构造,以增强交互式顶级代码和常规程序代码之间的兼容性。

; 是用于在一个表达式中组合多个表达式的序列运算符。它不应与仅表示句子结尾的 ;; 混淆。

关于functional-programming - OCaml 这不是一个函数;它不能应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701647/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com