[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
192
(1): デフォルトの名無しさん [sage] 2011/10/21(金) 00:05:06.91 AAS
よーしパパFizzモナドとBuzzモナドを合成しちゃうぞー
193: デフォルトの名無しさん [sage] 2011/10/21(金) 00:10:44.14 AAS
でも それ、1から連続する数字のリストだから正解なだけで
あまりいい回答ではないと思ったかな。fibbuzzとかはやってるけど
関数型言語の普通の作り方すれば、最後のリストを[1..100]と
違うのだけの違いだから新鮮にも見えなかったよ。抽象化が得意な言語
とそうでないものでのさがあるんだなということかな。

prnFizzBuzz = mapM_ putStrLn.FizzBuzz
FizzBuzz n 。。。パターンマッチ


prnFizzBuzz [1..100] とか prnFizzBuzz fibSeq とかでおしまいだろ?
194
(2): デフォルトの名無しさん [sage] 2011/10/21(金) 00:14:42.74 AAS
for文などでかけと言われたらかけるけど、関数型の記述に比べれば
泥臭くって、抽象化ができないよね。関数オブジェクトなどを使って
抽象化させて作るんだったら、初級っぽくないだろうし。
195: デフォルトの名無しさん [sage] 2011/10/21(金) 07:52:37.50 AAS
mplusを使ってfizzbuzzを書こうとすると現行のMonadPlusの駄目な部分がわかるかも
196
(1): 186 [sage] 2011/10/21(金) 08:04:56.77 AAS
>>190
190(1): デフォルトの名無しさん [sage] 2011/10/20(木) 23:53:46.97 AAS
>>186
いいかどうかは別にして、カウンタやインデキシングを避けて、
何でもリストで考えればそうなる。
そうするとリストの代数的操作でプログラミングするようになる。
Richard Bird先生の本を読むのがいいかもしれない。
>>186
186(10): デフォルトの名無しさん [sage] 2011/10/20(木) 22:49:20.89 AAS
FizzBuzzを剰余使って書くのはすぐ思いつくけど、以下のは新鮮だった。
どうやったらこんな発想が出来る様になるんだろ。

fizz = cycle ["","","Fizz"]
buzz = cycle ["","","","","Buzz"]

f s n
| s == "" = show n
| otherwise = s

main = print $ zipWith f (zipWith (++) fizz buzz) [1..100]
>Richard Bird先生の本を読むのがいいかもしれない。

情報有難う!
Research paperを幾つか、ざっと読んでみた。
まだよく理解出来ない所も多いけど、Haskellって面白い。
197
(1): デフォルトの名無しさん [sage] 2011/10/21(金) 08:52:36.35 AAS
>>194
細かい抽象化は全体からみれば効果がないだろうよ
198
(1): デフォルトの名無しさん [sage] 2011/10/21(金) 09:48:20.45 AAS
>>196
鳥先生に興味が出てきたら早速ピアソンのサイトへ行ってAlgebra of Programmingを手に入れるんだ
199: デフォルトの名無しさん [sage] 2011/10/21(金) 10:38:23.33 AAS
>>197
何を優先してるかで違うのは当然だが、抽象化のセンスを見るのにも
いいとは思うがな。ボイラープレイトを取り除くにしても、この手の単純な
抽象化が出来なければ難しく感じるだろう。

余談だが、この辺の抽象化のセンスってLispのマクロを作るセンスにも通じ
てる印象がある。マクロで関数を作成するにしてもマクロを作成するにして
もボイラープレイと除去と同じセンス必要なので。
200: デフォルトの名無しさん [sage] 2011/10/21(金) 11:19:02.96 AAS
>>192のアイデアを水平合成とみて>>186のに適用するとこんな感じ?

type Magma a = a -> a -> a
class MonadZero m where
mzero :: m a
class MonadZero m => MonadOr m where
mor :: Magma (m a)
class MonadZero m => MonadPlus m where
mplus :: Magma (m a)
instance MonadZero [] where
mzero = []
instance MonadOr [] where
mor xs = if null xs then id else const xs
instance MonadPlus [] where
mplus = (++)

fizz = cycle $ replicate 2 mzero `mplus` return "Fizz"
buzz = cycle $ replicate 4 mzero `mplus` return "Buzz"
fizzbuzz = zipWith mplus fizz buzz

main = print $ zipWith mor fizzbuzz $ map show [1..100]

listモナドの和を論理和(つまりMaybeモナドの和)、数値和の二通りに見ることで数値和で作ったfizzbuzzのパターンと数字のパターンを論理和で合成する・・・と
Listを信号としてみれば、もろor回路による信号の合成だよな。始まる場所が変わることに対してはdrop等で開始位置をずらしてつまり信号のdelay回路か
SignalArrowを使った抽象化でもいけそうに見えるな
それはさておき垂直合成、つまりモナド変換子を使うのはどうなるんだろうか
FizzT (FuzzT Identity Int) [String]みたいな型になればそれっぽいんだけど
201
(3): デフォルトの名無しさん [sage] 2011/10/21(金) 12:37:44.28 AAS
>>194
で、いざHaskellでEnumeratorとモナド使ったfor記法が定義されたら
嬉々として使うんだろ?
202: デフォルトの名無しさん [sage] 2011/10/21(金) 12:43:09.39 AAS
>>201
いらないよ。ループ系ですらほとんど使わないのに。
203: デフォルトの名無しさん [sage] 2011/10/21(金) 12:50:12.54 AAS
>>201
それってfoldlとどう違うの?
204: デフォルトの名無しさん [sage] 2011/10/21(金) 14:40:50.67 AAS
>>201
そんな書き込みして何が楽しいの?
205: デフォルトの名無しさん [sage] 2011/10/21(金) 17:53:37.66 AAS
>>189
189(1): SCHEME餃子 ◆8X2XSCHEME [sage] 2011/10/20(木) 23:52:51.12 AAS
要するに根本的なパラダイムが違うって話だよな

英語で話すときは英語で考えなきゃ滑らかに話せないって話は聞くけど、
Haskell で書くときは Haskell で考えなきゃいけないってことだろ
思考が言語を作ったが
今や言語が思考を制限するのですね
206: デフォルトの名無しさん [sage] 2011/10/21(金) 18:00:38.90 AAS
自然言語では当たり前の話だが、言語=思考なんだよ。
207: デフォルトの名無しさん [sage] 2011/10/21(金) 18:07:06.79 AAS
自然言語ですら異論ありまくりだよ
208: デフォルトの名無しさん [sage] 2011/10/21(金) 18:27:55.96 AAS
たとえばMatzあたりがよく引き合いに出すが、そんなに支持されてる仮説じゃない

あと、エキスパートの思考は言語化できないことが多い
209: デフォルトの名無しさん [sage] 2011/10/21(金) 19:45:59.14 AAS
エスパーの思考に見えた
210
(1): デフォルトの名無しさん [sage] 2011/10/21(金) 21:08:24.89 AAS
明日筑波でHaskellな話してくるよ!
211: デフォルトの名無しさん [sage] 2011/10/21(金) 21:33:02.92 AAS
まだハスプラ更新されない
毎回のように延期するんならもうちょっと余裕を持ってスケジュール宣言しとけよ
212: デフォルトの名無しさん [sage] 2011/10/21(金) 21:47:04.40 AAS
ドラクエみたいなモンだよ

スケジュール通りに発売されたドラクエなんて、逆に心配だろ?
213: デフォルトの名無しさん [sage] 2011/10/21(金) 22:00:15.46 AAS
確かに長々と書いたC++のコードが一発でコンパイル通った時くらい眉唾だな
214
(1): デフォルトの名無しさん [sage] 2011/10/21(金) 22:25:17.56 AAS
>>198
URLぷりーず。
ピアソン?
215: デフォルトの名無しさん [sage] 2011/10/21(金) 23:43:26.13 AAS
>>210
Matz王国へ乗り込むんだな。
216: デフォルトの名無しさん [sage] 2011/10/21(金) 23:54:23.33 AAS
>>214
外部リンク[asp]:www.pearsoned.co.uk
1-
あと 762 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.020s