Basic haskell : Defining types
抱歉打扰你。
我是Haskell的新手,正在尝试定义一个新的Person类型。
我正在使用GHCI编译器。
我正在运行文件new.hs,其中包括:
1 2 3 4
| Name = String
Age = Int
Weight = Int
Person = (Name, Age, Weight ) |
但我没有出现范围错误。 有人可以帮忙吗?
杰里米·D(Jeremy D)帮了我的忙,我解决了这个问题,但是我如何添加这样的函数:
1 2 3
| isAdult :: Person -> Bool
George = ("George", 20, 80)
isAdult George = if Age >=18 |
-
您只是回答了自己的问题。
-
不,您为什么要编辑它? 没错 现在您做错了!
-
对其进行了更多编辑,您能否指出我的错误? 我如何定义一个人?
-
好吧,现在您已经疯了。 您不能执行isAdult George = if Age >= 18。 每个if必须具有then和else。 我认为您打算写isAdult George = Age >= 18(记住,您仍然错了)。 错误的原因是因为Age是Int的类型同义词。 您不写Int >= 18,对吗? 另外,您的isAdult函数特定于George,这也是错误的。 它仅适用于元组("George",20,80)。 您之前所做的是正确的。 您的函数应显示为:isAdult (_, age, _) = age >= 18。 希望有帮助。
尝试:
1 2 3 4
| type Name = String
type Age = Int
type Weigth = Int
type Person = (Name, Age, Weigth ) |
对于简单的介绍,请看这里
为了回答您的第二个问题,这是我的工作:
1 2 3 4 5 6 7
| newtype Name = Name String deriving (Show)
newtype Age = Age Int deriving (Show)
newtype Weigth = Weight Int deriving (Show)
newtype Person = Person (Name, Age, Weigth ) deriving (Show)
isAdult :: Person -> Bool
isAdult (Person (_, Age a, _ )) = a > 18 |
执行时:
1 2 3 4 5 6 7 8 9
| *Main> let p = Person(Name"Jeremy", Age 18, Weight 199)
*Main> p
Person (Name"Jeremy", Age 18, Weight 199)
*Main> isAdult p
False
*Main> let p = Person(Name"Jeremy", Age 20, Weight 199)
*Main> isAdult p
True
*Main> |
-
谢谢,但是我将如何添加一个涉及人员的功能? isAdult ::人-> Bool isAdult(a,b,c)=如果b> = 18则为True否则为False
-
谢谢,我在主要问题中添加了一些代码以阐明我的问题。
-
您是奇迹工作者杰里米! 非常感谢!! 尽管当我在cmd行中键入" p"时,我得到了" no instance for show Person"错误,而不是打印出元组。
-
如果发现错误,我将进行编辑。 请注意,这可能不是最佳方法。 如果oyu认为答案对您足够好,请接受答案。