有什麼方法可以使用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,...]
有什麼方法可以使用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,...]
假設你正在使用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 *)
我假定您使用多晶硅/ ML。功能PolyML.print_depth
說明在任何結構(包括列表)中打印的深度應該如何。將其更改爲更大的東西:
PolyML.print_depth 500
該輸出只用於調試,而方便,是不是這樣做的一個適當的方式(你不運行可執行文件在你生成它得到這個)。要打印出所有與您在選擇的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)
使用標準庫的更簡單的實現將是'fun listToString l =「[」^ String.concatWith「,」(List.map Int.toString l)^「]」'。 –
完美,非常感謝。你知道哪裏可以找到PolyML簽名的完整文檔嗎?我已經搜索了相當數量但找不到任何東西,即使在PolyML網站上也是如此! – csey
@CharlieSeymour不幸的是沒有。自從我寫了這個答案以來,我還沒有使用過PolyML,因此您最好使用Google搜索。我發現至少這兩個看起來很有前景的鏈接:http://www.lfcs.inf.ed.ac.uk/software/polyml/docs/Intro1.html和http://polyml.org/docs/PrettyPrint.html –
唉,大部分看起來已經過時了。無論如何感謝您的嘗試! – csey