我的代码中有错误。如何使用在if语句中返回bool的函数?
let pol a b c =
let p=(a+.b+.c)/.2.0 in sqrt(p*.(p-.a)*.(p-.b)*.(p-.c));;
let test a b c =
(a+.b)>c &&(b+.c)>a &&(a+.c)>b
let main a b c =
let w=test(a b c) in(
if w
then pol (a b c)
else raise(Failure "Error"));;
答案 0 :(得分:2)
据我所知,您的问题出在pol
和test
的来电中。你已经定义了这两个函数,以便它们采用三个单独的参数,但是你传递的是一个表示奇怪函数调用的参数。
OCaml中的惯用函数调用没有括号:
# let f a b = a + b;;
val f : int -> int -> int = <fun>
# f 3 8;;
- : int = 11
你正试图做更像这样的事情:
# f (3 8);;
Error: This expression has type int
This is not a function; it cannot be applied.
如您所见,如果您编写(3 8)
,则要求将3
视为应将8
作为参数传递的函数。您的代码中存在与(a b c)
类似的问题。