2011-11-25 83 views
1

我想在幫助功能中打印一個列表,用於調試目的。由於某種原因,它不打印任何東西。有誰知道什麼是錯的?
下面是我的一些代碼:在SML中打印一個列表

local 
.... 
and xx(LparenToken) = "LparenToken" 
| xx(RparenToken) = "RparenToken" 
| xx(QuoteToken) = "QuoteToken" 
| xx(DotToken) = "DotToken" 
| xx(VectorToken) = "VectorToken" 
| xx(IntToken(a)) = "IntToken" 
| xx(CharToken(a)) = "CharToken" 
| xx(StringToken(a)) = "StringToken" 
| xx(SymbolToken(a)) = "SymbolToken" 
| xx(BoolToken(a)) = "BoolToken" 

and readList(nil) = [] 
| readList(lst:SchemeToken list) = (map(print)((map(xx)(lst))); read(getFirstSexpr(lst))::readList(getRestSexpr(lst))) 
... 
in 
    some functions.. 
end 

我已經試過這也:

and readList(nil) = [] 
| readList(lst:SchemeToken list) = (print "x"; read(getFirstSexpr(lst))::readList(getRestSexpr(lst))) 

它不打印。我得到的只是答案:

- Reader.stringToSexpr "#(a b (1 2 3) c)"; 
val it = 
    Vector 
    [Symbol "a",Symbol "b",Pair (Number 1,Pair (Number 2,Number 3)), 
    Symbol "c"] : Sexpr 
+1

首先,如果你真的粘貼了你的代碼,它將會非常有幫助 –

+1

也許'readList'根本沒有被調用 – newacct

回答

4

我懷疑問題是不是與您的清單打印代碼 - 那將可以正常工作,它被稱爲了一些數據。

作爲參考,有一個更好的方式來評估列表的效果:List.app : ('a -> unit) -> 'a list -> unit。這就像List.map,但它不會構建一個列表作爲返回值。你可能會喜歡另一個是String.concatWith,這往往使打印的代碼更容易,例如:

print (String.concatWith "\n" (map xx lst)) 

而作爲最後一點,你已經使用了很多不必要有括號中的示例代碼。你很少需要加括號表達式 - 尤其是在沒有函數應用涉及的情況下(例如,編寫(lst)(xx)總是意味着lstxx,並且不能解決任何歧義(因爲沒有)。 ,他們可以很容易地寫出(IntToken a)而不改變其含義(並且可能增加可讀性)

+0

你是什麼意思?我爲函數提供數據,否則我不會得到輸出。 - 圓括號的東西對我來說,我更瞭解代碼,因爲我來自java \ C。:) –

+0

The功能你被稱爲'Reader.stringToSexpr',而不是'readList'。我看不到'readList'實際被調用的地方。 – Gian

+0

這是一個很大的程序(這就是爲什麼不是所有的代碼都會出現)。我正在編寫一個編譯器作爲研究的作業。但它到達那裏。那當然。 –