一般的なHaskellオペレーターの発音できる名前はありますか?[閉まっている]


204

Learn You a Haskell for Great Goodを読んでいますでおり、Haskell演算子の発音方法を知りません。彼らは「本当の」名前を持っていますか??

たとえば、このような表現を読み上げるにはどうすればよいでしょうか。

Just (+3) <*> Just 9

そんなこと知ってる >>=が「束縛」ではが、他の人はどうですか?Googleでは英数字以外の文字は考慮されていないため、効率的な検索を行うのはちょっと難しいです...

独自の演算子を作成できるので、もちろんすべての演算子に名前を付けることができるわけではありませんが、一般的な演算子(Applicativeまたはで定義されている演算子Monad)には名前を付ける必要があると思います...


それはいい質問で、私は答えを知りません。おそらく、命名スキームが必要です。あるいは、ライブラリの作成者は、Haddockドキュメントの一部として発音可能な名前を提供する必要があります。
ポールジョンソン

3
非常に良い質問です。通常、<*>は「適用」、<$>は「fmap」と読みます。他のものについては私にはわかりません。
DuoSRX 2010年

3
これは「Haskell:どのように<*>発音されますか?」の複製ですか??そうでない場合でも、その答えはおそらくチェックする価値があります。
Antal Spector-Zabusky

8
また、Haskell wikiの発音に関するページもご覧ください。それは不完全ですが、関連しています。
Antal Spector-Zabusky

3
()発音単位です。かつて、数百人の関数型プログラマーの聴衆の前で、自分のスライドでそれを発音する方法を知らないことに気づきました。
sigfpe 2014年

回答:


194

ここに私がそれらを発音する方法があります:

>> =バインド
>>それでは
*>その後
-> to                 a- > b:a to b 
<               -bind(それはdesugars to >> =)
<$>(f)マップ
<$ map-replace by     0 <$ f: "f map-replace by 0" 
<*> ap(ply)            (as it as it as the Control.Monad.ap) 
$                          (none、just as "" [whitespace] ) 
。パイプを            。b:「b pipe-to a」
!! インデックス
!インデックス/厳密な     a!b:「aインデックスb」、foo!x:foo strict x 
<|>または/代替   expr <|>用語:「exprまたはterm」
++ concat / plus / append
[]空のリスト
:短所
::タイプ/ /       fx :: Int:タイプIntのfx
\ラムダ
@として                 、外出先LL @(L:LS):リットルの短所のLSとして、外出先LL 
〜怠惰               行く〜(a、b)は:怠惰なペアaを行く、B

100
私にとって(.)は「作曲」です。
luqui

47
私は通常、むしろ発音(.)通りof($)通りapplied tof . g . h $ xので、読まれますf of g of h applied to x。しかし、私はこの観点での相違を理解しています!
Ptival、2011年

39
(.)「後」と発音した方が賢明だと思います。コンポジションは2つの方向で表すことができ、「後」と呼ぶとすぐにその仕組みも説明されます。

1
@Tinctorius、構成が後か前かは、普遍的ではない視点に依存します。たとえば、では、無限ループの「後」に来るconst 42 . fix idと本当に言えるconst 42でしょうか。
luqui

7
はHaskellですでに使用されているため、ユーティリティの使用方法が非常に異なるため、++ではなく「追加」と呼びます。concatconcat
Benjamin Kovach、2012

42
| sym  | pronunciation                                    |
|------|--------------------------------------------------|
| |    | "such that"                                      |
| <-   | "is drawn from"                                  |
| =    | "is defined to be" / "is defined as"             |
| ::   | "has type" / "of type" / "is of type"            |
| ->   | "a function that takes ... and returns a ..." /  |
|      |                          "function that maps" /  |
|      |                          "is a function from" /  |
|      |                                          "to"    |
| $    | "apply"                                          |
| _    | "whatever"                                       |
| !!   | "index"                                          |
| ++   | "concat"                                         |
| []   | "empty list"                                     |
| :    | "cons"                                           |
| \    | "lambda"                                         |
| =>   | "implies" / "then"                               |
| *>   | "then"                                           |
| <$>  | "fmap" / "dollar cyclops"                        |
| <$   | "map-replace by"                                 |
| <*>  | "ap" / "star cyclops"                            |
| .    | "pipe to" / "compose" / "dot"                    |
| <|>  | "or"                                             |
| @    | "as"                                             |
| ~    | "lazy"                                           |
| <=<  | "left fish"                                      |

