【问题标题】:Haskell: Getting the output of a function to be used as an input to another?Haskell:让一个函数的输出用作另一个函数的输入?
【发布时间】:2016-02-07 22:48:25
【问题描述】:

我使用以下代码创建了字母表;

letter :: Char -> [String]

letter 'A' = [" AAA ","A   A","AAAAA","A   A","A   A"]

每个字母以此类推。以及另一个将用户使用以下代码输入的小写字母大写的函数:

capital :: Char -> Char

capital letter
    | ord letter >= ord 'a' && ord letter <= ord 'z' = chr (ord letter + (ord 'A' - ord 'a'))
    | otherwise                                      = letter

我要做的就是输入小写的letter 'a',这样程序就可以大写字母并打印出letter 'A'中使用的大写“A”。

【问题讨论】:

    标签: string function haskell char


    【解决方案1】:

    当您想将一个函数的输出提供给另一个函数时,这正是函数组合,使用运算符.

    (.) :: (b -> c) -> (a -> b) -> (a -> c)
    

    所以,你会想要:

    anyLetter :: Char -> String
    anyLetter = letter . capital
    

    【讨论】:

    • 尝试在我的代码中实现此功能时,我收到错误消息“类型签名中缺少变量“。”的绑定”。不过,我了解您使用 . 运算符的来源,但我对 Haskell 还很陌生,我正在努力掌握它的整个概念。
    • @J.Hirst 你不必复制 (.) :: ... 行,这已经由 Haskell 定义了。只需使用. 运算符,如上所示。如果你确实复制了类型注解,Haskell 假定你正在重新定义标准运算符,如果你以后不这样做,就会抱怨。
    • 啊,谢谢,我明白了。该程序似乎可以再次运行而没有任何问题,但是当我输入letter 'a' 时,该程序似乎无法识别我正在输入的内容。我也不能说我已经看到了它给我的错误。 “模式匹配失败:字母‘a’”。
    • @J.Hirst 您只是在测试字母“A”。做一个后备箱。但这里不是问这个的地方,试试LYAH
    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2022-12-09
    相关资源
    最近更新 更多