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

Syntax 如何理解NJ标准ML中的这段代码,syntax,sml,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

我有以下代码:

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


我不明白“列表引用”是什么意思。

让我们从“列表引用是可变的数据结构,因此您可以在其中添加和删除内容,您可以找到描述”开始列表引用是包含任何类型列表的引用数据结构。:=是重载运算符,用于将t添加到ts的内容中,因此在ts之后:=t ts将包含t;只需分隔语句或声明,在代码中有两条语句ts:=t和h,因此需要使用!是重载运算符,用于获取ref对象的内容,所以在代码中它将返回“列表”

sml中的函数可以有多个语句吗?我记得它只能返回一个表达式。它只能返回一个表达式,但是ts:=t不会返回任何内容,因为它是单位类型,不能保存信息。