gpt4 book ai didi

algorithm - 一些 OCAML 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:08 26 4
gpt4 key购买 nike

作为一个尝试学习 O'Caml 的新手,我有几个问题。

在函数中,我经常看到 |这意味着什么?另外,为什么函数有时定义为:让 rec a = 函数为什么它特别等于函数然后是代码?

然而,我的主要问题是,我试图编写一个函数来计算一个元素在列表中存在的次数,所以如果我有 1、5、5、6、9,目标 val 为 5,然后我会返回 2,如果目标值是 9,那么我会返回 1,因为它会重复一次。

这是我的尝试,请告诉我我做错了什么:

let rec track (x, l)= let rec helper(x,l, count)
in counthelper
match l with [] --> count
| (a::as) -> if(x = a)
then helper(as,l, count+1)
else count( as, l, count);;

最佳答案

matchfunction 关键字采用要匹配的模式列表。 | 符号用于分隔不同的模式。这就是它在 OCaml 代码中如此频繁出现的原因。

function 关键字就像是funmatch 的缩写。它允许您将函数定义为一组要与参数匹配的模式。

您的代码有 let rec helper (x, l, count) in ...。这不是一个正确的 let 表达式。你想要这样的东西:let helper (x, l, count) = def in expr

更一般地说,您的代码可能如下所示:

let track (x, l) =
let rec helper (x, l, count) =
... definition of helper ...
in
helper (x, l, 0)

作为旁注,您正在使用元组作为函数参数。在 OCaml 中使用柯里化(Currying)更为惯用,即具有更像这样的单独参数:

let track x l =
...

这使您可以进行部分应用(仅指定一些参数),并且在语法上也更清晰。

更新

您的最新代码没有返回值,因为它具有无限递归。

关于algorithm - 一些 OCAML 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21585494/

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