我有下面的代碼:SML - 綁定變量或構造
datatype expr = K of string| Number2 of expr * (expr list);
datatype number = Number1 of string | Number3 of int;
fun append (nil, l2) = l2
| append (x::xs, l2) = x::append(xs, l2);
fun map [] = []
| map (h::t) = (What h)::(map t);
fun What (K x) = [Number1(x)]
|What (Number2 (t,[])) = Number3(0)::What(t)
|What (Number2 (y,a::b)) = append(What(a), map(b));
它不能識別功能「是什麼」(未綁定變量或構造函數)。我該如何解決它,它會知道「什麼」功能?
謝謝。
謝謝尼古拉斯,我只是處理這個問題,然後堆疊起來。 「b」可以是expr的列表。我只想檢查列表中的每個expr,並確定它是否爲「Number1」或「Number3」或數據類型expr - 我通過函數What完成的所有操作。唯一的想法是使用「地圖」來檢查列表中的每個成員。但它給出了一個錯誤:「操作數和操作符不同意」。任何想法? –
您的類型非常困惑。首先,是的:b絕對是expr的列表。他們都是exprs:b中沒有Number1或Number3s。你將不得不向我們解釋你想做什麼,因爲我認爲我們沒有機會幫助你。你是否意識到你的地圖功能與普通地圖非常不同?也許這就是混亂。你也忽略了y; expr是爲了什麼而使用的? –
爲什麼我的函數與法線貼圖不一樣? 我會澄清我的問題:Number 2是expr,可以是expr的列表。現在,如果它是expr的列表,那麼我想檢查該列表中的每個成員,並找出它是否爲K或Number2。然後,我需要決定如何處理這個成員(它可以是Number1或Number3,我在What函數中的前兩行),並創建一個僅包含Number1或Number3的列表。 所以,我直觀的方法是使用地圖來檢查「b」中的每個成員,通過使用map函數解開列表的末尾。 謝謝。 –