作为函数输入的字符串的Haskell函数头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作为函数输入的字符串的Haskell函数头相关的知识,希望对你有一定的参考价值。

我正在Haskell中创建一个Enigma机器,并且我对以下代码有疑问:

encrypt :: String -> [String] -> String
encrypt t [d1, d2, d3]
  | length t > 1 = encryptOne head t [d1, d2, d3] ++ encrypt (tail t) [d1, d2, rotateF d3]
  | length t == 1 = encryptOne head t [d1, d2, d3]
  | otherwise = ""

加密函数采用字符串,并使用encryptOne函数递归求解每个字符。每次迭代时,都使用rotateF功能旋转转子(早期阶段,仍在解决此问题)。 encryptOne函数如下所示:

encryptOne :: Char -> [String] -> Char

问题是encryptOnet [d1, d2, d3]部分,其中无法解决头t,并且发生以下错误

    length t == 1 = encryptOne head t [d1, d2, d3]
                               ^^^^
    * Couldn't match type `Char' with `[Char]'
      Expected type: [String]
        Actual type: String

有人知道如何重构此部分,以便头t返回要在encryptOne中使用的字符吗?

答案

感谢威廉,我使用括号找到了第一个问题。

第二个问题是关于encryptOne的类型问题。我现在将其添加到问题中,它表明它正在返回Char,而crypto函数返回String。我必须将encryptOne的结果从Char转换为String才能解决:

charToString :: Char -> String
charToString c = [c]

以上是关于作为函数输入的字符串的Haskell函数头的主要内容,如果未能解决你的问题,请参考以下文章

Haskell代码编程

Haskell缩进不会排列函数参数

Haskell“字符串移动”函数

如何在 Haskell 中提供屏幕图像作为程序的输入

哪种 KeyBoard / KeyBoard Layout 最适合 Haskell 编程? haskell 是不是将所有数学符号作为函数?

函数返回与函数参数中的 Haskell 模式匹配