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

问题描述 投票:-2回答:1

我正在尝试练习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"

我还缺少其他方法吗?为什么我的函数给我这个错误?

haskell
1个回答
1
投票

两个问题:

  1. 您无法获得有时返回数字列表而有时返回字符串的函数。从字面上看,这就是强类型语言的重点。如果您想要类似的内容,则需要使用求和类型。
  2. 您无法比较无限列表。您可以尝试,但是您的程序将永远无法完成。
© www.soinside.com 2019 - 2024. All rights reserved.