Datatype events = enter of string * real | exit of string *real;
所以我有这个数据类型,我必须编写一个函数,它将事件列表作为输入,并返回按事件的实际部分排序的列表。 我试着写一些函数,但没有提出任何好的,任何想法?
这是我试过的代码:
val rec ordina = fn
[] => []
|v1::v2::l => if (#2(v2)) > (#2(v1))
then ordina (v1::l)
else oridna (v2::1);
我得到的错误:
poly:错误:无法找到固定的记录类型。发现在#2附近
poly:错误:无法找到固定的记录类型。发现在#2附近
答案 0 :(得分:1)
一些反馈,
数据类型声明应该是
datatype event = Enter of string * real
| Exit of string * real
单个值包含单个事件。
复数是通过具有例如数值来实现的。输入事件列表。
值构造函数通常用大写的起始字母书写。
在SML / NJ中,您有一个名为ListMergeSort.sort
的通用排序函数。它需要一个类型' a *' a - >的函数。 bool 在这种情况下,' a =事件。然后你可以写一个函数,
fun cmp_event (event_a, event_b) = ...
返回event_a
是否应在event_b
之前根据其真实部分进行排序。 提示:首先,创建一个提取真实部分的辅助函数。 (想出一个更好的名字,反映真实部分的目的。)
fun get_real_part (Enter (_, r)) = ...
| get_real_part ... = ...
如果您不允许使用ListMergeSort.sort
,则make your own sort。