[英]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.