使用foldBack将字符串列表转换为String

时间:2016-02-16 20:18:41

标签: list f# type-inference

对于作业,我正在寻找一种使用List.foldBack连接字符列表中字符串的方法。

到目前为止,我提出了什么:

let (.+) (x1:string) (x2:char) = x1 + System.Char.ToString(x2)
let implode xs:char list = List.foldBack(fun acc elem -> (.+) acc elem) xs ""

但是,这会给我以下错误消息:

This expression was expected to have type
    char list    
but here has type
    string    

我做错了什么,如何使用foldBack

获得所需的结果

2 个答案:

答案 0 :(得分:2)

  1. 您的注释:char list适用于implode的返回类型,而不适用于xs。如果你想要后者((xs:char list))。
  2. ,你需要将它括起来
  3. List.foldBack需要对某些'a -> 'b -> 'b'a采用带有签名'b的函数,但(.+)的类型为string -> char -> string,不太匹配。

答案 1 :(得分:1)

除了撰写(xs : char list)之外,您还需要正确排序(.+)的参数。

List.foldBack : ('a   -> 'b     -> 'b)     -> 'a   list -> 'b     -> 'b
Required        (char -> string -> string) -> char list -> string -> string
Actual  ... (fun acc     elem   -> (.+) acc elem)  ...
which is      : (string -> char -> string)

如果您将accelem交换为(.+) elem acc,则代码将会编译。

List.foldBack : ('a   -> 'b     -> 'b)     -> 'a   list -> 'b     -> 'b
Required        (char -> string -> string) -> char list -> string -> string
Actual  ... (fun acc     elem   -> (.+) elem acc)

其中(.+) : string -> char -> string

或者正如Foggy Finder建议的那样,更改运算符(.+)以便交换它们的参数(let (.+) (x1:char) (x2:string) = System.Char.ToString(x1) + x2),然后我们可以使用List.foldBack (.+) xs ""