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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
176: 2011/10/16(日)14:15 AAS
>>168
> あるいはghciに-fobject-codeを渡すのでもいい

なるほど、ロードする度にオブジェクトコードを生成するよう指示すれば
ghc の様にコンパイルされるので非ボックス化タプルが使えるのですね

で、欠点はコンパイルに時間を要するかも知れないことと、
ghci のデバッガからは見えないことですね

> 少なくとも今はできない

わかりました
デバッガは今までも特に活用したことないので、
-fobject-code オプションでの対処で凌ぐことにします
177: 2011/10/16(日)14:27 AAS
>>173
おぞましくさせない工夫が必要なほど幼稚な日本語をしゃべる人
(日本人とは限らない。)が多いのは事実だ。アノニマスには
開放できない罠。一番いいのは英語を使えることというのは否定でけん。
178: 2011/10/16(日)14:35 AAS
外部リンク:stackoverflow.com
stackoverflowのhaskellタグ。
179
(2): 2011/10/17(月)22:52 AAS
haskellって、コンパイルしたらJavaバイトコードのような
中間言語を吐き出すのでしょうか?
それとも機械後を吐き出してくれるのでしょうか?
180: 2011/10/17(月)23:01 AAS
>>179
それは言語の仕様ではないので厳密には実装によるが、デファクトスタンダードのGHCは基本的にネイティブコードを吐く。
181: 2011/10/18(火)00:53 AAS
外部リンク:www.haskell.org では、
> GHC compiles Haskell code either directly to native code or using LLVM as a back-end. GHC can also
> generate C code as an intermediate target for porting to new platforms. The interactive
> environment compiles Haskell to bytecode, and supports execution of mixed bytecode/compiled programs.
という紹介になってた。
182: 179 2011/10/18(火)13:32 AAS
ありがとうございます。
183
(1): 2011/10/20(木)11:39 AAS
質問なのですが、windows上でGHCでコンパイルして、出来上がったhello.exeファイルをダブルクリックで実行するには、どうすればよいですか?
コマンドプロンプトから、ファイル名を入力したら、実行はできます。
184
(1): 2011/10/20(木)12:31 AAS
>>183
たぶん、実行はされているけど、すぐにプログラムが終了してコンソールが閉じているだけだと思う

main = let loop = loop in putStr "Hello World!!\n" >> loop

でコンパイルしてダブルクリックしてみ
185: 2011/10/20(木)13:20 AAS
>>184
ありがとうございます!
その通りでした!
186
(10): 2011/10/20(木)22:49 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]
187
(2): 2011/10/20(木)23:11 AAS
>>186
オレ、そのアルゴリズム自力で思いついたけど、そんなに不思議かな。
たしか、3を法とする商群と5を法とする商群をなんとかすれば・・・ みたいなことを考えていて、思いついた
188
(1): 186 2011/10/20(木)23:29 AAS
>>187
C、java、rubyと来たのでmapは理解していたけど、手続き型言語には無い発想だと思う。
ついでに言うと、今なら手続き型言語ユーザーが何故、関数型言語を誤解するのか判る気がする。
「関数」「型」「評価」など、同じ字面でも関数型言語とは違う意味で説明される物が多い。
189
(1): SCHEME餃子 ◆8X2XSCHEME 2011/10/20(木)23:52 AAS
要するに根本的なパラダイムが違うって話だよな

英語で話すときは英語で考えなきゃ滑らかに話せないって話は聞くけど、
Haskell で書くときは Haskell で考えなきゃいけないってことだろ
190
(1): 2011/10/20(木)23:53 AAS
>>186
いいかどうかは別にして、カウンタやインデキシングを避けて、
何でもリストで考えればそうなる。
そうするとリストの代数的操作でプログラミングするようになる。
Richard Bird先生の本を読むのがいいかもしれない。
191: 187 2011/10/21(金)00:00 AAS
>>188
逆にオレはfor文でFizzBuzz書けとかいわれたら、戸惑うかな? たぶん戸惑うな。
whileでとか憤死するレベル。
192
(1): 2011/10/21(金)00:05 AAS
よーしパパFizzモナドとBuzzモナドを合成しちゃうぞー
193: 2011/10/21(金)00:10 AAS
でも それ、1から連続する数字のリストだから正解なだけで
あまりいい回答ではないと思ったかな。fibbuzzとかはやってるけど
関数型言語の普通の作り方すれば、最後のリストを[1..100]と
違うのだけの違いだから新鮮にも見えなかったよ。抽象化が得意な言語
とそうでないものでのさがあるんだなということかな。

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


prnFizzBuzz [1..100] とか prnFizzBuzz fibSeq とかでおしまいだろ?
194
(2): 2011/10/21(金)00:14 AAS
for文などでかけと言われたらかけるけど、関数型の記述に比べれば
泥臭くって、抽象化ができないよね。関数オブジェクトなどを使って
抽象化させて作るんだったら、初級っぽくないだろうし。
195: 2011/10/21(金)07:52 AAS
mplusを使ってfizzbuzzを書こうとすると現行のMonadPlusの駄目な部分がわかるかも
196
(1): 186 2011/10/21(金)08:04 AAS
>>190
>>186
>Richard Bird先生の本を読むのがいいかもしれない。

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

余談だが、この辺の抽象化のセンスってLispのマクロを作るセンスにも通じ
てる印象がある。マクロで関数を作成するにしてもマクロを作成するにして
もボイラープレイと除去と同じセンス必要なので。
200: 2011/10/21(金)11:19 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): 2011/10/21(金)12:37 AAS
>>194
で、いざHaskellでEnumeratorとモナド使ったfor記法が定義されたら
嬉々として使うんだろ?
202: 2011/10/21(金)12:43 AAS
>>201
いらないよ。ループ系ですらほとんど使わないのに。
203: 2011/10/21(金)12:50 AAS
>>201
それってfoldlとどう違うの?
204: 2011/10/21(金)14:40 AAS
>>201
そんな書き込みして何が楽しいの?
205: 2011/10/21(金)17:53 AAS
>>189
思考が言語を作ったが
今や言語が思考を制限するのですね
1-
あと 773 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.011s