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