2015-03-31 39 views
0

的標準ML我有這樣的代碼:如何理解這段代碼在新澤西州

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前後;代表。在解釋器中,提前的數據類型是:val advance = fn : 'a list ref -> 'a

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

回答

0

讓我們從'a list ref開始。 ref是可變的數據結構,所以你可以添加和刪除它的內容,你可以找到描述here'a list refref包含任何類型的列表的數據結構。 :=是超載運算符,用於將t添加到ts的內容中,因此在ts := t之後ts將包含t;只是分隔陳述或聲明,在您的代碼中您有兩條陳述ts := th,因此您需要將它們與;分開。 !是重載運算符,用於獲取ref對象的內容,因此在您的代碼中它將返回'a list

+0

sml中的函數可以有多個語句嗎?我記得它只能返回一個表達式。 – beginner 2015-04-01 03:48:22

+0

它只能返回一個表達式,但'ts:= t'不會返回任何東西,因爲它是單元類型,它不能保存信息。 – 2015-04-01 10:18:11

+0

非常感謝你:) – beginner 2015-04-02 04:52:39