我在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中print和putStrLn的区别
- 2. Haskell中`mod`和`rem`的区别
- 3. ++和:haskell之间的区别是什么?
- 4. Haskell与erlang:foldl的区别?
- 5. GHC和Haskell平台有什么区别?
- 6. OO Haskell中的return和returnIO之间的区别
- 7. 在Haskell(ghc)Control.Exception中,try和catch的区别
- 8. Haskell中[1 .. 0]与[1 .. -1]的区别和原因?
- 9. Haskell镜头库中的`ix`和`at`有什么区别
- 10. Haskell中的类型和数据类型有什么区别?
- 11. Haskell中的Int和Maybe Int存在区别吗?
- 12. haskell中的“sin sin 0.5”和“sin(sin 0.5)”有什么区别?
- 13. Data Parallel Haskell中的PArray和[::]有什么区别?
- 14. Haskell和Haskell类语言之间的类型声明语法区别
- 15. 解释和编译Haskell之间的ncurses的区别?
- 16. 什么是Haskell,python和c函数之间的主要区别?
- 17. 区别! !和= JavaScript中
- 18. LIKE和= MYSQL中的区别?
- 19. java中+ =和= +的区别?
- 20. PHP中“:”和“。”的区别?
- 21. C++中“::”“。”和“ - >”的区别
- 22. SQL中'AND'和'&&'的区别
- 23. Perl中“@”和“$”的区别
- 24. javascript中+ =和= +的区别
- 25. vim中$和g_的区别?
- 26. Scala中&和&&的区别?
- 27. JSP中eq和==的区别
- 28. C++“类型推导”和Haskell“类型推论”有什么区别?
- 29. Haskell:(+1)和(\ x-> x + 1)有什么区别?
- 30. Haskell中的一组分区
注意,很多语言,而不仅仅是Haskell中,略有不同的定义,这些运营商。值得注意的是,Erlang在大多数其他语言将使用的地方使用'=' – 2011-05-13 23:59:33