我在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