【发布时间】:2021-07-06 18:33:01
【问题描述】:
我在这个问题上纠结了一段时间。我一直在编辑、审查和更改类型,但我无法让类型检查器接受我正在做的事情,可能是因为我不完全理解错误/我在哪里出错了。我正在使用以下类型:
type 'a pred = 'a -> bool
我相信这意味着我可以使用'a pred 作为表示'a -> bool 的快捷方式,因此在我的情况下,int 会导致 bool,但我不完全了解如何实现它,因为我可以'在网上找不到很多我检查过的例子。
我的最新版本如下,但我从检查器中收到一些错误,包括错误:运算符和操作数不同意。谁能解释我的错误在哪里,为什么?
编辑:我现在认为这个函数和其余代码不匹配。其余代码要求它是一个'a,多态,而在这里我假设它是一个int。但是,我不确定如何在保持多态类型的同时执行此功能(检查是否为奇数)。
fun isOdd (p : int) : bool =
case p
of 1 => true
| 0 => false
| _ => isOdd (p - 2)
【问题讨论】:
-
我不明白你在问什么。首先你开始谈论
type 'a pred = 'a -> bool;然后您显示一个根本不引用pred的代码sn-p,从周围的文本中,您似乎认识到该代码sn-p 的问题与pred无关。你能弄清楚你的实际问题是什么,然后问那个问题吗?随意删除问题中实际上不属于您问题的任何部分。 :-) -
问题出在你使用它的地方。我的直觉是你有
fun f x = ... isOdd x ...,但你应该有fun f p x = ... p x ...,并将isOdd传递给该函数,但请阅读minimal reproducible example。
标签: functional-programming sml smlnj