如何理解NJ标准ML中的这段代码

时间:2015-03-31 03:13:41

标签: syntax sml

我有这段代码:

exception BadToken of string*(string list)
fun 
advance ts = let val h = hd (!ts)
                 val t = tl (!ts)
             in 
                 ts := t;
                 h
             end

fun
eat t ts = if (hd (!ts)) = t then (advance ts; t)
           else raise BadToken (t,!ts)

我不明白ts之前:=!;代表什么。在解释器中,advance的数据类型为:val advance = fn : 'a list ref -> 'a

我不明白'a list ref的含义。

1 个答案:

答案 0 :(得分:0)

让我们从'a list ref开始。 ref是可变数据结构,因此您可以在其中添加和删除内容,您可以找到说明here'a list refref数据结构,包含任何类型的列表。 :=是重载运算符,用于将t添加到ts的内容中,因此ts := t ts将包含t;只是分隔语句或声明,在您的代码中您有2个语句ts := th,因此您需要将它们与;分开。 !是重载运算符,用于获取ref对象的内容,因此在您的代码中它将返回'a list