[過去ログ]
関数型プログラミング言語Haskell Part33 (1002レス)
関数型プログラミング言語Haskell Part33 http://mevius.5ch.net/test/read.cgi/tech/1581326256/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
617: デフォルトの名無しさん [] 2020/12/20(日) 18:18:16.88 ID:FMam64CT ネタを拝借して、次のコードを考える。 ``` haskell inc :: (Applicative f) => Int -> f Int inc n = pure (n + 1) lhs :: (Int -> () -> String) -> Int -> IO String lhs dump x = do y <- inc x z <- print y pure $ dump y z rhs :: (Int -> () -> String) -> Int -> IO String rhs dump x = inc x >>= \y -> dump y <$> print y lhs ((.) show . (,)) 123 >>= print rhs ((.) show . (,)) 123 >>= print lhs (const . const "hello") 123 >>= print rhs (const . const "hello") 123 >>= print ``` http://mevius.5ch.net/test/read.cgi/tech/1581326256/617
618: デフォルトの名無しさん [] 2020/12/20(日) 18:18:58.94 ID:FMam64CT IOモナドを恒等モナドに差し替えて、Rに移植する。 ``` {r raskell} do = pure = id = function (a) a; const = function (a) function (ab) a; `%.%` = function (bc, ab) function (a) bc (ab (a)); `%$%` = function (ab, a) ab (a); `%>>%` = function (a, ab) ab (a); inc = function (n) n + 1; caty = function (a) cat (a, "\n", sep = ""); lhs = function (dump) function (x) do ({ y <- inc (x); z <- caty (y); pure %$% dump (y) (z); }); rhs = function (dump) function (x) { inc (x) %>>% (function (y) dump (y) %$% caty (y)); }; lhs (function (y) function (z) list (y, z)) (123) %>>% print rhs (function (y) function (z) list (y, z)) (123) %>>% print lhs (const %.% const ("hello")) (123) %>>% print; rhs (const %.% const ("hello")) (123) %>>% print; ``` Rは関数の引数を問答無用に遅延評価するので、最後の`rhs`だけがHaskellと 異なる動作をする。Rの遅延評価の例としては煩雑過ぎるが、HaskellのIOモナド とサイドバイサイドに比較できる例になっている。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/618
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.041s