【发布时间】:2018-03-25 04:00:48
【问题描述】:
我是 SML 和这种编程风格的新手,我遇到了一些问题。我在 ML 中有一项任务要做,但我在建模数据时遇到了一些问题。我在 C 中解决了同样的问题,但在 SML/NJ 中遇到了问题。这就是我想要的。
我在 C 中有一个结构,如下所示:
struct myStr {
int someData;
myOtherStruct someOtherData;
struct myStr * next;
struct myStr * prev;
}
基本问题是我根据someOtherData对指向struct myStr(或struct myStr,没关系)的指针数组进行排序,然后我将一些值更新为下一个struct myStr并重新排序下一个struct myStr 到数组中,所以它被排序,然后我循环直到结束。
我在使用 C 时得到了相当不错的复杂性,因为排序需要 O(nlogn) 并且重新排序需要:O(1) 来找到下一个 myStr 和 O(logn) 来将这个特定元素重新排序到数组中。
我在将其建模为 SML 时遇到问题。
首先,我开始使用列表进行此操作,但每次都需要更改一个值。所以我开始考虑 refs 和数组(我知道这不是最好的东西)。
我在 ML 中使用类型想到了以下内容:
type myStr = {
someData : int,
someOtherData : myOtherType,
next : myStr ref,
prev : myStr ref
}
但这在 ML 中不起作用,因此会产生以下错误:
stdIn:1.56-1.61 Error: unbound type constructor: myStr
stdIn:1.38-1.43 Error: unbound type constructor: myStr
基本问题是我想快速访问下一个元素(不是数组中的下一个元素)(就像在 C 中一样)。上面关于类型的想法在 SML 中不起作用。
我应该怎么做才能使上述类型正常工作,或者是否有任何其他想法可以正确地对我的数据进行建模以便得到我想要的?
谢谢。
【问题讨论】:
-
您能解释一下您所说的“不起作用”是什么意思吗?您收到错误消息吗?如果有,是哪一个?
-
在ml中的类型定义后添加了上面的错误。这是stdIn:1.56-1.61错误:未绑定类型构造函数:myStr stdIn:1.38-1.43错误:未绑定类型构造函数:myStr。但我坚信,即使有一种方法来定义这种类型,它也不是这种编程风格的最佳方法。
标签: functional-programming sml smlnj