我仍然无法理解Haskell中==
和=
之间的区别。我知道前者与重载类型有关,而后者“给出了函数的结果”,但我似乎无法理解它!任何帮助将不胜感激。
答案 0 :(得分:15)
=
是Haskell中的一个特殊保留符号,意思是“被定义为”。它用于介绍定义。也就是说,您可以使用它来创建可在其他值和函数的定义中引用的新值和函数。
==
不是保留符号,而只是Eq a => a -> a -> Bool
类型的普通函数。它碰巧在type class(Eq
)中声明,但没有什么特别之处。您可以隐藏==
的内置声明,并将其重新定义为您想要的任何内容。但通常它意味着“等于”,并且因为它是类型类的一部分,所以你可以定义(重载)它来表示你想要的“等于”对你的特定类型意味着什么。
例如:
data Foo = Foo Int
instance Eq Foo where
(Foo x) == (Foo y) = x == y
请注意,我使用=
为==
定义Foo
!
考虑差异的一种简洁方法是=
在编译时断言相等,而==
在运行时检查相等。
答案 1 :(得分:2)
=
执行分配。或定义可能是一个更好的词。只能这样做一次。这是一个特殊的操作符/符号。它不是一个功能
==
是一个函数,通常是固定的,它接受类型Eq
的两个输入并返回一个bool
Prelude> let a = 1
Prelude> a
1
Prelude> 5 == 5
True
Prelude> 5 == 6
False
Prelude> :t (==)
(==) :: (Eq a) => a -> a -> Bool
答案 2 :(得分:1)
==是为了平等
示例:比较两个整数
=是作业
示例:为变量赋值整数
答案 3 :(得分:1)
我还不是Haskell专家,但与大多数其他语言一样,==
是一个产生true
或false
的比较运算符,而=
是赋值运算符,在Haskell中归结为函数声明。
ghci> 5 == 5
true
ghci> "foo" == "bar"
false
ghci> let foo = "bar"
答案 4 :(得分:1)
==是一个运算符,用于比较两个事物是否相等。这是非常正常的haskell函数,类型为“Eq a => a - > a - > Bool”。该类型告诉它它适用于实现Eq类型类的每种类型的值,因此它有点重载。
=另一方面,=赋值运算符,用于引入定义。