我定義了一個多列表的數據類型: datatype intnest= INT of int | LIST of intnest list;
現在我正在嘗試編寫可以將此類型轉換爲主類型的函數。我該如何轉換我的數據類型?
例如: [INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]]
我該怎麼做?提前 感謝您的幫助
我定義了一個多列表的數據類型: datatype intnest= INT of int | LIST of intnest list;
現在我正在嘗試編寫可以將此類型轉換爲主類型的函數。我該如何轉換我的數據類型?
例如: [INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]]
我該怎麼做?提前 感謝您的幫助
參考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
這基本上是的[你前面的問題(http://stackoverflow.com重複/ questions/15787639/how-can-i-define-a-heteregeneous-list-datatype),特別是我們在評論中討論過的內容。 – 2013-04-05 12:26:41
是的,但我定義了一個函數來轉換這個,但只是將INT類型轉換爲int我不能處理其他類型的'LIST'。 – sarah 2013-04-05 13:52:21
其實我只是想以手動方式在輸出中顯示,沒有別的。 – sarah 2013-04-05 13:54:53