Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml 什么;这不是一个函数;它不能被应用”;错误意味着什么?_Ocaml - Fatal编程技术网

Ocaml 什么;这不是一个函数;它不能被应用”;错误意味着什么?

Ocaml 什么;这不是一个函数;它不能被应用”;错误意味着什么?,ocaml,Ocaml,我是OCaml的新手,有一个错误: let n = read_int () let rec pi = match n with | _ when n < 0 || n > 10000 -> raise (Failure "pi") | 1 -> 2. *. ((2. *. 2.) /. (1. *. 3.)) | _ -> float_of_int (n * n * 2 * 2) /. float_of_int ((

我是OCaml的新手,有一个错误:

 let n = read_int ()
    let rec pi  = 
  match n with
  | _ when n < 0 || n > 10000 -> raise (Failure "pi")
  | 1 -> 2. *. ((2. *. 2.) /. (1. *. 3.))
  | _ -> float_of_int (n * n * 2 * 2) /. float_of_int ((2 * n - 1) * (2 * n + 1)) *. pi (n - 1)

此代码在没有
read\u int()
的情况下工作,但在这种情况下我需要
read\u int

没有参数

 let rec pi =
您不是在定义递归函数,而是一个递归值
pi
(它恰好是一个浮点值)。因此,当您试图将此float
pi
用作函数时,编译器会引发错误

6 |   | _ -> float_of_int (n * n * 2 * 2) /. float_of_int ((2 * n - 1) * (2 * n + 1)) *. pi (n - 1)
                                                                                         ^^
Error: This expression has type float
       This is not a function; it cannot be applied.

首先需要将
pi
定义为一个函数。一旦定义了这个函数,您就可以在输入值上调用它。

这里没有参数

 let rec pi =
您不是在定义递归函数,而是一个递归值
pi
(它恰好是一个浮点值)。因此,当您试图将此float
pi
用作函数时,编译器会引发错误

6 |   | _ -> float_of_int (n * n * 2 * 2) /. float_of_int ((2 * n - 1) * (2 * n + 1)) *. pi (n - 1)
                                                                                         ^^
Error: This expression has type float
       This is not a function; it cannot be applied.

首先需要将
pi
定义为一个函数。一旦定义了这个函数,您就可以在输入值上调用它。

如果查看代码,您可以看到:

let n=read\u int()
设rec pi=
匹配
||当n<0 | | n>10000->上升(故障“pi”)
| 1 -> 2. *. ((2. *. 2.) /. (1. *. 3.))
|->float\u of_int(n*n*2*2)/。浮点数((2*n-1)*(2*n+1))*。pi(n-1)
pi
不是一个函数,而是一个值。因为
pi
不接受任何参数。一种可能的解决方法是将“n”作为参数:

让rec pi n=
匹配
||当n<0 | | n>10000->上升(故障“pi”)
| 1 -> 2. *. ((2. *. 2.) /. (1. *. 3.))
|->float\u of_int(n*n*2*2)/。浮点数((2*n-1)*(2*n+1))*。pi(n-1)

如果查看代码,您可以看到:

let n=read\u int()
设rec pi=
匹配
||当n<0 | | n>10000->上升(故障“pi”)
| 1 -> 2. *. ((2. *. 2.) /. (1. *. 3.))
|->float\u of_int(n*n*2*2)/。浮点数((2*n-1)*(2*n+1))*。pi(n-1)
pi
不是一个函数,而是一个值。因为
pi
不接受任何参数。一种可能的解决方法是将“n”作为参数:

让rec pi n=
匹配
||当n<0 | | n>10000->上升(故障“pi”)
| 1 -> 2. *. ((2. *. 2.) /. (1. *. 3.))
|->float\u of_int(n*n*2*2)/。浮点数((2*n-1)*(2*n+1))*。pi(n-1)

您发布的代码不会产生您声称的错误。我正在使用ocamlopt编译器,我现在测试了一个错误,而您发布的代码不会产生您声称的错误。我正在使用ocamlopt编译器,我现在测试了一个错误,我知道了,所以如果我使用read_int,我可以给n作为一个参数,它可以吗?我想你必须分离关注点
read_int()
给你一个(潜在的)整数,然后计算一些东西。因此,您可以将计算(
pi
)和int的读取分开。好的,谢谢,但看看是否可行,我如何打印pi的返回值?(我很新,过去只使用c)因为你的函数
pi
返回一个
float
你可以打印它;)你可以有,
让x=pi值,在打印x之后。谢谢:),顺便问一下,我如何将异常转换为打印?我明白了,所以如果我使用read\u int,我可以给n作为参数,它可以吗?我想你必须分离关注点
read_int()
给你一个(潜在的)整数,然后计算一些东西。因此,您可以将计算(
pi
)和int的读取分开。好的,谢谢,但看看是否可行,我如何打印pi的返回值?(我很新,过去只使用c)因为你的函数
pi
返回一个
float
你可以打印它;)你可以有,
让x=pi值,在打印x之后。谢谢:),顺便问一下,我如何将异常转换为打印?