2017-08-05 46 views
1

我正在按照OCaml的入门指南和我正在开发的一个程序不工作,我想知道是否可以解释为什么。OCaml中的测试

let profit_500 : int = 
    let price = 500 in 
    let attendees = 120 in 
    let revenue = price * attendees in 
    let cost = 18000 + 4 * attendees in 
    revenue - cost;; 

let test() : bool = 
    (profitTest 500) = profit_500 
;; run_test "profit at $5.00" test 

在线(profitTest 500)= profit_500我越来越错误:无界价值利润测试。有人能解释为什么吗?这是我第一次游览OCaml,但我知道一些Java。有人可以解释为什么最后;;在run_test之前而不是在profit_500之后(或者是相同的)?

感谢您的帮助

+0

我不知道OCAML,但你期待'(profitTest 500)= profit_500'做什么?它看起来非常好。另外,你可能不需要所有那些“让...进去”。我认为你应该能够将所有绑定分组在一个“let”下。 – Carcigenicate

+0

@Carcigenicate OCaml需要一个'let'用于每一个绑定。该语法是正确的。 –

+0

@ElanHamburger真的吗?那真不幸。我的错。 – Carcigenicate

回答

2

这可能有助于阐明“无约束”的含义。未绑定的符号(名称)是一个尚未定义的符号。所以OCaml告诉你,你还没有给出profitTest的定义。正如@ElanHamburger所说,这是真的。在您显示的代码中没有定义具有该名称的函数。

如果您正在遵循指南中的示例,最可能的情况是您需要在test的定义之前键入profitTest的定义(来自指南),然后按照您的指示输入它。

+0

https://1drv.ms/i/s!AgZffw7HX09VgRXk-P57a7fwPFAt 这是页面。谢谢! – user402517

+0

这是讨论中的一页。 “profitTest”的定义几乎可以肯定出现在前面的页面上。 –