8

我仍然很难理解Haskell===Haskell 之间的区别。我知道前者与重载类型有关​​,而后者“给出”函数的结果,但我似乎无法理解它!任何帮助将非常感激。

4

5 回答 5

21

=是 Haskell 中的一个特殊保留符号,意思是“定义为”。它用于引入定义。也就是说,您可以使用它来创建新的值和函数,这些值和函数可能会在其他值和函数的定义中被引用。

==不是保留符号,而只是类型的普通函数Eq a => a -> a -> Bool。它恰好在类型类( Eq) 中声明,但并没有什么特别之处。您可以隐藏内置声明==并将其重新定义为您想要的任何内容。但通常它表示“等于”,并且因为它是类型类的一部分,您可以定义(重载)它以表示您希望“相等”对您的特定类型表示的任何含义。

例如:

data Foo = Foo Int

instance Eq Foo where
  (Foo x) == (Foo y) = x == y

请注意,我曾经=定义==for Foo

一种思考差异的简洁方法是在编译时= 断言相等,而在运行时== 检查相等。

于 2011-05-13T05:57:14.687 回答
2

=执行任务。或定义可能是一个更好的词。只能做一次。这是一个特殊的运算符/符号。它不是一个函数

==是一个函数,通常是中缀的,它接受两个 typeclass 输入Eq并返回一个 bool

Prelude> let a = 1
Prelude> a
1
Prelude> 5 == 5
True
Prelude> 5 == 6
False
Prelude> :t (==)
(==) :: (Eq a) => a -> a -> Bool
于 2011-05-13T06:01:19.610 回答
1

我还不是 Haskell 专家,但与大多数其他语言一样,==比较运算符产生trueor false,而=赋值运算符是赋值运算符,在 Haskell 中归结为函数声明。

ghci> 5 == 5
true
ghci> "foo" == "bar"
false
ghci> let foo = "bar"
于 2011-05-13T05:56:34.983 回答
1

== 是用于比较两个事物是否相等的运算符。这是非常普通的haskell函数,类型为“Eq a => a -> a -> Bool”。该类型告诉它它适用于实现 Eq 类型类的每种类型的值,因此它有点重载。

另一方面,= 是一个赋值运算符,用于引入定义。

于 2011-05-13T05:59:16.267 回答
0

== 是为了平等

示例:比较两个整数

= 是赋值

示例:将整数分配给变量

于 2011-05-13T05:55:58.460 回答