2013-01-19 99 views
2

有什麼方法可以使用SML打印完整列表?查看SML完整列表

通常發生在SML中,當我有太多的元素時,它會先打印用「,」分隔的幾個元素,然後用...省略其餘列表,但我希望看到完整列表。有沒有辦法做到這一點?

val a =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20] 

然後如果我在REPL a寫返回類似:

a=[1,2,3,4,5,...] 

回答

5

假設你正在使用SML/NJ。

你想要定製的是Control.Print中的參考值。在這種情況下,你wan't到printLength值更改爲更大的東西,例如

Control.Print.printLength := 100; 

一般來說它是print*引用您wan't改變。然而,對於字符串,他們選擇將其稱爲stringDepth,出於某種原因。


假設您正在使用MosML。

Moscow ML Language Overview,它描述了元單元暴露這兩個函數(「控制交互系統」)

val printDepth : int ref (* limit printed data depth *) 
val printLength : int ref (* limit printed list and vector length *) 
3

我假定您使用多晶硅/ ML。功能PolyML.print_depth說明在任何結構(包括列表)中打印的深度應該如何。將其更改爲更大的東西:

PolyML.print_depth 500 
+0

完美,非常感謝。你知道哪裏可以找到PolyML簽名的完整文檔嗎?我已經搜索了相當數量但找不到任何東西,即使在PolyML網站上也是如此! – csey

+0

@CharlieSeymour不幸的是沒有。自從我寫了這個答案以來,我還沒有使用過PolyML,因此您最好使用Google搜索。我發現至少這兩個看起來很有前景的鏈接:http://www.lfcs.inf.ed.ac.uk/software/polyml/docs/Intro1.html和http://polyml.org/docs/PrettyPrint.html –

+0

唉,大部分看起來已經過時了。無論如何感謝您的嘗試! – csey

0

該輸出只用於調試,而方便,是不是這樣做的一個適當的方式(你不運行可執行文件在你生成它得到這個)。要打印出所有與您在選擇的ML提示中設置的打印限制無關的元素,您可以執行以下操作:

fun listToString [] = "[]\n" 
| listToString (c::l) = 
     "["^(Int.toString c) 
     ^foldl (fn (s1, s2) => s2^", "^s1) "" (map (Int.toString) l) 
     ^"]\n" 
val _ = print (listToString a) 
+0

使用標準庫的更簡單的實現將是'fun listToString l =「[」^ String.concatWith「,」(List.map Int.toString l)^「]」'。 –