簡體   English   中英

F#使用自定義列表附加自定義表

[英]F# Append custom table with custom list

我試圖使該延伸的符號表申報的列表功能

定義:

type Typ =  |Integer
            |Boolean
            |Ft of Typ list * Typ;;

type Decl = string * Typ;;

type symbolTable = Map<string, Typ>;;

我正在嘗試以下方式:

let extendST (st: symbolTable) (lst: Decl list) : symbolTable =
    let mutable returnValue = st
    for (x,y) in lst do
        returnValue = returnValue.Add(x,y)
    returnValue;;

但顯然沒有任何東西被添加到returnValue(該函數返回與輸入相同的symbolTable)。

我顯然是F#的新人,但這讓我頭疼,所以我希望有人可以幫助我。

在F#中,賦值(更改mutable變量的值)是使用<-而不是使用= (這意味着只是相等測試)來編寫的。 您的代碼正在比較這兩個值,然后忽略結果(這是有效的,但不是您想要的)。 更正后的版本如下所示:

let extendST (st: symbolTable) (lst: Decl list) : symbolTable =
    let mutable returnValue = st
    for (x,y) in lst do
        returnValue <- returnValue.Add(x,y)
    returnValue

但是,如果您正在尋找功能性解決方案,可以使用fold編寫:

let extendST (st: symbolTable) (lst: Decl list) : symbolTable =
    lst |> List.fold (fun map (k, v) -> Map.add k v map) st

fold功能需要一定的狀態(您的符號表),並計算給定列表中的每個元素的新狀態lst 這里,新狀態是用鍵值對k,v擴展的新映射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM