首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >haskell -检查R^2中的两点

haskell -检查R^2中的两点
EN

Stack Overflow用户
提问于 2013-12-08 19:52:56
回答 3查看 127关注 0票数 0

我说了两点。现在我需要检查这些点是否相同,所以我做了:

代码语言:javascript
复制
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"

但我错了:

代码语言:javascript
复制
unexpected | 

有人能告诉我原因吗?我做错什么了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-08 19:59:57

这里有一些错误,首先,所有类型都以Haskell的大写字母开头。

代码语言:javascript
复制
type Point = (Float,Float)

anyLine :: Point -> Point -> Point

接下来,模式匹配发生在之前,=符号。

代码语言:javascript
复制
anyLine (a1, a2) (b1, b2)
  | a1 == b1 && a2 == b2 = error "Identical"
  | otherwise            = error "Not identical"

与卫兵一起,我们省略了平等标志。

这也可能是

代码语言:javascript
复制
anyLine a b
  | a == b = ...
  | otherwise = ...

我认为值得花时间读一本好的Haskell教程来学习一些你错过的基本概念,我个人更喜欢给你一个哈斯克尔

票数 3
EN

Stack Overflow用户

发布于 2013-12-08 19:55:58

您可以指定结果或定义案例,但不能同时进行。

代码语言:javascript
复制
anyLine :: datatypePoint -> datatypePoint -> datatypeLine
anyLine a b
    | (fst a == fst b) && (snd a == snd b) = error "Identical"
    | otherwise = error "Not identical"
票数 0
EN

Stack Overflow用户

发布于 2013-12-08 21:54:12

其他人已经回答了这个问题,但我想指出,如果您使用"newtype“和”派生“,这将更加简单。

代码语言:javascript
复制
newtype Point a = Point (a, a) deriving (Eq)

anyLine a b 
    | a == b = ....
    | otherwise = ....

保持该类型为泛型也是无害的,因此现在这将适用于浮点数、Ints等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20458228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档