【问题标题】:Function Composition Error功能组合错误
【发布时间】:2018-07-15 18:52:39
【问题描述】:

在阅读有关函数组合的教程时,我尝试了以下方法:

let prefixFun a b = a + "" + b;;
let exclaim s = s + "!";;
let bigHello = prefixFun >> exclaim;;

bigHello 的定义返回以下类型不匹配错误

let bigHello = prefixFun >> exclaim;;
----------------------------^^^^^^^

stdin(28,29): error FS0001: Type mismatch. Expecting a
'(string -> string) -> 'a'
but given a
    'string -> string'
The type 'string -> string' does not match the type 'string'
  1. 错误是什么意思
  2. 根据我的理解,函数组合要求第一个函数的返回类型与第二个函数的参数相同,我认为在这里是正确的,因为prefixFun 返回字符串而exclaim 需要字符串。

您能帮我理解并解决问题吗?

谢谢。

【问题讨论】:

    标签: f# functional-programming function-composition


    【解决方案1】:

    prefixFun,在应用 one 参数后,不返回字符串。由于部分应用和函数柯里化,它返回一个函数,类型为string -> string

    这是>>的实现:

    let (>>) f g x = g ( f(x) )

    请注意,f 仅应用于一个参数。

    我有一种感觉,你想要的 bigHello 是一个函数,它可以获取某人的名字并在之后添加一个感叹号。这是您可以利用现有资源做的事情!

    let bigHello = prefixFun "Hello " >> exclaim

    注意prefixFun "Hello " 的类型为string -> string, 所以遵守函数组合的规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 2016-04-04
      • 2021-03-03
      • 1970-01-01
      • 2021-02-03
      相关资源
      最近更新 更多