我在Haskell中找到==
和=
之间的区别还是有困难。我知道前者与被超载的类型有关,而后者是“给出了结果”的功能,但我似乎无法让我的头靠近它!任何帮助将非常感激。Haskell中==和=的区别
回答
=
是在Haskell一个特殊的保留符号意为“被定义为”。它用于介绍定义。也就是说,您可以使用它来创建新的值和函数,这些值和函数可以在其他值和函数的定义中引用。
==
不是保留符号,只是Eq a => a -> a -> Bool
类型的普通功能。它恰好在type class(Eq
)中声明,但没有什么特别的。您可以隐藏==
的内置声明并将其重新定义为您想要的任何内容。但通常它意味着“等于”,并且因为它是类型类的一部分,所以您可以将它定义(重载)为意味着您希望“平等”意味着您的特定类型的任何内容。
例如:
data Foo = Foo Int
instance Eq Foo where
(Foo x) == (Foo y) = x == y
注意我用了=
定义为==
Foo
!
认为差异的精辟的方式是=
断言在编译时平等,而==
检查在运行时平等。
==是平等
例如:比较两个整数
=是赋值
例如:赋值给一个变量
我会在“赋值”上使用“定义”一词。 'x = 4'表示“x被定义为4”。这很重要,因为分配意味着它在什么情况下很重要,哪些事情没有。 – luqui 2011-05-13 06:06:20
我不太一个Haskell专家又一个整数,但是与其他大多数语言一样,==
是比较运算符,产生true
或false
,而=
是赋值运算符,它在Haskell中归结为函数声明。
ghci> 5 == 5
true
ghci> "foo" == "bar"
false
ghci> let foo = "bar"
==是一个运算符,用于比较两个事物是否相等。类型为“Eq a => a - > a - > Bool”是非常正常的haskell函数。该类型告诉它它适用于实现Eq类型类型的每种类型的值,因此它有一种重载。
另一方面,=是一个赋值运算符,它用于引入定义。
=
执行分配。或定义可能是一个更好的词。只能做一次。这是一个特殊的操作符/符号。它不是一个功能
==
是一个函数,通常infixed,这需要类型类Eq
的两个输入,并返回一个布尔
Prelude> let a = 1
Prelude> a
1
Prelude> 5 == 5
True
Prelude> 5 == 6
False
Prelude> :t (==)
(==) :: (Eq a) => a -> a -> Bool
- 1. Haskell中`mod`和`rem`的区别
- 2. ++和:haskell之间的区别是什么?
- 3. GHC和Haskell平台有什么区别?
- 4. OO Haskell中的return和returnIO之间的区别
- 5. Haskell中[1 .. 0]与[1 .. -1]的区别和原因?
- 6. haskell中的“sin sin 0.5”和“sin(sin 0.5)”有什么区别?
- 7. Haskell和Haskell类语言之间的类型声明语法区别
- 8. 解释和编译Haskell之间的ncurses的区别?
- 9. 区别! !和= JavaScript中
- 10. C++中“::”“。”和“ - >”的区别
- 11. vim中$和g_的区别?
- 12. Perl中“@”和“$”的区别
- 13. SQL中'AND'和'&&'的区别
- 14. LIKE和= MYSQL中的区别?
- 15. JSP中eq和==的区别
- 16. javascript中+ =和= +的区别
- 17. Haskell:(+1)和(\ x-> x + 1)有什么区别?
- 18. Haskell中的一组分区
- 19. Haskell中美元符号($)和括号之间的区别是什么?
- 20. +和CONCAT的区别?
- 21. 区别://和http:\\
- 22. 识别在Haskell
- 23. F#中的列表和[]中的区别#
- 24. Haskell:|在类别声明中
- 25. 在Haskell中定义类别和类别规则
- 26. Xamarin中Android中“savedInstanceState”和“bundle”的区别?
- 27. javascript中的/ * * /和//之间的区别
- 28. python中的[]和[,,]之间的区别
- 29. Flex中的UIComponent和Sprite的区别
- 30. Java中的StringBuilder和C#的区别
注意,很多语言,而不仅仅是Haskell中,略有不同的定义,这些运营商。值得注意的是,Erlang在大多数其他语言将使用的地方使用'=' – 2011-05-13 23:59:33