Ocaml 我应该如何计算f(x)的p倍?

Ocaml 我应该如何计算f(x)的p倍?,ocaml,Ocaml,我想计算f(…f(x))p次。下面是我的代码 let rec function f x p = if p = 0 then x else function f (f x) p-1;; 我想知道我应该怎样做才对。这很接近,但是您的代码有语法错误,这将使它很难取得进展。我认为主要的问题是您使用函数作为标识符,但它在OCaml中是一个关键字。如果您改为myfun,事情应该会好一些 你还需要注意你的先例。以下代码: f a b-1 解析如下: (f a b) - 1 f a (b - 1) 不是

我想计算
f(…f(x))
p
次。下面是我的代码

let rec function f x p = if p = 0 then x else function f (f x) p-1;;

我想知道我应该怎样做才对。

这很接近,但是您的代码有语法错误,这将使它很难取得进展。我认为主要的问题是您使用
函数
作为标识符,但它在OCaml中是一个关键字。如果您改为
myfun
,事情应该会好一些

你还需要注意你的先例。以下代码:

f a b-1
解析如下:

(f a b) - 1
f a (b - 1)
不是这样的:

(f a b) - 1
f a (b - 1)

您需要显式地编写括号才能进行第二次解析。

这非常接近,但您的代码存在语法错误,这将使其难以取得进展。我认为主要的问题是您使用
函数
作为标识符,但它在OCaml中是一个关键字。如果您改为
myfun
,事情应该会好一些

你还需要注意你的先例。以下代码:

f a b-1
解析如下:

(f a b) - 1
f a (b - 1)
不是这样的:

(f a b) - 1
f a (b - 1)

您需要显式地编写括号才能进行第二次解析。

您可以定义递归函数
ch
来多次应用函数
f
(教堂数字??),如下所示:

let rec ch f p x = if p = 0 then x else f (ch f  (p-1) x);;
原始代码中的问题是:

  • 需要将函数命名为某物,例如
    ch

  • 需要调用相同的函数
    ch
    ,以实现如上所示的递归。在原始代码中,没有递归

  • 范例

    let p1 x = x + 1 ;;
    
    ch p1 3 1 ;;
    
    这会给你

    - : int = 3
    

    如图所示。

    您可以定义一个递归函数
    ch
    来多次应用函数
    f
    ,如下所示:

    let rec ch f p x = if p = 0 then x else f (ch f  (p-1) x);;
    
    原始代码中的问题是:

  • 需要将函数命名为某物,例如
    ch

  • 需要调用相同的函数
    ch
    ,以实现如上所示的递归。在原始代码中,没有递归

  • 范例

    let p1 x = x + 1 ;;
    
    ch p1 3 1 ;;
    
    这会给你

    - : int = 3
    

    果然如此。

    你太棒了!对于OCaml的新手来说,您指出的问题是看不到的。您太棒了!您指出的问题对于OCaml的新手来说是不可见的。