gpt4 book ai didi

sml - 错误 : case object and rules don't agree [overload conflict]

转载 作者:行者123 更新时间:2023-12-05 08:55:07 27 4
gpt4 key购买 nike

我正在研究一个在列表中找到最大数字的函数。

fun maxValue(xs) =
case xs of
[] => []
| first::rest => if ((first)>hd(rest))
then maxValue(first :: tl(tl(rest)))
else maxValue(rest)
val list = [1,2,4,8,3]
val ans = maxValue list

但是我收到以下错误:

Standard ML of New Jersey v110.78 [built: Thu Aug 31 03:45:42 2017]
= stdIn:2.5-6.40 Error: case object and rules don't agree [overload conflict]
rule domain: [> ty] list list
object: [> ty] list
in expression:
(case xs
of :: (x,nil) => x
| :: (xs,rest) =>
if hd <exp> > hd <exp>
then maxValue (<exp> :: <exp>)
else maxValue (tl <exp>))

我不明白错误的含义,为什么代码无法编译。有什么我遗漏的吗?我该如何解决?

编辑:为清楚起见,将某些变量名称从 xs 更改为 first。

最佳答案

我有几个关于您的功能的问题:

  1. 你在哪里返回最大值?
  2. 你为什么要先得到 的头?在您的示例中,first 没有头部,因为它是 1,即。 e.您作为参数传递的列表的头部
  3. 为什么要尝试获取 rest 的尾部?

为了解决这类递归问题,我使用了一个辅助函数,它将递归结构作为第一个参数,将可能的结果作为第二个参数。这是我的尝试:

fun maxValue xs =
let
fun helper xs chosen =
case xs of
[] => chosen
| first :: [] =>
if first > chosen
then first
else chosen
| first :: rest =>
if first > hd rest
then helper rest first
else helper rest (hd rest)
in
helper xs 0
end

在空列表的情况下,我只是返回 0 以避免复杂化。

最近我在使用 Poly/ML而不是 SML/NJ。错误看起来更友好

关于sml - 错误 : case object and rules don't agree [overload conflict],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47065618/

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