0
所以我有一個數據類型:如何逐步漂亮地打印樹狀值?
datatype ex = A of int | B of ex * ex;
和實例變量:
val x = (B (A 1, B (A 2, A 3)));
我想通過它來打印這樣的:
"(1, (2, 3))"
任何幫助將是不勝感激!謝謝。
所以我有一個數據類型:如何逐步漂亮地打印樹狀值?
datatype ex = A of int | B of ex * ex;
和實例變量:
val x = (B (A 1, B (A 2, A 3)));
我想通過它來打印這樣的:
"(1, (2, 3))"
任何幫助將是不勝感激!謝謝。
假設這個漂亮的打印機將是一個pp
:前→字符串,這裏是一個模板:
fun pp (A i) = ...
| pp (B (ex1, ex2)) = ...
此模板模式對每一個可能的值構造爲型前匹配。模式進入一級深度,因此對於您的示例值,ex1
綁定到A 2
,ex2
在第一次迭代中綁定到A 3
。您想以與處理ex0
的方式相同的方式遞歸處理ex1
和ex2
,即B (A 1, B (A 2, A 3))
。
用於連接字符串,你可能會考慮op ^
:字符串×串→字符串或String.concat
:字符串列表→字符串:
- val test1 = "hello"^"world";
> val test1 = "helloworld" : string
- val test2 = String.concat [ "if ", "you've ", "got ", "many ", "strings!" ];
> val test2 = "if you've got many strings!" : string
對於漂亮的打印整數,你可以考慮Int.toString
:INT →字符串。您可能想要打包此功能,因爲Standard ML呈現負整數有點時髦:
- val test3 = Int.toString ~5;
> val test3 = "~5" : string
遞歸地思考和模式匹配。 – molbdnilo