2
ご回答有難うございます。"dollar cyclop"は私を笑わせました:)
Thomas Levesque 2013年

9
サイクロプスは特異であり、sを落とす必要はありません。:)

1
どう<*ですか?あまり使用されていないため、一般的な名前はありませんか?
Dannyu NDos 2018年


8

私は自由に答えを組み立てて非常に単純なhaskellプログラムにしました。これは、パターンマッチングによってのみ、haskellコードを英語に翻訳しようとします。letterator記号を文字に変換するため、私はそれを呼び出します

-- letterator

main = translateLn <$> getLine >>= putStrLn

translateLn :: String -> String
translateLn = unwords . map t . words

t :: String -> String -- t(ranslate)

-- historical accurate naming
t "=" = "is equal too" -- The Whetstone of Witte - Robert Recorde (1557)

-- proposed namings
-- src http://stackoverflow.com/a/7747115/1091457
t ">>=" = "bind"
t "*>"  = "then"
t "->"  = "to"                   -- a -> b: a to b
t "<$"  = "map-replace by"       --  0 <$ f: "f map-replace by 0"
t "<*>" = "ap(ply)"              --  (as it is the same as Control.Monad.ap)
t "!!"  = "index"
t "!"   = "index/strict"         --  a ! b: "a index b", foo !x: foo strict x
t "<|>" = "or/alternative"       -- expr <|> term: "expr or term"
t "[]"  = "empty list"
t ":"   = "cons"
t "\\"  = "lambda"
t "@"   = "as"                   -- go ll@(l:ls): go ll as l cons ls
t "~"   = "lazy"                 -- go ~(a,b): go lazy pair a, b
-- t ">>"  = "then"
-- t "<-"  = "bind"              -- (as it desugars to >>=)
-- t "<$>" = "(f)map"
-- t "$"   = ""                  -- (none, just as " " [whitespace])
-- t "."   = "pipe to"           -- a . b: "b pipe-to a"
-- t "++"  = "concat/plus/append" 
-- t "::"  = "ofType/as"         -- f x :: Int: f x of type Int

-- additional names
-- src http://stackoverflow.com/a/16801782/1091457
t "|"   = "such that"
t "<-"  = "is drawn from"
t "::"  = "is of type" 
t "_"   = "whatever"
t "++"  = "append"
t "=>"  = "implies"
t "."   = "compose"
t "<=<" = "left fish"
-- t "="   = "is defined as"
-- t "<$>" = "(f)map"

-- src http://stackoverflow.com/a/7747149/1091457
t "$"   = "of" 

-- src http://stackoverflow.com/questions/28471898/colloquial-terms-for-haskell-operators-e-g?noredirect=1&lq=1#comment45268311_28471898
t ">>"  = "sequence"
-- t "<$>" = "infix fmap"
-- t ">>=" = "bind"

--------------
-- Examples --
--------------

-- "(:) <$> Just 3 <*> Just [4]" 
-- meaning "Cons applied to just three applied to just list with one element four"
t "(:)"  = "Cons"
t "Just" = "just"
t "<$>"  = "applied to"
t "3"    = "three" -- this is might go a bit too far
t "[4]"  = "list with one element four" -- this one too, let's just see where this gets us

-- additional expressions to translate from
-- src http://stackoverflow.com/a/21322952/1091457
-- delete (0, 0) $ (,) <$> [-1..1] <*> [-1..1]
-- (,) <$> [-1..1] <*> [-1..1] & delete (0, 0)
-- liftA2 (,) [-1..1] [-1..1] & delete (0, 0)
t "(,)" = "tuple constructor"
t "&" = "then" -- flipped `$`

-- everything not matched until this point stays at it is
t x = x

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.