List 使用折回将字符列表转换为字符串

List 使用折回将字符列表转换为字符串,list,f#,type-inference,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

对于赋值,我正在寻找一种使用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    
我做错了什么,如何使用折回获得期望的结果

  • 您的注释
    :字符列表
    适用于
    内爆
    的返回类型,而不是
    xs
    。如果需要后者(
    (xs:char list)
    ),则需要将其括起来
  • List.foldBack
    对于某些
    'a
    'b
    ,需要使用带有签名的函数
    'a->'b->'b
    ,但是
    (.+)
    具有类型
    字符串->字符->字符串
    ,这不太匹配
  • 除了编写
    (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)
    
    如果您将
    acc
    elem
    交换为
    (.+)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”“

    内爆
    更改为这个
    让内爆(xs:char)(l:char List)=List.foldBack(趣味辅助元素->(.+)辅助元素)xs“”
    你会得到一个新错误,但它应该能帮助你解决问题。既然你说了作业,我认为这是家庭作业,你可以通过轻推而不是回答学到更多。版本为List.fold:尝试更改为List.foldback你的问题已经解决了?@GuyCoder帮我解决了。最终使用了一个实现cl根据kvbI的建议,ose认为更容易更改运算符:(.+):char->string->string…=>List.foldBack((.+))xs“”使用以下命令结束。赋值暗示了foldBack,但fold看起来更直观?
    let(+)(x1:string)(x2:char)=x1+(string x2)let内爆((xs:char List))=List.fold(fun elem acc->(.+)elem acc)“xs