Haskell中的Concat函数

时间:2019-09-22 16:30:21

标签: string function haskell reverse concat

我是Haskell的新手,所以我有很多问题,希望您的帮助。

  

使函数“ func”接收函数“ f”(字符串->字符串)类型,然后使字符串“ s”返回“ s” concat与“ s”中的“ f”应用程序相反的字符

我设法使“ f”功能像这样:

f:: String -> String
f x -> reverse(x) ++ x
  

控制台:f“ HASKELL”->“ LLEKSAHHASKELL”

但是关于“ func”功能,我不知道该怎么做或在控制台中键入。下面的代码在GHC中有效,但我不知道为什么,它不接受输入。

func:: (String -> String) -> String -> String
func f s = (reverse(s) ++ f "")

console: func "HASKELL" "ROCKS"

<interactive>:49:6: error:
    • Couldn't match expected type ‘String -> String’
                  with actual type ‘[Char]’
    • In the first argument of ‘func’, namely ‘"HASKELL"’
      In the expression: func "HASKELL" "ROCKS"
      In an equation for ‘it’: it = func "HASKELL" "ROCKS"

如果有更好的方法,请告诉我吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您的函数几乎是正确的,除了您没有使用s作为函数应用程序的参数使用s

func:: (String -> String) -> String -> String
func f s = reverse s ++ f s

您还错误地使用了该函数,因为第一个参数不是字符串,而是将字符串映射到字符串的函数。例如,我们可以使用https://bitbucket.org/ali-rezaei/circleci/src/master/返回s,或使用id :: a -> a反转字符串:

Prelude> func id "haskell"
"lleksahhaskell"
Prelude> func reverse "haskell"
"lleksahlleksah"