标准SML数据类型列表

时间:2017-07-13 10:39:26

标签: list types sml

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附近

1 个答案:

答案 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