Concat функции в haskell - PullRequest
       18

Concat функции в haskell

0 голосов
/ 22 сентября 2019

Я новичок в Haskell, поэтому у меня много вопросов, поэтому мне нужна ваша помощь.

Создайте функцию "func", которая получает функцию "f" (String -> String) типа и String "s", которая возвращает обратную константу "s" с приложением "f" в "s"

Мне удалось сделать функцию "f" такой:

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

console: 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 Ответ

3 голосов
/ 22 сентября 2019

Ваша функция почти правильная, за исключением того, что вы не использовали s в качестве параметра для приложения функции с s:

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

Кроме того, вы используете функцию неправильно, так как первыйПараметр - это не строка, а функция, которая отображает строку в строку.Например, мы можем использовать id :: a -> a для возврата s или reverse :: [a] -> [a] для обращения строки:

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