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不会返回任何内容,因为它是单位类型,不能保存信息。