如果我想更改列表中的值,我將使用新值返回一個新列表,而不是更改舊列表中的值。如何返回具有更新值的新類型
現在我有四種類型。我需要更新varEnd的價值定位,而不是改變的價值,我需要用更新值
type varEnd = {
v: ctype;
k: varkind;
l: location;
}
;;
type varStart = {
ct: ctype;
sy: sTable;
n: int;
stm: stmt list;
e: expr
}
and sEntry = Var of varEnd | Fun of varStart
and sTable = (string * sEntry) list
type environment = sTable list;;
(a function where environment is the only parameter i can use)
let allocateMem (env:environment) : environment =
我試圖用List.iter返回一個新的類型,但它直接改變值,類型也不可變。我認爲List.fold將是一個更好的選擇。
我最大的問題是有四種不同的類型。
我知道如何通過創建一個新列表來修改列表元素,但我在這裏有很多列表,我不知道如何使用環境獲取最後一個列表,然後返回一個新列表與新位置。 – user2247155
對不起,我不明白你需要什麼。一個環境*是一個列表。如果你所說的是你需要實現'allocateMem',那麼它的參數就是一個列表,並且它返回一個相同類型的列表。正是你說的你知道該怎麼做。 –
對不起,我沒有說清楚。我需要更新位置的值。爲了得到varEnd,我需要首先訪問sTable和sEntry。這就是我陷入困境的地方。當有另一個列表裏面有一個列表時,我會感到困惑 – user2247155