2013-04-05 52 views
0

我定義了一個多列表的數據類型: datatype intnest= INT of int | LIST of intnest list; 現在我正在嘗試編寫可以將此類型轉換爲主類型的函數。我該如何轉換我的數據類型?

例如: [INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]] 我該怎麼做?提前 感謝您的幫助

+0

這基本上是的[你前面的問題(http://stackoverflow.com重複/ questions/15787639/how-can-i-define-a-heteregeneous-list-datatype),特別是我們在評論中討論過的內容。 – 2013-04-05 12:26:41

+0

是的,但我定義了一個函數來轉換這個,但只是將INT類型轉換爲int我不能處理其他類型的'LIST'。 – sarah 2013-04-05 13:52:21

+0

其實我只是想以手動方式在輸出中顯示,沒有別的。 – sarah 2013-04-05 13:54:53

回答

1

參考your previous question,你不能!

正如我試圖解釋的那樣:在SML中不可能有這樣的值!

只是嘗試一下在你的解釋

- val _ = [1,2, [6,8]]; 
stdIn:28.9-28.21 Error: operator and operand don't agree [literal] 
    operator domain: int * int list 
    operand:   int * int list list 
    in expression: 
    2 :: (6 :: 8 :: nil) :: nil 

如果我們的基本結構,而不是語法糖,然後將列表[1,2,3]構建列表變得1 :: 2 :: 3 :: nil

現在,如果我們看一下這兩個「積木」類型的缺點和缺點

- op::; 
val it = fn : 'a * 'a list -> 'a list 
- nil; 
val it = [] : 'a list 

然後我們看到中綴運算符cons,需要一個參數的右側是'a類型,右側是'a的列表。
因此我們可以看到,如果我們建立一個int列表,那麼我們必須在左邊給它一個int,在右邊給它一個int列表(如上面的例子)。應該清楚這個,我們不能以這樣的事:

[1, 2] :: 3 :: nil 

相當於擁有了(1 :: 2 :: nil) :: 3 :: nil

+0

'datatype intnest = int | INT最後名單列表; fun tagged2s(INT i)= valOf(Int.fromString(Int.toString i))map tagged2s [INT 1,INT 4]; ' – sarah 2013-04-05 13:55:43

+0

它的結果:'val it = [1,4]:int list'但我不知道如何做這個工作的類型列表。我希望瞭解我的意思。 – sarah 2013-04-05 14:02:02