我说了两点。现在我需要检查这些点是否相同,所以我做了:
type datatypePoint = (Float,Float)
anyLine :: datatypePoint -> datatypePoint -> datatypeLine
anyLine a b = [[fst a, fst b] , [snd a, snd b]]
| (fst a == fst b) && (snd a == snd b) = error "Identical"
| otherwise = error "Not identical"但我错了:
unexpected | 有人能告诉我原因吗?我做错什么了?
发布于 2013-12-08 19:59:57
这里有一些错误,首先,所有类型都以Haskell的大写字母开头。
type Point = (Float,Float)
anyLine :: Point -> Point -> Point接下来,模式匹配发生在之前,是=符号。
anyLine (a1, a2) (b1, b2)
| a1 == b1 && a2 == b2 = error "Identical"
| otherwise = error "Not identical"与卫兵一起,我们省略了平等标志。
这也可能是
anyLine a b
| a == b = ...
| otherwise = ...我认为值得花时间读一本好的Haskell教程来学习一些你错过的基本概念,我个人更喜欢给你一个哈斯克尔。
发布于 2013-12-08 19:55:58
您可以指定结果或定义案例,但不能同时进行。
anyLine :: datatypePoint -> datatypePoint -> datatypeLine
anyLine a b
| (fst a == fst b) && (snd a == snd b) = error "Identical"
| otherwise = error "Not identical"发布于 2013-12-08 21:54:12
其他人已经回答了这个问题,但我想指出,如果您使用"newtype“和”派生“,这将更加简单。
newtype Point a = Point (a, a) deriving (Eq)
anyLine a b
| a == b = ....
| otherwise = ....保持该类型为泛型也是无害的,因此现在这将适用于浮点数、Ints等。
https://stackoverflow.com/questions/20458228
复制相似问题