通常、haskellには=
,<-
,<=
が表示されます。これらの違いは何ですか?=、< - 、<=、haskellの違いは何ですか?
答えて
=
は結合性である。名前を値/式にバインドします。 letブロックとwhereブロックでトップレベルのバインディングに使用します。
myfun x = let y = x + 1
in z y
where z n = n * n
<-
はモナド抽出である。それはdo
記法の一部であり、モナドの内容に束縛された名前を導入する。
main = do
name <- getLine
putStrLn ("Hello, " ++ name)
<=
Cmp
型クラスで定義された等しい少ないまたはオペレータです。
message x = if x < 18 then "No, you can't vote." else "Go ahead."
の部分的な重複それは非常に明確です!どうもありがとう!私は「トップレベルバインディング」が何であるか尋ねることができますか?トップレベルのバインディングと他のバインディングの違いは何ですか? –
トップレベルのバインディングは、ファイルレベル(モジュールのwhereブロック)に直接存在するものです。他のバインディングとの唯一の違いは、その可視性です。 –
私は* "モナド抽出" *は本当に "モナド結合" *であるべきだと思います。 –
=
等しくなるように定義さを意味します。つまり、私は、ファイル内x = 5
どこかを記述する場合、私はその後、(同じ範囲内)の他の点で
x
その逆で5
を置き換えることができます - 彼らは同じことです。 (そして、常に同じままになります。)の定義は、しかし、この場合においてものような再帰的な計算を与えるために、あなたはそれを結合している名前に戻って参照することができ、あなたはまだ任意の時点で
fibonacci
を置き換えることができます0 : 1 : zipWith (+) fibs (tail fibonacci)
で処理しますが、もちろん無限にプロセスを繰り返す必要があります。
=
定義は、モジュール内の独自のライン、すなわち、トップレベルのいずれかで立つことができ、又はlet
又はwhere
ブロック内:ここsilly :: Integer -> Integer silly x = y where y = let z = x + 1 in z - 1
、
silly
結合トップレベル(あります関数の引数で)、y
はwhere
バインディングであり、z
はlet
バインディングです。<-
は、本質的に単項演算の結果を意味し、の結果として定義されることを意味します。これは、これはユーザーが入力した文字列としてuserName
を定義していないだろう何main = do putStrLn "Enter your name, please" let userName' = getLine putStrLn $ "Hello, " ++ userName' -- error here
とは非常に異なっているが、などということ
main :: IO() main = do putStrLn "Enter your name, please" userName <- getLine putStrLn $ "Hello, " ++ userName
注:これは通常、例えば、
do
ブロックに立っています文字列の入力を要求するアクション。userName
はString
ですが、userName' :: IO String
です。
も、リスト内包で使用されます。<-
squareNums :: [Integer] squareNums = [x^2 | x <- [0..]]
userName <- getLine
は異なる何かをすることに見えるかもしれませんが、実際には、(代わりにIOのリスト)だけ異なるモナドでは、同じことを行います。実際、私もsquareNums = do x <- [0..] return $ x^2
として本当に違う
<-
の第三の使用もありますことを書くことができます:pattern guardsが、これらはあまり一般的ではありません。<=
は、単なるライブラリ関数(インフィックス演算子形式)です。これはHaskellで遭遇する殆どのシンボリックな "構文"の場合にも当てはまります。そのような演算子についてはask Hayooとすることができます。<=
はdefined in theData.Ord
moduleであり、比較演算子はそれほど同じではありません。
ます。また、このようなオペレータを自分で定義することができます - これは再びビルトインされた - それは標準ライブラリにはまだなかった場合、私は簡単に署名で=>
が完全に違うものであること。なお、(<=) :: Ord a => a -> a -> Bool x <= y = not $ x > y
を定義することができます構文。今週はquestion about thatもありました。
- 1. ASP.NET MVCで "<%="、 "<%:" "<%#"の違いは何ですか?
- 2. aspxの<%:と<%=と<%#の違いは何ですか?
- 3. Cの<と<<の違いは何ですか?
- 4. cout << coutとcout <<とcoutの違いは何ですか?
- 5. ASP.NET MVCの<%#と<%=の違いは何ですか?
- 6. Task <>とIAsyncOperation <>の違いは何ですか
- 7. <f:viewParam>と<f:param>の違いは何ですか?
- 8. <<と+ =の違いは何ですか?
- 9. ArrayList <?>、ArrayList、ArrayList <Object>の違いは何ですか?
- 10. NHibernate Query <>とQueryOver <>の違いは何ですか?
- 11. <tiles:add>と<tiles:put>ストラットの違いは何ですか?
- 12. <?の違いは何ですか?エコー __();と<= __();
- 13. <?php ?>と<? ?>の違いは何ですか?
- 14. <TargetFramework>と<RuntimeFrameworkVersion>の違いは何ですか?
- 15. <chrono>と<ctime>の違いは何ですか?
- 16. &と&&、|の違いは何ですか? || R?</p> <pre><code>&, && |, || </code></pre> <p>用法の違いを何:
- 17. シェルスクリプトで$ @と$ *の違いは何ですか?私<code>script.sh</code>で
- 18. HaskellのApplicativeの<*>の語源は何ですか?
- 19. ルビーのself.methodとクラス<< selfのメソッドの違いは何ですか?
- 20. Haskell演算子 "<>"の意味は何ですか?
- 21. angularJs 1.5では、@と<の違いは何ですか?
- 22. html文書の "<!DOCTYPE ...."と "<!DOCTYPE>"の違いは何ですか?
- 23. C#7.2のスパン<T>とメモリ<T>の違いは何ですか?
- 24. .NetのReadOnlyCollection <T>とReadOnlyCollectionBuilder <T>の違いは何ですか?
- 25. Sparkのアレイ<string>とアレイ<String>の違いは何ですか?
- 26. のNUnit Assert.Equals <p>の違いは何ですか?</p>
- 27. <DebugType>フル</DebugType>と<DebugType>ポータブル</DebugType>の.netコアプロジェクトの違いは何ですか?
- 28. <の違いは? <?php
- 29. <html:submitタグと<input type = "submit"の具体的な違いは何ですか?
- 30. <class 'str'>と<type 'str'>の違いは何ですか?
http://stackoverflow.com/questions/28624408/equal-vs-left-arrow-symbols-in-haskell – chi