2011-11-05 104 views
1

我有SML中的列表,它包含來自數據類型"expr"(列表「b」)的成員。 我也有功能"What",它的參數只是從日常類型"expr"。 現在我在接下來的代碼問題:發生SML - 列表和遞歸

datatype expr = K of string| Number2 of expr * (expr list); 
datatype number = Number1 of string | Number3 of int; 
What.... 
| What (Number2 (t,[]))= Number3(0)::What(t) 
| What (Number2 (y,(a::b)) = append (What(a), What(b)); 

的錯誤,因爲b是expr列表,功能What只拿到了「expr」,而不是「expr list」。我想要做的就是檢查所有成員是"b",並創建一個新列表 - 哪個成員來自數據類型"number"。 我試圖使用map function,但它沒有幫助(請參閱此處的標記:SML - unbound variable or constructor)。

有什麼想法?還有另一種方法可以做到,而不使用地圖?我堆上了一天..

+0

你必須解釋一下你所說的「沒有幫助」,給你的其他問題得到了解決是什麼意思。你所期望的正確輸出並不完全清楚。給出「What」函數的完整定義以及輸入和期望輸出的示例。 –

+1

另請注意,不是使用'append'函數,而是使用內建函數'@'。那將是'lst1 @ lst2'。 –

+0

@ Jesper.Reenberg:非常感謝!運營商@解決問題! –

回答

9

爲了讓問題關閉。

您在前面的問題所作的append功能:

fun append (nil, l2) = l2 
    | append (x::xs, l2) = x::append(xs, l2); 

可以與內置的附加操作符@所取代。由於documentation describes

l1 @ l2 
    returns the list that is the concatenation of l1 and l2.