在函数中传递变量并进行比较?

时间:2019-10-18 02:51:24

标签: haskell

我正在尝试练习Haskell返回值和数据类型。我正在尝试将以下信息传递给程序:

worm = 1:2:3:worm
eel = [1,2,3,1,2,3,1,2,3]
snake = 3:2:1:snake
whale = [1..100]

我想创建一个具有开关功能的功能,以获取数据并将其与其定义相匹配。例如,在Python中:

def compare(str): #for one case and using string to clarify
    if str == "1:2:3:worm":
       return "worm"

我知道数据类型是列表,但会引起很多混乱。我的代码给我一个Could not deduce (Num Char) Arising from use of worm

的错误

我的代码:

which :: [a] -> String
which x | x == [1,2,3,1,2,3,1,2,3] = "worm" | x == 3:2:1:snake = "snake" | otherwise = "F"

我还缺少另一种方法吗?为什么我的函数给我这个错误?

1 个答案:

答案 0 :(得分:3)

两个问题:

  1. 您无法使用有时返回数字列表而有时返回字符串的函数。从字面上看,这就是强类型语言的重点。如果您想要类似的东西,则需要使用求和类型。
  2. 您无法比较无限列表。您可以尝试,但是您的程序将永远无法完成。