関数型プログラミング言語Haskell Part15
1 :
デフォルトの名無しさん :
2011/07/09(土) 17:16:54.84
2 :
デフォルトの名無しさん :2011/07/09(土) 17:18:53.89
3 :
デフォルトの名無しさん :2011/07/09(土) 17:19:45.18
4 :
デフォルトの名無しさん :2011/07/09(土) 17:21:15.57
諸君、議論をレジュームしたまえ
諸君、さあ
諸君、何故議論しないのだ
男割りします
尻滅裂
(´;ω●)諸君・・・
OCaml使ってればいいじゃない。 ていうかMLスレはなかったんだっけ?
素数ならData.Numbers.Primesでことたりる。
ハスプラって新版インストールする度に追加していたライブラリは入れ直しなの?
19 :
デフォルトの名無しさん :2011/07/12(火) 08:16:32.79
バイナリ互換次第だろうけど、道南?ghcベルトのバイナリ互換性は?
パッチレベルリリースでもバイナリ互換性なし、全部壊れる
俺はghc変わったら全部入れなおすなあ
>>15 参考資料の人の結論は、
- Haskell は OCaml 並に普通に業務で使える言語
- Haskell マニアが嬉しそうに紹介している機能は実はほとんど使う必要が無い。
せいぜい Monad transformer位で仕事は出来る
- Haskell には良いところもあるし、悪いところもある。手放しで神格化するのが一番問題
なので、そういう文脈で引用するのは作為的なのでは?
速度重視のコードを遅延評価で書くのは大変でも、どの言語でもそういうノウハウはあるわけで。
遅延の利点ばかりに目をやらないで、そういうノウハウも蓄積しましょうよ、って話だったよね、それ。
>>16 MLスレはあるけど、
>>15 のはそういうOCaml賛美とかじゃない。普通に読む価値がある文章だと思う。
>>15 求人率に Prolog を加えると面白いんじゃなかったっけ。
業務に使えるって、ようするに、スクリプト組んでデータ整形やるとかそんなレベルでしょ? 売り物のコードにHaskellのソースコード入れてから業務に使えると言ってほしい
× 業務に使える ○ OCaml 並に業務で使える
>>25 OCaml を業務に使ってる人がいなければ、「OCaml 並に業務で使える」という命題も「OCaml 並に業務で使えない」という命題も真になる
>>24 そもそもコードを出荷しない会社なんじゃね?
チームのメイン言語がHaskellなら、業務に使える使えないを語って当然だろ
出荷されないコードはこの世に存在しないと思ってる人も多いから
>>27 そもそもチームすらないかも知れん
普通はExcelでデータ入力してて、暇になったときに上司にばれないようにHaskellのスクリプトで定期的に2chのログを収集してる程度でも、業務に使えるということに変わりはない
>>28 業務=直接金になること という認識だから売買の対象にならなければ業務じゃない
売買の対象という意味じゃなければ、PCで遊んでるのも業務だからいちいち「業務で」と断る必要はない
社内システムならHaskellでも許されると思うが
>>15 の人は金融系だよ。具体的な社名は知らないけど。
主に金融系でHaskellとかOCaml、F#とかの関数型言語は割と人気があって、
採用事例が多いそうな。Tsuru Capitalとか、かつてのリーマン・ブラザーズとか。
OCamlならJane Streetとか。もちろんチームで。
使っているのは、金融商品を取り扱うための言語フレームワークを作ったり、
統計的分析を元にした取引銘柄自動売買とかだってさ。
てか、リンク先読まずに想像でどうこう言うってのもどうなのよ。
金融系ってなんで関数型言語多いの?
そもそもHaskellなんてHaskellコンパイラ作る為の言語みたいなものだったし
だから何?
So what?
>>33 国債買ってて遊んでても給料がもらえて暇だから
haskell使ってWEBのバックエンドシステム作ったらphpより簡単で保守し易すぎてワラタwwwww みたいなこと誰か言ってくれたら俺もhaskellもうちょっと頑張れる気がする
>>33 他人と同じことやってたら食っていけないからじゃないか?
金融系ちゅうかそれ証券系だよな
銀行生損保あたりは
>>39 だろ
>>40 という話を鵜呑みにして、会社でHaskellを導入したら、haskell使ってWEBのバックエンドシステム作るプログラマをメンテ・教育するコストで会社が潰れると思う
Haskellについてこれない低知能社は淘汰されれば良い と言ってみたい
Haskell使える奴なんかいくらでもいるからそこまでコストかからんと思う
Haskell使えてる人ってソロプレイヤーが多くてスケールしないイメージ 根拠は無い
>>45 @tanakh さんのツイートとか見てるとそんな印象だな。要するにあるレベル以上になると
使える人が急激に減るみたい。んなことはC++でもなんでも一般的には言えることだけど
Haskellの場合には減り方が激しいんだろうということ。
ただ、@tanakhさんは最近の、ICFCだっけか、ラムダ計算のカードゲームの話ではチーム
組んで良い成績をあげてるので、Haskell実力者どうしのチームが機能しないという話しでは
ないだろう。参戦記を読んだ限りでは、モナドを単位にしたモジュール化でうまく作業分担
していたようだ。
ICFP Programming Contestで上位行くような人を集めてようやく使い物になるのか・・・ 非現実的な事この上無し
>>46 上級者÷一般レベル の値が一番小さいのがアセンブラ
49 :
46 :2011/07/16(土) 11:53:05.28
>>47 モナドを単位とした振り分けでチーム開発は可能であることの例証だし、世の中でもそこそこ
行われているんじゃないか、という話がしたかった。競技プログラミングを例にしたのは成果や
過程があるていどオープンになっていて引き合いに出しやすかったからだけど、実際に金融
やらなんやら我々の目に触れにくい(または触れることがない)分野でこういったモナドを単位とした
分担開発は行われているんじゃないか。
そもそもモナドを単位として分割統治とか意味が分からんのだが
次に売れる本は スケーラブルHaskell開発 だな
いやそのまえにクックブックをですね
いやまずは13歳からはじめ・・・
まずは ByteString を返す show を作ります
cabal install bytestring-show 先生できました
>>52 Common Lispでも高速化させようと思ったら、ある程度
泥臭い記述が増えてくるよ。一部がマクロでかぶせられるとは言ってもね。
高速化って結構泥臭いもんだから同じだなと思った。
ととあるりすぱぁ(あたまもぱぁ)からの感想です。
CLは文字列は文字の配列じゃないですかー! リストで文字列を扱うときのメモリ消費はガチ。特に64ビット環境。 そりゃあ、バイト列使おうとかいう話にもなるよね。
文字列がリストっていうのは楽なんだけどね。 リスト操作に慣れる、という意味での教育効果もあると思うし。 最近のPerlインタプリタとかjavascriptインタプリタとかの、文字列の内部的にどういう構造になっているんだろう? 文字配列のリスト?
もうリストなんて廃止して Educationモジュールに追いやっちゃえよ
>>62 文字列以外の場所でもリストってやばいのか
>>62 えー?
むしろ64bitが普及したらメモリ食うとか気にしなくなるだろうから、全部リストで済ませたいけどなぁ
最適化よりも楽にプログラミング出来る方が有難い
最適化したけりゃcの関数呼び出せば良いんだし
元々プログラマが最適化するのには関数型言語は向かないんだしさ
適材適所で手続き型言語を呼び出せば良い
そんなのより並列リストと普通のリストを統合したりして、基本的な文法で並列化出来るようにして欲しいぜよ
observable sharing とはどういったものでしょうか 参照透過性に関係する問題だという漠然としたイメージはあるのですが、 どういったものか全く分かりません
メモリをたくさん使う問題って 単純に量じゃなくてGCにCPU時間使うのが問題だと思ってる
>>66 同意。その通りだと思う。GCに引っかかると途端に遅くなる。
数十バイトとか数キロバイトなら倍メモリ消費しても全然問題にならないけど、
数百メガバイトとかになってくると、倍とか普通にきつい。
リスト廃止しろとかは笑えないけど。楽で良いじゃんリスト。
そういえば、printf関数とかなつかしい過去の記憶になったな。 まだまだ使っている人はもちろんいるんだろうけど。
>>68 Text.Printf.printf 関数は今でも普通に使ってる
これ使わないと、数値から文字列を作るのがえらく面倒になる
特に桁を揃えたりゼロで埋めたい時
とてもシンプルに書けるから重宝してる
ただ、コンパイル時に型エラーを検出できないのが不満だ
他に総合的にもっと使いやすいライブラリがあるのなら教えてほしい
template-haskellを使った型安全なprintfというのはよくあるネタだと思うけど Text.Printfを置き換えられる程のものはなかったような
>>69 あ、オレが言っていたのは、C言語のprintf関数のこと。
Doubleとかの浮動小数点数の桁をそろえて出力するHaskellの便利なライブラリは知らない。
オレは、表示してみて科学記法がならんで「ウザっ」て思うときは、表示するときだけmap (floor.(*10^3))とかしてしのいだり。
そういうことしてしのげないときは、科学記法で我慢している。
0.000000123と0.0000000234みたいな表記をされても、どうせどちらが大きいのかさえ一瞬では分からないので、科学記法のほうがいくぶんマシ。
69氏が哀れ…
早くHaskell GCを速くしろよ Javaのそれと比べたら冗談みたいなレベルらしいじゃないか
おまえがSunがJavaにしたみたいに資金的に支援すれば?
そんなことしたらコミュニティが俺の犬になっちゃうよ? アンドロイドに搭載された辺りで訴えちゃうよ?
>>73 「らしい」なんて不確かなことで要求するな
むしろ、膨大なリソースが投入されて 改良されてきたJVMが優れているという話にしかならん
UTF8 bomマークつきの日本語テキストを処理しようとしていて、 大体上手く行っています。問題は、”☆”みたいな文字をいくつかのテキストに 付加するための定数として star = "☆" などとしておいて cs ++ star みたいな事をやると star の部分が文字化けしてしまうことです。 GHC.IO.Encoding.UTF8 を使ったら良さそうなのですがghci で import して :t utf8 しても 意味が理解できなくてどうやって utf8 という関数を使うのかが理解できません。 最初は star = utf8 "☆" と書いてみたんですがダメみたいです。(なにか根本的に誤解してるみたいです)。 プログラム内で utf8 文字列定数を定義するにはどうすれば良いのでしょうか? (もちろんプログラム自体も UTF8 bom 付きで保存して ghc に食わせています。)
>>79 あ... System.IO.UTF8 ってのを入れたらなんとかなるかも知れないですね。
cabal ってのが意味わかりませんがやってみます。
>>80 cabal ってのが良く分からなかったけど、HackageDBに
接続してくれるパッケージ管理システムなんですかね?
とにかく
ttp://hackage.haskell.org/package/utf8-string-0.3.3 で取ってきたものを解凍して cabal install utf8-string.cabal したら
...
import System.IO.UTF8 as U8
main = do args <- getArgs
cs <- U8.getContents
let option = head args
U8.putStr $ f option cs
みたいにして上手くいったみたいです。お騒がせしました。
#入力テキストをUTF8にしないといけないのだけが面倒ですね...
ツイのハスケル連中、どこまで上から目線だか
さーらーせ!さーらーせ! ま、誰誰を指すかは大体検討はついてるけどね
MonadPlus クラスの mzero 関数と mplus 関数 Monoid クラスの mempty 関数と mappend 関数 これらって、意味的に何か違いはあるんですか? たとえば、ある型が既に Monad クラスのインスタンスであって、 なおかつ identity と associativity の両性質を持っていた場合、 その型は Monoid クラスのインスタンスにも、 MonadPlus クラスのインスタンスにも成れますよね どちらのクラスのインスタンスにするか、 あるいは両方のインスタンスにするか、 判断する基準みたいなものは一般的に何かあるのですか? 単に好きな関数名が有る方を選んどけ、という程度でしょうか
上から目線(キリッ)
>>85 どちらかのインスタンスにする必要があるの?
そういう疑問がわくということは、べつにどちらのインスタンスにする差し迫った必要もなさそうだけど。
もしそうなら、どちらのインスタンスにする必要もないでしょ。
あと、mzeroは>>=に対して定義されているんだから、Monadに対してしか意味をなさないけど、
mzeroとmplusしか使わないなら、memptyとmappendと交換しても何もおかしくないとは思う。
>>87 > どちらかのインスタンスにする必要があるの?
Monoid クラスのインスタンスにする必要がある時
MonadPlus クラスのインスタンスにする必要がある時
というのは、例えばどんな場合なのでしょうか
>>88 > Monoid クラスのインスタンスにする必要がある時
mconcatとか、Data.Foldable.foldとか、引数(の一部)がMonoidクラスのインスタンスである必要がある関数を使いたいとき。
> MonadPlus クラスのインスタンスにする必要がある時
同様に、引数がMonadPlusクラスのインスタンスである必要がある関数を使いたいとき。
突き詰めれば、これだけの話だと思う。
Control.Monad.guard使うならMonadPlus とりあえず、インスタンスにする型がMonadでもある時にguardを使うかどうか考えてみて 言い換えれば計算の途中に特定の条件で計算を打ち切るようなことを期待する場合ね そんなのあきらかにねーよってんならMonoidでいいと思うよ
learnyouahaskellを購入したけど、clojureを良く使ってる身から みるとclojureの母親だな。haskellって
>>89 >>90 なるほど、ということは、機能としての違いでしかないというわけですね
そういった機能以外には、特に区別する意味は無い?
例えば Monad クラスしかなく Monoid クラスがまだ存在していなくて、
Data.Foldable.fold 関数らも Monoid クラスではなく
MonadPlus クラスのインスタンスを要求しているような世界において、
機能的にはそれで十分だと思うのですが、
Monoid クラスをライブラリに加えてくれという要求は出てこないのでしょうか
>>92 > Data.Foldable.fold 関数らも Monoid クラスではなく
> MonadPlus クラスのインスタンスを要求しているような世界において、
> 機能的にはそれで十分だと思うのですが、
> Monoid クラスをライブラリに加えてくれという要求は出てこないのでしょうか
なんでそうなる。
すべてのデータ型が既にMonadならそういうことにもなるかもしてないけど、
現実にそうではないこの世界のHaskellにおいては、
MonadのインスタンスにできないがMonoidにできるデータ型はいくらでも考えられるでしょ。
そのとき、Monoidクラスは意味がある。
-- いや、正直、実際のプログラミングでMonoidクラスが有用だと感じたことはないが…
-- そういう意味では理論的関心が先行した感の強いクラスだとは思う
>>97 > なんでそうなる。
だって、そういう(たとえ話の)世界では
identity と associativity の両性質があることで果たせる機能が
MonadPlus クラスのおかげで既に実現されているわけだから、
「機能という点において」は Monoid クラスが作られる必要性がないわけでしょ
でもそんな世界にあっても、もし Monoid クラスが必要だという要求が出てきたら、
それはそういう機能以外にも、Monoid という性質に意味があるということじゃないかな
あるいは、
>>89 や
>>90 以外にも Monoid ならではの機能があるとか
と、思考実験してみました
Monoid クラスにどんな意味(隠れた機能)があるのかまでは、まだ考えられてないけど
> いや、正直、実際のプログラミングでMonoidクラスが有用だと感じたことはないが…
同感です
>>94 アンカーミスりました
本当は
>>93 です
お詫びに面白そうな本を紹介します
A Framework for Programming Interactive Graphics in a Functional Programming Language
>>94 いや、型クラスに関しては「機能が弱い」からこそ役に立つ場合がある
たとえばFunctorでできることは全てMonadでもできるけど、だからといってFunctorが不要な訳ではない
なぜならFunctorのインスタンスにはなれてもMonadのインスタンスになれない型が存在するから
MonoidとMonadPlusについても同様で、たとえばByteStringはMonoidインスタンスになれるけど、
MonadPlusインスタンスにはなれない
実際のプログラミングでも便利だと思うけどな、Monoidクラス
特に、mappend相当の関数名をいちいち考えたり覚えたりしなくて済むという点において
なんでそうなる。
しかしmappendって名前が失敗
(<>) = mappend を標準ライブラリに入れるって提案があったはずだけどどうなったんだろう
>>96 > いや、型クラスに関しては「機能が弱い」からこそ役に立つ場合がある
「機能が弱い」のではなくて、「機能が重複している」のは何で?
と言いたかった
私には Momoid クラスの機能と MonadPlus の機能が
(今のところ)重複しているように見えます
何というか、Monad の性質 + Monoid の性質 = MonadPlus の性質
という感じがするのです
だから本質的に MonadPlus クラスは必要なく (MonadPlus m) => ... は
(Monad m, Momoid m) => ... とライブラリの設計を変えても、
機能的には何も問題なく働くのではないかと思うのですが、どうでしょう?
(まだ何となくそう考えているだけで、詳しく検証はしていません)
(ただ、機能は重複しても意味が違うのであれば、
2つのクラスはそれぞれ区別すべきだとも思います)
そりゃ単純に理論(圏論)からの要請だろう。 計算機に載せた場合、機能として同じなのかもしれんが、 モノイドは集合の構造だけれど、モナドは圏の構造だから もととなる土台がぜんぜん違う。
単純にMonadPlusの方が古いってだけの理由かもよ
一次資料を持ってこないとなんともいえない。
というか、Functorとモノイドを別々にしている時点でHaskellに数学的整合性を求める方が間違っている
さくさくっと直しちゃえばいいのに 互換性とか言ってそのままなのはそのへんにある世俗のプログラミング言語と同じ 求めてるのは、おれたちにできない事を平然とやってのけるHaskellなんだ
>>104 なんでFunctorとモノイドを別々にすると数学的整合性が問題になるんだよ。
Functorとモノイドは基本関係ないじゃん。
諸君、議論しているね
>>100 (a `mplus` b) >>= k == (a >>= k) `mplus` (b >>= k)とかもMonadPlusの性質としてあるんだけど
これもMonoidとMonadの性質だけから導き出せると思う?
>>108 とりあえず実験として Maybe クラスにそっくりな型を作り、下記のテストにかけたところ、
a b k の全ての組み合わせ(8通り)で True となりました
f :: (Monoid (m a), Monoid (m b), Monad m, Eq (m b)) => m a -> m a -> (a -> m b) -> Bool
f a b k = ((a `mappend` b) >>= k) == ((a >>= k) `mappend` (b >>= k))
>>108 の性質は Monad クラスと MonadPlus クラスのもつ関数の型と、
Monad 則および MonadPlus 則から導かれると思いますが、
Monoid クラスの持つ関数の型は MonadPlus クラスのそれらと形がそっくりですし、
MonadPlus 則と同じ法則を満たすように Monoid クラスのインスタンスを生成すれば、
同じ性質を持つ型が作れると、今のところ私は思っています(まだ証明してはいない)
本来の
>>108 の式の恒等性はどうやって証明するんでしたっけ?
忘れてしまいましたが、mplus 関数を mappend 関数に書き換えても、
同じ証明方法が使えるのではないでしょうか
>>109 ごめんなさい、テスト方法に不備がありまして、False になる場合もありますね
導けないかも知れません
興味があるので改めてお尋ねしますが、
>>108 の式の恒等性はどうやって証明するのでしょうか?
実験をしたり、標準ライブラリのソースを見ていて分かったのですが、 Monoid クラスの mempty 関数と MonadPlus クラスの mzero 関数は ともに同じ意味を持つと思うのですが、 Monoid クラスの mappend 関数と MonadPlus クラスの mplus 関数は 意味が違うような気がします 意味の違いが機能の違いに繋がってきて、どうも代用はできなさそうですね 私の勘違いで、機能の重複は無さそうです どう違うのかはまだ分からないのですが、圏論が関係してくるのでしょうか
仕様書を読みなって。悪いが妄想世界に陥り始めているとしか思えない。
>>111 意味が違うというかMonoid則と>>=に対する分配律を含んだ代数構造に属するmplusと
Monoid則のみの代数構造に属するmappendじゃ全く別物じゃんとしか思わないんだけど
何か引っかかる所ある?
>>114 いや、引っかかる以前に、自分の頭の悪さ、知識のNASAに凹んでます
それらの代数構造をもっとしっかり勉強して出直してきます
とりあえず
>>112 の論文と、
>>113 の言うとおり仕様書をじっくり読んでみます
ようするにa( b>>=c) = ab>>=acを満たすかみたさないかのちがいだろ?
一歩踏み出すと数学地獄とかやっぱHaskellこわい
でも
>>108 は例えばErrorモナドだと成り立たないよね
>>117 抽象代数の初歩ですか、ありがとうございます
地元の図書館には、タイトルに「抽象代数」がある本はこのくらいしかない
・抽象代数学 1973年 秋月康夫/著
・抽象代数幾何学 1991年 永田雅宜/著
あとは代数学、あるいは代数学の歴史やら、数の体系と超準モデルなど
なにかお勧めの本ってあります?
一冊買ってみようと思います
群環体入門が初心者にオススメ。 そのあと永田の可環体論を読むと良い。
>>119 それに関する議論は
>>117 のhaskell wikiのリンク先に書いてあるよ
zeroを持つMonadZeroと分配律を備えるMonadPlus、return aが左零元になるMonadOrに分けようっていう内容だったか
でもそんなことするよかErrorみたいな類はMonadPlusよかControl.Applicative.Alternativeとして使ったほうが意味がはっきりするんじゃねーのとも思う
>>118 自然科学の中では数学が王様だからね
計算機科学も数学様に寄り添っていかないと、科学でなくなっちゃう
初心者を(初歩といえど)数学に誘導するのは止めようぜ きっと帰ってこない
数学という奈落へ続く落とし穴がぼこぼこ空いてるHaskellの道こわい
>>122 ありがとうございます
今図書館に着いたので読んでみます
>>125 私は数学を楽しいと感じる類の人間なので問題ありませんが、
気持ちは分かります
>>125 計算量という概念がある時点でHaskellは数学から大きく乖離している
P neq NP は数学の問題では無いと申すか
もはや数学の問題じゃないな 数学を使った問題ではあるが
CMIに言って来たほうが良いよ ミレニアム懸賞問題に数学じゃない問題が入ってるって
要するに数理や計算機科学は数学ではないと言いたいんでしょ それにしても、大きくかけ離れてるってのは言い過ぎだと思う
C++プログラムからハスケルを呼び出したりする方法あったら教えてください。
>>133 Winだったらコンパイル済みのハスケルプログラムを spawn すればいいじゃん
ふつうにFFIで
あんまり安全安全言ってると、そのうち足元すくわれるぞw 本当に安全なら、どうしてGHCにバグが残ってんだってww
程度問題だよ
>>136 君が問題視している「安全」がどの部分の安全性の事を言ってるのかわからん
数学嫌いないのになんでやってるの? バカじゃん ほら すぐ影響うけるんだな。 さっさと死ねよ影響うけるゴミは まつもとひろゆきの影響か!? 死ね!!
すごくまともな意見だ。
この前python使ったら実行時にtype errorで落ちたわwwww
例外じゃなくて?
Haskellでプログラミングしていると、ときどきびっくりするくらい型エラーがでて、一つ一つエディタで当該箇所を直していく。 そんなことをやっていると、「オレ、よくjavascriptとか型の緩い言語でプログラミングできてたよな」とか思うだけど、 なんかの事情で、またjavascriptとか、pythonとかでプログラミングすると、それはそれでプログラミングできて動くんだよね。 なんか不思議な感じではある。
Haskellってmatlabの替りに使える?
>>144 替りというのは、具体的にはどんなこと?
suuchikeisann simure-syon
とりあえず LAPACK のインターフェース ライブラリはある
そのライブラリっては hmatrix なんだが、 4年近く開発されてて未だにバージョン 0.11.1.0 だ 人気のあるライブラリだそうだから使えることは使えるのだと思うが、 Haskell のライブラリってこんなのばっかだよね いつになったらバージョン1になることやら
バージョン番号の付け方のポリシーなんて人それぞれだろ
そりゃそうだ、人それぞれなのを理解した上で、単に個人的見解を述べているだけ
LOVE IS BLIND
Craftの3rdが出てたので買った 初心者からして関数合成とオフサイドルールの説明が 今まで読んだ中で一番よかった foo x y = x * y まさかこんなのが動くとは思ってなかったさ
Haskellerのみなさん おせーて! 自分はlisperでemacs + slimeというような環境で開発スタイルを作ってる のですが、 Haskellでの一般的な開発スタイルってどのようなものなんでしょう? eclipseFP,vim haskell-mode,emacs+haskell-mode ... いろいろあるようですが、
>>154 「一般的」と言えるような開発環境はまだありません
好きなエディタでプログラミングしてください
個人的には、今のところ Haskell にインテリセンスは必要ないと思ってます
色分けとオートインデントがあれば十分ではないでしょうか
私は emacs + haskell-mode で上記2機能のみ使ってます
>>154 私も、emacs + haskell-modeです。
あと、開発環境というか、ある型がどのクラスのインスタンスか、クラス・メソッドは何かといったことを、インタプリタ(ghci)のコマンドを叩いてよく調べています。
ちょwwww 函数プログラミングの集いに前提知識が追加されてるwwww おれ関数型まったくしらないJava屋の友達連れていこうかと思ってたけどそういうのは 止めた方がいいのかな。
スタートHaskellでさえあの様でしたからな とはいえ今回のは最初の3セクションぐらいは特定の関数型言語の前提知識無しでもそれなりについていけそうな話題だと思う 最初の2つはチュートリアルだしね☆
数学できないゴミが必死に数学好きになって自分は数学が詳しいみたいな かっこつけてる まつもとひろゆき信者は気持ち悪い 数学が苦手ならHaskellやらなければいいじゃん なに?すぐ真似事だよほら ほら どうせMacbookだろ 言語はRuby+Haskell ほらテンプレ テンプレだよ 気持ち悪い死ね 死ねよ?早く死ねよ 真似事 数学苦手ならHaskellやる必要ない 無理に好き気取らなくていいよ 素養がないやつは不幸になるっていってただろ松本ひろゆきが お前らのことだよゴミ ごみだな
Haskell会場で そこらへんのゴミHaskellユーザーに聞いてみたよ 自分「Haskellでなにかつくったことあんですか?」 Haskellユーザー「いえいえ^^; えーと 勉強してるだけかなw」 とかほざいてたよ こういうゴミがわんさかいるんだろうね 知的好奇心(情弱笑) とかほざいちゃって 自分は勉強好きアピールしちゃって ごみみたいだな
>>155 ,154
こめんとありがとさん
色分けオートインデントがあればよさそうですね。
じゃあ、vim でも emacs でも良さそうだ。
vimもemacsもとりあえず環境だけは作ってみたけど
emacs+haskell-mode, screen+ghci/vim+haskell-mode
でもそんなに使い勝手は同じようなもんみたいですね。
Perl忍者生きてたのか
俺もHaskellで書かないけど論文読むのは好きだな そういう言語(笑)
Twitter民の便乗+影響がすげえ気持ち悪い
流行のことおいかけて逆に効率悪いだろあれ
頭悪いんじゃないの
新しい知識無理やり突っ込んでドキュメントあさるざま
まさにごみみたいだね
効率悪いだろ
頭悪い
それ1ヶ月ペースで繰り返してるね
言語とかデータベースとか
http://www.atmarkit.co.jp/news/200902/13/matz.html Matzの影響
気持ち悪い
ここの会場の写真にうつってるやつ全員死ね
次はcofferScriptか!?
まだこんなミーハーごっこやってるんだな!落ち着きがない連中だぜ
さっさと死ぬなりしてくれ!!!
死ね!!!
emacsとかviとかHaskellとか情弱じゃん
効率悪いじゃん
カスタマイズに時間かけてんだろ バカみたいに
死んだほうがいいんじゃないんですかね?楽になりますよ?
まつもとひろゆき 「これから来る言語 Ruby Haskell Erlang APL」 信者気持ち悪い
>>165 なんや 俺にいってるんか、^^; emacs やvimの環境はできてるし
1時間もかからんのに。最近Haskellが流行ってるかどうか知らんよ。
twitterもやってへんし。
お前おもろいから、Scalaスレに出向いて色々言ってこいよ。
興味がある。
Tsuwabuki君がいるスレはここですか
http://twitter.com/#!/iasija tsuwabuki
tsuwabuki
@iasija
pi-calculus, CSP, lambda-calculus, haskell, erlang, HTML5, P2P, 料理作り(プリン・パンなど), 筍, 紅茶, サーバ運用, 自作サーバ, 電子書籍, iPhone, Android, Arduino, gumonji
早く死ねよ情弱
perlいいですよね
そう言いたい気持ちはなんとなくわかる。 誰が悪いわけでもない、根本的に対話の相手としての選択を間違えているのが 問題なんだ。 徒労に終わったのかもしれないけれど、ゼロになることを恐れていちゃ なんにもならないよ。
これからLLからどんどん徒労者がでるな カオスがよりいっそう渦巻くだろうな ssig33やHolyGrailを見てごらん 墜落だよ 墜落したLL 堕ちたLL ssig33は努力したが選ばれなかった 選ばれなかったLL HolyGrailは見栄を張ったあげく嘘で固めてunholyになりさがった
妄想はよそうよ。
判断がおかしい人間が多すぎなんだよ。
Perl忍者にこのスレで反応するな
自分も最初は単なる煽りかと思っていたけれど、ここ最近の反応は 表現を除いて言いたいことのみ考えれば、至ってごく正常なものだ。
ここまで全部自演
にんじゃおもろい
あんなリスキーな表現、実際思ってても使うわけないだろ。
しばらく前に、craft3eの話題が少し出てたけど、 3eと2eでかなり変更があるように思うが、良かった点と悪かった点を 聞ければいいなぁ。
忍者さんのありがたいお答え ↓
忍者に触る奴は全員忍者だぞ
名言だな
忍者化ウィルス
この雰囲気では書きにくいが: Learn You a Haskell for Great Good! って 山本さんのPDFを見てると翻訳されるみたいなことが書かれてたね。
>>184 haskellの入門書が増えるのは大歓迎だな
初心者にアピールするには入門書の数と質だと思う
初心者増やしたいならライブラリのマニュアル日本語化しろよ せめて自分の愛用してる奴くらいは
入門書の翻訳が出るのは喜ばしいのだが、プログラミング初心者向けの入門書が日本人の手で書かれないものか。。。
田中さん暇なんだね
>>189 暇にならないために訳の仕事受けたんじゃね?
色んなプログラミングコンテンストで入賞している世界的に有名な人でもHaskellなんかに精を出した結果がこれか
192 :
デフォルトの名無しさん :2011/07/30(土) 20:28:16.66
話切ってごめん cabal install の途中で設定ファイルを手でエディットして インストール続行するのって 具体的にどうやるの? つまり下記みたいにしたいときのcabalのオプションはどうすればいい? $ cabal insatll (pkg) tar.gzダウン+展開したところでとめる (手でファイルを直す) $ 上のcabal insatllを続行 要は前スレPart14 の94をやりたいんだけどcabalとかHaskellが まだよくわってないもんで。
cabal unpack パッケージ名 でいいんじゃね?
本スレなのになんでこんな悲観的なんだよ 楽しければそれで幸せじゃない
>>179 2eは読んでないし3eも100ページほどしか読んで無いんだけど
2eから3eの変更点は公式サイトに書いてあるよ
http://www.haskellcraft.com/craft3e/Changes.html 良い点として挙げられそうなのは、丁寧な説明、
図表を適度に含んでいる、練習問題が豊富、
プログラム自体の初級者向けの配慮が行き届いてることなど
(4章は『いかにして問題を解くか』 in Haskell)
逆にいえばHaskell中級者以上が読むにはコスパ悪そう
Learn You ... は練習問題がついてないのでCraftと対称的だと思う
196 :
デフォルトの名無しさん :2011/07/30(土) 21:00:39.06
>>194 ネガる人が混じればこうなるけど、スルーして他で盛り上げましょ。:-)
余談だけど2chの忍法帖っていうシステムは Perl忍者をもとにして作られたんだよねこれが Perl忍者の登場時期から、少し立ってから出てたからな
つまり2chはPerl忍者の真似をしたわけだ 負けたんだな ネタや発想的に
199 :
デフォルトの名無しさん :2011/07/30(土) 22:32:55.77
>>193 ありがとう、おかげでパッケージを展開できたよ。
ついでに、展開して編集したパッケージフォルダを指定して
cabal installするにはどうすればいい?
cabal install (xx.cabalのあるPATH\)
でいいと思うんだけど
思うように事態が改善しないんで、ちゃんとPATH指定でinstallできているのか不安に
なってきたので、一応確認させてください
>>199 展開して編集したパッケージの Setup.lhs や *.cabal があるフォルダに入って
"cabal install" とするだけでいいよ
201 :
デフォルトの名無しさん :2011/07/31(日) 01:56:06.70
>>200 どもありがとうです
とりあえずコマンドはあってるっぽいです
ところで
>cabal install
Resolving dependencies...
Configuring glib-0.12.0...
setup.exe: The program pkg-config version >=0.9.0 is required but it could not
be found.
cabal: Error: some packages failed to install:
glib-0.12.0 failed during the configure step. The exception was:
ExitFailure 1
ってなるインストールエラーの対処どなたかわかりますか
環境はWindowsXPなんですが、、
cabal install pkg-config ってやっても
そんなパッケージないって言われるし、、
>>201 pkg-config は Haskell のライブラリじゃなくて、
gcc なんかと一緒に使う exe ファイルのひとつだよ
たとえば gtk のライブラリ内にも入ってて、
gtk2hs をインストールしようとする場合にこれが必要になる
だから、インストールした gtk の bin フォルダへのパスを
環境変数 PATH に追加しておく
コード書けたって社会性ゼロじゃあな…
204 :
デフォルトの名無しさん :2011/07/31(日) 23:53:51.83
Haskell Invitational Handicap開催age
Haskellはプログラムを書くための単なる一つの言語の名前だよ。
206 :
デフォルトの名無しさん :2011/08/01(月) 23:45:48.94
くだらねえことやってんだな ごみみたいな お前が作れるアプリはゴミ そう運命が語ってる
Coqスレの方にはこないの?
Coqスレとかあったのか、行ってくる。
ところで、お前ら、Haskellのどこが好き? オレは、高度に洗練された型システムが好き。 GHC拡張のGADTとか、多引数の型クラスとかも。 オレの中では、副作用がないとか、遅延評価だとかいうのは、じつはあんまり重要じゃない。
>>210 上手く言えないけど、プログラミング言語っぽさが薄い所
ifとかswitch,forを見かけないのが良い
(ifなんて、言語でサポートしてるのに使われない)
分岐をあまり使わないところ。 中括弧大好き言語じゃないところ。
見た目が好きだな。遅延評価あってこその見た目なんでそっちも重要。
ざっと眺めただけだけど、並列って…GHCが出力したコードはマルチスレッドみたいになってるの、これ?
手で並列プログラムを書くのが前提でしょう 自動並列化は人類の夢
豊かな大地は遙かな夢
214みたいなのってマジ好都合だね 情弱 学習というなの情弱 TomitaやHaskell著者の良い餌 「本物のプログラマはHaskellを使う」 っていうフレーズに洗脳 Matzのこれからくる言語の 「Haskell]に洗脳 ばかみたいだな 上位LL使いのHaskell勉強会 「俺もやってないと時代おくれかな 上の人もやってるしHaskellやっとこ」みたいなノリ 今すぐ死んだほうがいいよ お前らみたいな流行に便乗してるキョロハーは
まあお前らがやることは 時間x金x学習価値 に見合わない代物ができあがるんだろう Haskellだとなんだ?演算とか数式? くだらないな ゲームも作れる? インベイダーとかブロック崩しとかでしょ笑わせんなって くだらねええ いい加減くだらなさに築けよ まじで終わってんぞ まあMatzとか上のやつらがHaskellっていってると お前らの脳みそではHaskellが必要ってループされんだけど Haskellのどこが好きとかほざいてる情弱もいるけど 言語仕様+学習についてしか学んでおらず ”知的好奇心(苦笑)”というなのお勉強 最終言い訳はパズルとかほざくのかな いや作るっていうよりかも 学びたいだけみたいな ごみだな
お前ら洗脳されてて気持ち悪い 目的を果たすというより 言語をお勉強してる感じだな 新しい言語が出るたびにそれらを繰り返すんだろ? Matzがなんか会議とかで 新言語の紹介したら それに食いつくんだろ Haskellやめちゃうかな 絶対やめそうだね その新しい言語 全部Matzや上のLL使いの真似事 お前ら本当にうざい 書き込みみてるとぶっ○したくなるよ
そう思ってるけど言う訳がない。 フォロー解除くらうよ。 たしかに、洗脳されてる人多いな。
学ぶ理由なんだけど、勉強会やカンファレンスとかで 話のネタに困らないように、Haskellやってるわけで >>目的を果たすというより いや話のネタw なんか港で流行ってるみたいなので
また 胡散臭い方向にスレを変えてるな。 うざいと言いながらスレを見に来る神経が理解できないな。 なんなの?この人
>>222 話のネタ、共感っていうのも一理あるね。
TSPとか川渡り問題解く方が現実的な使い方だよね
役に立つか立たないかとかより、世の中に無いから作ったってことだけに価値があるのだろうな。
バカが沸いてるな。 金融系とかでいくらでも使われてるという話が出てきているのに 「アーアー聞こえないー」とかw 川渡り問題みたいなのはPrologのほうが向いてるし、 TSPは計算量で解くならC言語とアセンブラ併用、理論的なアプローチなら まずは紙と鉛筆だろ。
早稲田の研究所でグレインがどうとかの自動並列化の研究やってたな、たしか あれどうなったんだろう
231 :
デフォルトの名無しさん :2011/08/04(木) 13:14:09.71
230で使いそうな、glossは2dグラフィックライブラリ(opengl系) > think Haskell is the best environment to learn and practice abstract patterns of thinking これだけなら、schemeもいいんだけど > that will be useful in mathematics, logic, and a clear understanding of the world. が意識にあるんだろうな。
わざわざ、やる価値もない言語だからなHaskell やってる人は相当頭がいいっていうことか、そうかそうか って言っても周りを見ると、WEB土方しかいない訳でw
Haskellが実際に役に立ったっていう事例はないな。 よく、ほかの言語でもあるが、○○○で使われている「だから凄い」程度でしかない。 本質的に使うとなると実用性がない言語、2ch書いてるような輩が使うまでもない。
金融系って、得体の知れない浮動小数点型の変数が 何を表すものかの型がないと怖いとか、そういう理由なのかな?
>>233 バカとハサミは使いようなわけで、haskellを手にしても使い道のない人間の方が多いんだろ
○○で使われてるなら、pugsとか、xmonadじゃねーの?
「本質的」来ましたーw
>>235 だいたい、pugasみたいに2chで低レベルな部分を実装するやつがいるとは思えない。
まして、騒いでるITプロやTwitter民なども、使い道が見合ってない連中ばっかりだろ。
なんというか煙い。
まず凄い人間がいてたまたま彼がしっくり来ると感じた言語がHaskellなだけであって lisp系同様にHaskellが凄いんじゃなくてつかってる奴が凄いだけ
>>238 なんていうのかな。。。 抽象化を上手にできる人ならlisp系やhaskell
にハマるんだと思うよ。アルゴリズムをそのままガシガシ書いている
感じになってくるからね。
でも、抽象化が不得意な人にとって見れば、ただの複雑怪奇な難解な
言語ということなんでしょう。
C++でも抽象化できるけど、あちらは抽象化すればするほど、すっきり
するんじゃなくて、泥沼に入ってしまう。
Haskell見てて思うのは、ダイナミックプログラミングには強い という印象だな。 また、極論を振りかざすだけの人は残念だけどHaskellには向いていないと思う。 そういった人が今数人あらわれているけど、さっさと自分に見合った言語を みつけてそこで、腕を磨いてください。
tanakh tanakh 2011-07-17 16:19:51 今年勉強する言語をまだ決めてない人、Haskelはどうですか? #start_haskell eielh 2011-07-13 02:11:27 Haskellは勉強しとくだけで使わなくても利益がありまくりな気がしてきました。 otf otf 2011-07-05 10:13:52 Haskellか、Coqか、Agdaか、F#か、WordPressか、Flashのどれかを勉強会でやりたいです! twittarsan twittarsan 2011-07-10 23:16:54 haskell使うメリットってなんだろうね
otf含めこういうクズな連中がHaskellをやる理由が全く理解できない。 ブラウザでもあるけど ガキってブラウザの名前沢山しってるよな、使ったり あーいう感じかな。言語を沢山使ってます的な。
243 :
Perl忍者 :2011/08/04(木) 13:59:54.94
>>242 激しく同意
どう見ても 頭悪そうなツイートや身なり自己紹介をしてくせに
Haskellやるとか 本当におかしいと思うな
どうしたの!?ってかんじだよ
明らか研究職じゃないのに
ニートやアニオタのクソが使ってるとかわからない
242のいうとおりだ
244 :
Perl忍者 :2011/08/04(木) 14:01:36.95
Perlやるやつは高レベルだな Haskellはバカアホ+研究職気取りしかやらない 日本人で使ってるやつの99%がにわか にわか バカを隠すための言語=Haskell よってPerlの勝ち
245 :
242 :2011/08/04(木) 14:02:59.80
はい
c++でstlつかうのって凄く面倒だし コーディング作法やメモリの解法なんかでも無駄に行数のびるし 新規にプログラミングを始めるなら、手続き型は情弱言語だっていってみよう ふつうに考えて高階関数ある言語の方が問題解くのに便利だよね
248 :
Perl忍者 :2011/08/04(木) 14:16:07.87
っでお前RSSとかページ取得とか そういうのHaskellでやるの? バカだな情弱だな 死ね?早く死ね ゲームもHaskellか? まあ作れたとしてもインベイダーぐらい 調べたらその程度のゴミゲーム グライディウスとかそんなもんだよよな さささとしね
249 :
Perl忍者 :2011/08/04(木) 14:17:17.45
おれさ ここのカスどもとか ツイッターでHaskellやってるごみと すかいぷしたんだけど 話したんだよクソだったよ Haskellやってるだけみたいな連中 何も作ってない何もできない 全員それだったゴミ20人そうだったな ゴミしかいねーんだよごみしか 消えろ
250 :
Perl忍者 :2011/08/04(木) 14:18:40.48
死ねよ鼻デカ不細工
>>忍者 そこまでHaskellを嫌うのにここに来て毒をまくのはなぜ?知りたい。 もしよかったら、忍者がHaskellと出会った時から、病的に嫌うようになった 原因を探ろうじゃないか?と思うので、過去から今までのHaskellとの 関係を書いておくれ、Matzもかなり嫌ってるようだけど、こちらはperlの 敵とみなしてるから?danさんが草葉の陰で泣いてるぞ
tanakahと忍者の朝生とか見てみたい
>>251 お前みたいなのがかまってくれるからだろ
いいからほっとけよ
>>253 この人みてると、周りがいようといまいと関係ない人に見えるよ。かまって
ちゃんと言うより、ストレスのはけ口として使ってるだけだろうから。
概して狂人になったヒトというのは同じなんだけど、周りから良い影響は
まず与えられない。最終的に病院にいくしかなくなる。リアルの付き合いが
ある人たちくらいしか制御できないと思うかな。
幸い、この人専ブラならアボーンできるというのはいいことかも。でも
自演の匂いも少しあるが。
PS
忍者専用のスレがあるようだから、そっちに移動してもらうほうがいいな。
そういや、Perl 6って、まともなOOP言語になるらしいね。 移行できなくって、イライラしている人がいるのかしら。
pugsの実装を作ったのってhaskellだよね ってか、RSS読んだり、webアプリを作るのがプログラミングだとでも思ってんのかな?w
>>251 Haskell以外のとこでも、同じ様な文書いてるからスクリプトだろ。
他人の名前に寄り掛かるなクズ
>>251 ああ?
新しい言語がうざい
テリトリーを害される気分
Rubyが有名じゃなくてPerlより使われなかったらむかついてない
後からできたくせしてしゃしゃりやがってよ
うぜえんだよマジで そのせいでMatzやその信者たちも憎く見えるこ、ろしたいと思う
「Rubyを全面的に採用した東京ガスの地震防災システムの紹介」
こういうのなウザいんだよ
Rubyが存在するだけでPerlの立場がなくなる 勉強してきたって勢力で押されて
「え?Perl?なんでRubyじゃないの?」 「いまどきRuby Perlはオワコン」とかな いわれるんだよ
腹立たしく感じる 憎い ろこしたい
Rubyが新しく使われる 知名度があがるPerlはもうだめになる気がして名
しかもHaskellも最近すごいなんか言われてるだろ?
悔しいんだよ Perl使いが消える気がして
だから新しい言語がでるたびにPerlが追いやられる感じがして憎い
このスレのやつが憎い Haskellやめて欲しい 死ね
一見やっていることはおかしいはずなのに、 よくよく考えると正常なことをやっている。
言語に嫉妬w
複数のプログラミング言語を駆使してる者なんて、世界人口の1%も居ないのに、その中でのシェアw
理由を話してくれてありがとう>忍者 テキスト関係の処理はまだ速いしPerlに自信を持ってればいいよ。 たぶんPerlを食ってる言語は世界的には隣のPだとは思う。Haskell とは得意分野も違うから、そんなに危機感を持たなくていいよ。 10年くらい前の勢いは難しいかもしれないけど、ある一定数は 消えずに残る言語だと思うよ。
>>263 そんなに少ないの? 意外。(俺が世間知らずなだけかも)
抽象化の腕を磨くには大変良い言語だし、他の言語の腕を上げる
のにもフィードバックできると考えとる。
うん
ありがとう
ありがとうwwwwwwwwwwwwwwwwwwwwwwwwwww
おかしな人が居付いてるね。おまいにはF-BASICあたりがお似合いだよ。Haskellとか無理だから
忍者さんにdisられたら一流
Haskellスレ住民とは思えない人が構っちゃってるからたちが悪い
>>268 Perl忍者はHaskellやってないんだけど
忍者に触る奴は全員忍者だぞ
まぁ、忍者居ていいけど スレ伸びるから、
忍者弄りとcabalコマンドが主な話題
記憶がどんどん書き換えられていく気がするのだけど、気のせいなんだろう。
健忘の術
>>276 記憶領域を上書きするような言語を使ってはいけません。
Haskell 自習してるんだけど、参照型 IORef の動作がよくわからない。 例えば次のコードを走らせたとき、関数 writeIORef の引数 r の中身が変わってる。 引数の値を変えるなんて Haskell でできるの? import Data.IORef main = do r <- newIORef 0 x <- readIORef r print x writeIORef r 1 x <- readIORef r print x そもそも、こういうのって関数の副作用とは言わないの? 俺は、純粋関数とは数学的な関数の挙動と同じにしようって 思想だと理解していたんだが、もっとゆるいんかな。
>>279 r自体の値は変わっていない
rの値であるIORef型の値が指す先が変わっているだけ
ghciってctags,etagsに対応してるんだね。
ライフゲームをCUDAで書いてて思ったんだが 関数型でデータ並列とかめちゃくちゃ書きにくくね? つかライフゲーム自体書きにくい。
283 :
279 :2011/08/06(土) 01:46:32.29
>>280 コンパイル後の機械語での動作はそうなんだろうけど,
haskell の文法上ではポインターなんて概念はないでしょ
IORef 型の値を,Haskell の意味論の中で理解しようとしたとき
どう考えればいいのかわからない.
>>282 お前うざいんだが
車輪の再発明
ライフゲームなんてすでに出てんだが
こういうとほとんどのやつがこう返すんだが
「仕組みを理解するためであって、車輪の再発明は関係ない。」
ばっかみてーだが
あほだな
どうせ人生ずっと車輪の再発明+勉強だろ
死ね情弱
>>279 IOの中の純粋性なんてゆるゆる。
むしろ副作用あるかもよっていうマーク。
IORefに関してはファイル操作に置き換えて考えてみたら?
Haskellって驚きもなにもないよな ごみみたい 自分は難しいことやってるって思ってるゴミが多い 作れるものはそんなpugsみたいなすごいものじゃなくてごみばっかり すごいやつに任せればいいじゃん まして2chに書いてるゴミなんてそんなサンプル程度だろ
KLabもごみみたいなことやってんだな 車輪の再発明 Haskellで将棋のAIとか くだらねえ 何も生み出せないよおもしろいもの 依存のゲームを、俺つええカッケー言語(Haskellなど)で書き換えたものばっかり LLのやってることって浅はかなんだよね コーディングとかすげーめんどくさくやってるけど 得られるものがごみくずだし UE3とかUnityでゲーム作ってるやつのほうが完成したもの含めすべてにおいてすばらしいと思うわ いくらHaskellで小難しい論理とかモナドとかほざいても 所詮ゲーム業界のやつらが作ったゲームと比べたら作品においてすべてがごみなんだよね 作品を求めるっていうよりかは、プログラミング!!プログラミング!! プログラミングしてる自分すげー!!によってるごみばっかりだしな 何事もコーティング 完成した最寄かもコーディング ごみみたいだな
っ出お前らHaskellでなにつくったことあるの? っていうとほとんど学習 作ったものはただのゴミみたいな計算機とかよくてゲームのシューティングや ライフゲーム+オセロとかだろわらわせんなって 知的好奇心(笑い) 世の中に無駄なことはひとつもない(笑い) とかいっちゃってお茶濁しちゃうからなあ やっぱりゴミだな
車輪の再発明やってるやつがクズに見える 代用することを考えない 自己流(笑) オリジナル(笑)自己満足(笑) まさにクズだな
忍者はCoqとかいざぼーとかNurPRL叩かないの?
ブラウザ厨と同じだよ その大人版 気持ち悪いね ガキがたくさん言語ほざくのと同じ 自己紹介にたくさん言語かいちゃうのとおなじ ごみみたいだな くそアピール
いまさらだけど煽りみたいな批判するときはPerl忍者ってつけることを知った まじイイネ
>>283 いや機械語の話はしてない。あくまでHaskell上で、rの値は不変
>IORef 型の値を,Haskell の意味論の中で理解しようとしたとき
>どう考えればいいのかわからない.
IORefは例えばStringだと思って問題ない
命令「newIORef 0」は、ユニークな文字列を生成し、グローバルなテーブルに0とともに登録して、それを返す
「readIORef r」は、文字列rをテーブルから検索し、それに関連付けられている値を取得する
「writeIORef r 1」は、テーブル上で文字列rと結び付けられている値を1で置き換える
もちろん、これらの操作を通じてStringの値は変わらない
もちろん実際の実装はテーブル検索なんてまわりくどいことはしてない。rの実体は一個のポインタ
>>279 IORef自体が変わるんじゃなくて、IORefが指す先のメモリがまるごと置き換わる感じ。
import Data.Array
myNewIORef val (mem,used) = (used,(mem // [(used,val)],used+1))
myReadIORef r (mem,used) = (mem ! r,(mem,used))
myWriteIORef r val (mem,used) = ((),(mem // [(r,val)],used))
main = do
let state0 = (listArray (0,9) $ replicate 10 0,0)
let (r,state1) = myNewIORef 0 state0
let (x,state2) = myReadIORef r state1
print x
let (_,state3) = myWriteIORef r 1 state2
let (x,state4) = myReadIORef r state3
print x
先ほどのプログラムがこのように自動的に書き換えられていると考えれば副作用は必要ない。
297 :
296 :2011/08/06(土) 11:41:19.48
被ってしまった・・・ リロードしてから書き込むべきだった。
>>279 , 283
> こういうのって関数の副作用とは言わないの?
少なくとも、それは関数の副作用ではない。
main = do
r <- newIORef 0
x <- readIORef r
print x
writeIORef r 1
x <- readIORef r
print x
関数の副作用っていうのは、関数適用、式の評価のときに副作用が生じるということ。
rの型は IORef Integer、xの型はIntegerなのに、
newIORef 0の型はIO (IORef Integer)、readIORef rの型はIO Integer、print xとwriteIORef r 1の型はIO ()で、
そのmainに出ているどの関数適用においても、rやxの型は現われないよね。
だから、rやxは少なくとも関数適用、式の評価によって生み出された値ではないわけ。
-- rやxはHaskellの意味論上、そもそも値にバインドされていない記号、と言いたいけど、それが正しいという自信はない…
モナドを一言で言うと「本末転倒」
目覚ませよお前ら
301 :
279 :2011/08/06(土) 13:51:52.86
あー,そうか writeIORef による状態変化は戻り値の IO () に伝搬してるんだ. IORef には参照先の状態も含まれてると思い込んでた. 実際は FilePath と同じように,ただのラベルなのか
目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
だれだよそいつ そんなやつの乗せるな 早く死ね!!!!!! 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら 目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら目覚ませよお前ら
専門卒の嫉妬が酷いな 量産体制に入ったウェブアプリに目新しいものなんてないだろ いい加減、perlが時代遅れでjavaに負けたって認めればいいのに
Javaも10年遅い言語だよね ブルーカラーのための言語
別人だろ ソースっていっても、なりすましの疑いもあるしな
そいつによく間違われるけどな ああ、無視してくれない? いいよ、反応しなくて さっさと死ねよ鼻でか不細工 いちいち反応するお前らはクズだな 無視してくれ お前らをグズ発言して 目をさまようとさせてるだけだから
311 :
デフォルトの名無しさん :2011/08/07(日) 02:35:56.62
もうuyってコテは使わないの?鼻でか不細工
モナドを一言で言うと、自分の手さえ汚さなければ何をやってもいいと思っている自己中
自己関手の圏のモノイド対象 と大差無いぐらいわかりにくい例えだな 山本さんだかが言っていたprogramable semicoronというのが喩えの中では一番分かりやすいと思う
解ってないんだな山本さん
「モナド?あれでしょ副作用隠蔽するんでしょ?詐欺だよね〜」 みたいな、モナドと言えばIOモナドしか知らない人と それ以外の人では話がかみ合うはずも無い
モナドって暗黙のうちに値を渡していく能力が本質で どのモナドも副作用って言われればそうだなあと思う
実装に副作用はないが使う側から見れば副作用
教育コストが指数関数的に増大するという重大な副作用がある
>>319 手続き型言語の事だよ。それ
関数型言語はむしろ教育コスト低いよ
ははは
分かった気になるという点では低いな
>>320 日本語のテキストの量だけでも1対1000くらいで関数型のテキストの方が少ないと思うんだけど、これってテキスト書くレベルの人を教育するコストすら物凄く高いということだと思うけど
>>322 マジレスすると、手続き型言語では分かった気になる事すら難しい
それは遅延評価だから モノ書けるレベルの人に、「書いて」ってお願いするまで テキストが出力されない
>>323 それは単にお金にならないだけ
学ぶ機会が少ないだけ
>>324 手続き型なら分かる必要すらないということか…
たしかに、会社じゃ何のプロシージャか分からないのにプログラミングしてるのが普通だし
手続き型言語はメモリモナドがデフォルトな関数型言語
ぶっちゃげ、現時点では、Haskellの学習はかなり高コストだと思う。 本来は、IOモナドのdo記法は副作用を使うための特別なシンタックス、という認識でも支障ないと思うし、 その使い方はなんとなくdo記法を使っていればなんとなく理解できるとは思うんだけど、 現時点ではどうしても「モナドって何?」「圏論ってなに?」ってことを勉強したくなって、 よほど才能あるか、数学が得意でないかぎりかなりの苦闘になる。 でも、べつにいいじゃん。 そこで苦しんだだけの見返りはちゃんとあるよ。
言語仕様で直接副作用を扱わなくてもよくなるという、 アプリケーションプログラマには何のメリットもない見返りな。
だったら「アプリケーションプログラマ」=「おまえ」は使わなければいいだけの話だよ。
コストが高いならば下げるよりほかない。 過酷な山登りに喩えられるようなコスト構造よりは、せいぜい大学受験ぐらい に喩えられるコスト構造にしないと理論的内容も含めた普及はない。 一般的に好まれるのはローコストでハイリターンなものだからね。
残念ながら匿名掲示板でどんな高尚な理屈を垂れたところで、 Haskellに(たとえば)MLのレコード型みたいに副作用が使えるものとか、 そういったものが入ることはありえません。 ローコストでハイリターンが好きなら一生PHPでもなんでも使ってるのが あなたにとって一番の幸せだと思います。多分。
正直IOモナドは副作用より自然で直感的だと思う
>>333 なので、コストを下げる努力はしない、ということか?
リストモナドだけは未だに気持ち悪い なんでだろう
>>337 そういう強がりは利用者がまだ10人とかいう時に言っておこうねw
339 :
LLピザ :2011/08/07(日) 17:13:47.51
tokuhirom,yusukebeとかHaskellやってないしな なのにすごい お前らの脳みそ=Haskellやってる=すごい らしいな だけどバカだな お前らクズじゃねーかよ みたらTsuwabukiみたいな、へなちょこばっかりwwwwwwwwww ゴミクズしかいねえのな
>>338 大学以外で実務で使ってそれで金もらってる人は日本で10人もいないよ
関数型は学者の頭の中の思考形式でプログラムできる(気がする)のが最大のウリだからな
リリース予定って遅れる為にあるの?
>>330 なんで? Parsecをdo記法で書けるのはすげー便利だが。
もともとWebアプリケーション用としてではなく、不完全なHTMLで書かれていて、かつ仕様も予告なくころころ変わるWebページを定点観測していたときには、すげー便利だったParsec。
Haskellがなければ、あんなこと二度としようとは思わん(それをやるだけで給料もらえるならやるけど)。
344 :
LLピザ :2011/08/07(日) 17:50:59.55
345 :
LLピザ :2011/08/07(日) 17:52:19.13
ツイッターみてきたけど雑魚が使ってたぞHaskell ゴミだったな まぁ使っていいのはMacだと木下、荻原、Matzあたりだろ あとはゴミだしなMac使いは そもそも2chに書き込んでるゴミが使ってもただの個人学習にしかすぎない
7月予定だったplatformまだー 待ちくたびれたー
Leksahってソース整形はできないの?
>>343 普通にコンビネータ使える言語ならどうにでもならねえか、それ?
>>348 実際に手続き型言語でパーサコンビネータを組んでみたけど、Parsecほど使いやすくはならなかったよ。
とくに順次処理をして自分の使いたい型のデータを返すのが、面倒な問題を引き起こす。
例えば、"000 - 000"という文字列を解析して、整数のペアを返したい。
厳密にコンビネータだけ使うなら、例えば seq(seq(number, string(" - ")), number)みたいなやり方をするわけだけど、
これは読みにくいし、せいぜい配列かリストを返すことになって自由な型のデータを返せない
他方、
x = number();
string(" - ")();
y = number();
return (x, y)
みたいにパーサーを実際に副作用させる構文で、自由な型のデータを返すことはできるけど、
最後の()を良く忘れるが必ずしも型検査に引っかからず、バグが見つけにくかった。
まぁ、実際に試してみれば分かると思うけど。
Boost.Spirit.Qiとかか
>>349 scalaのコンビネータライブラリなら
number~"-"~number ^^{case (x,_,y) => (x,y)}
だな
>>351 do
x <- number
string " - "
y <- number
return (x, y)
のほうが読みやすくない?
これくらいなら大した差はないかもしれないけど、5〜6要素以上を抽出することになったら、そういう書き方だと面倒くさすぎるだろう。
そもそも、
>>330 の
> 言語仕様で直接副作用を扱わなくてもよくなる
> アプリケーションプログラマには何のメリットもない見返りな
というのと、
>>343 の
> なんで? Parsecをdo記法で書けるのはすげー便利だが
が、どう繋がっているのか分からない
だれか解説してくれたら助かる
>>343 のは言語仕様で直接副作用を扱うのかどうかというレベルじゃなくて、
プログラムのレイアウトのレベルの問題だと思うのだが
>>353 俺も良く分からない。do記法って構文糖でしょ? 副作用を持つ言語でも同じことできるよね?
>>349 もあんまピント合ってない気がする。seqとかは可変長引数とかで見やすくなるし、
演算子を定義しても良い。
>>351 みたいに。Haskell以外の言語でも問題なくできる部分。
自分で実装した時は、むしろ参照透明性とか遅延評価とかが大きいと思ったけどな。
正格評価だと迂闊にオブジェクトを作ると性能に響くし、かといって副作用で更新すると、
tryとかでオブジェクトをコピーしないといけない場面が出てきて、これまた性能に響く。
効率良く動作するものをHaskellやClean以外で作るのは地味にキツいんじゃないかと感じた。
モナドが組込みでなくたって、lazyな言語なら全く同じことができるよな。
「モナド」が何を指すのかによる do記法のことなら(lispのようなマクロが無い言語では)組み込みじゃないと無理 あとlazyは関係が無い気がする。OCamlでもモナド使うし
モナド内包表記って何に使うの?
>>353 >>343 の「なんで?」は、
>>329 でいう「見返り」がなぜ、
>>330 の「言語仕様で直接副作用を扱わなくてもよくなるアプリケーションプログラマには何のメリットもない見返り」と断定できるのか、断定できないでしょ、という修辞的疑問。
で、「Parsecをdo記法で書けるのはすげー便利だが」と次の段落で、アプリケーションプログラマにとってメリットのある見返りを例示する、というのが意図した文章構成。
> プログラムのレイアウトのレベルの問題だと思うのだが
そうだね。でも、do記法は実際にアプリケーションプログラマにとって便利だよね。
その便利な記法を、さまざまな型・用途に柔軟に使えるようにしているのが、HaskellのMonadクラス。
>>354 > 演算子を定義しても良い。
>>351 みたいに。
scala知らないからテキトーだが、
>>351 の例から推して量るに、例えば 「2001-01-03 10:10」っていうようなフォーマットを解析するのに
number ~ "-" ~ number ~ "-" ~ number ~ " " ~ number ~ ":" ~ number ^^ { case (y,_,m,_d,_h,_,m) => (y,m,d,h,m) }
って書くのかな。
そういう一回リストや配列で返すことが強制されるよりも
do
y <- number
string "-"
m <- number
string "-"
d <- number
string " "
h <- number
string ":"
m <- number
return (y,m,d,h,m)
って書くほうが、読みやすく、仕様変更に応じて手を加えるのにミスしにくい、とオレは思う。
しかし、そうは思わないという人が多いのであれば、これ以上はなんとも。
>>358 何か直交する色んなことを一緒くたに混ぜてる気がするなー。
とりあえず、モナドの利点としてパーサコンビネータを出したのは分かった。(だよね?)
でも、do記法の便利さとモナドの便利さってレイヤーが違うよね?
切り分けないから「?」ってなるんだよ。
>>356 が触れているように、Lispのようなメタプログラミングができたり、
>>359 が紹介しているような構文拡張ができるプリプロセッサがあれば、
do記法はHaskell以外でも実現できる。
あと余談だけど、do記法については、
ttp://d.hatena.ne.jp/kazu-yamamoto/20101211/1292021817 って意見もある。逆の立場の意見も勿論あるから、これは人によると思う。
自分はdo記法の方が読みやすいと感じる。
モナドって関数の合成をリーダビリティ高くやる方法見つけましたってだけじゃないの?
もなどなど〜な〜 ど〜な〜
>>358 >>329 は「そこで苦しんだだけの見返り」といってる
現時点ではどうしても圏論などとの繋がりが気になって勉強したくなるが、
でも数学が得意でないかぎりかなりの苦闘するよね、というのが「苦しみ」
(もっと深く知りたくて)圏論を勉強しようとして苦闘しても、べつにいいでしょ
苦闘しただけの見返りはあるよ、と言っている
>>329 の言う見返りは、圏論などを学んで「深く関わって」苦闘した上での見返りなんだよ
使い方自体は、do記法を使っていればなんとなく理解できるとも言ってるし
それを受けた
>>330 も
>>329 の言いたい事をちゃんと分かった上で、
「圏論などを学んでそこまで深く関わって」得られた見返りは、
アプリケーションプログラマにとっては特にメリットもないよね、と言ってる
使い方を理解すればアプリケーションプログラマには十分だということだろう
で、問題の
>>343 だ
それはべつに圏論などを学んで深く関わったからこそ得られた知識
という訳ではないだろう
どちらかと言うと、それは「使い方を理解すれば」の方ではないか?
何による見返りについて話しているのか、が前レスと異なっているように思える
このズレが違和感を覚える
モナドが関数の合成であるとは限らないでしょう WriterとかMaybeとか色々あるでしょう
あ、ちなみにScalaでもこんな風に書けるよ for { y <- number _ <- string("-") m <- number _ <- string("-") d <- number _ <- string(" ") h <- number _ <- string(":") m <- number } yield (y,m,d,h,m)
scalaのforがhaskellのdoに見えてきた、、、
ScalaはHaskellだったのか!
Scala is NOT Haskell but a child of Haskell.
7.2 のghciに新たにできた? :set +m はよさそうね。replの 使い勝手が少し良くなりそう。
プログラミングHaskellのp.41に add x y = x + y と add = \x -> (\y -> x+y) は同等と書かれているのですが、 前者は add :: Num a => a -> a -> a 後者は add :: Integer -> Integer -> Integer になり、後者は小数の加算ができません。 どこからIntegerだと型推論されるのでしょうか? GHC7.0.3もHugsも同じようです。
Monomorphism restriction
>>375 ほんとだ、、、
型かけばちゃんとNumになるのに、、、
>>376 ,
>>377 ありがとうございます。
4.5.5にそのままの例が載っていますね。
今の自分にはかなり難しいので、
もうちょっと理解が進んでからよく読み直してみたいと思います。
ところで、
{-# LANGUAGE NoMonomorphismRestriction #-}
default ()
をすると、p.18の練習問題にある
n = a `div` length xs
where
a = 10
xs = [1,2,3,4,5]
がエラーになってしまいます。
型推論に頼るのはなかなか難しいものですね。
> 379 最小の再現コードは n = length [1,2,3,4,5] で、これもさっきのレポートのlet x = read "..." in show xの例と同じです。 defaultingをoffにしているので、[1,2,3,4,5] :: Num a => [a]となり、 length :: [a] -> Intなので、length [1,2,3,4,5] :: Num a => Intと推論されるので これは曖昧な型であると型検査で弾かれます。 解決策は型エラーのメッセージにも出ているように、型シグニチャを書いてやれば OKです。 n = length ([1,2,3,4,5] :: [Integer])
基本的にはdefaultingが云々とか気にせず、自分の想定している型を 書くようにするのが嵌らないし、良いお作法だと思いますよ。
何度もありがとうございます。 型シグネチャをつける有用性がよくわかります。 型が曖昧というのは、length が使われる環境から 1 とか 2 の型が確定できな いということでしょうか。 で、数値に限っては、こういう場合にデフォルトがとれるようにしてあると。 ためしに、 s = show 1 をやってみるとエラーになるのも、たぶん同じ理由ですね。 ありがとうございました。
整数を扱うとき、IntにするかIntegerにするかいつも迷う。 (大きさはIntで十分。効率も問わない場合) どちらが基本(多くのライブラリ関数が想定してる)のだろう?
余程大きな数を扱う可能性が捨てきれないとき以外は普通は Int じゃないか いくら Integer の処理速度が上がってきているとはいえ、 メモリ量も処理速度も Int の方がまだまだ圧倒的に効率いいよね Hoogle でざっと見てみたところ、日付や時間を扱う関数では Integer をよく使うね それほど真面目に調べてはいないけど、それくらいしか見当たらないような気がする
これだけ型安全に拘った型システムで、 実行効率を犠牲にしてでも遅延評価による計算可能性に拘った言語で、 わざわざ有限桁の整数型つかうのかよw
>>385 そのようなしっかりした根拠とポリシーを持っているのなら、
あなたは無限桁の整数型を使えばいいだけの話だよ
人の意見に無理に従う必要は無い
まだ、発展途上なんですよ
お前らまだこんな無駄なことやってんのか かわいそう 哀れ
>>387 発展途上ったって、bignumぐらい有限桁とシームレスに使わせろよ。
LISP以下だぞwww
LISP使ってろって
実際Integerは遅いんだから仕方ない Integerを多用してるtimeライブラリがボトルネックになることがあるくらい
なんで遅いの? 他の言語だと同じような遅さはあるの? それともHaskellの実装が腐ってるの?
LISP使ってろって
なんで、ってBigNumだからとしか言いようがない 他の言語でもBigNumなら似たようなもん
Int作ったやつ頭おかしいだろ まともに整数を実装できてないデータ型なんだからUnsafeIntにすべき 危険なのにもかかわらずunsafeが付いていないのはおかしい headやlastと同じくらい消えるべき存在
>>394 んなこたねえよ。
今時の処理系なら小さい数字のパフォーマンスはほとんど落ちない。
遅延評価のコストに比べりゃ誤差の範囲内だ。
と、数字も出さずに語るのが関数型スレの特徴です。
自分で比較実験すれば容易に分かることをいちいち提示しないのが関数型スレ
そんな簡単なことも面倒がってやらない
>>397 のような奴は消えろ
いやどう考えても
>>396 は間違ってる
遅延評価のコストは小手先の最適化でかなり回避できるけど、
Integerを使ってしまったら局所的にいじってもどうにもならない
fixnumの範囲の値はfixnumで扱って、bignumの範囲の値はbignumで扱い、 それをひとつの型で隠蔽するっていう、最近ではごく普通に使われる手法の話じゃないの?
じゃあ、それでも遅いってことは、
>>392 の言う所の後者ということで、
プリミティブなインストラクションを生成しないとかで、GHCの最適化性能が良くないってこと?
まさか多倍長整数の計算をしてて遅いとか言ってることはないと思うけど、どうなんだろう。
間接参照を剥がすのが遅い
なるほど。それじゃあ、現状で複数の型があるのは現実的な選択なわけだ。
個人的には
>>395 の言うようにUnsafeIntとかの方が良いと思うけど、互換性の問題があるだろうし。
教えてくれてありがとう。
>>395 > まともに整数を実装できてないデータ型なんだから「Unsafe」Intにすべき
Haskell における Unsafe というのは、そういう意味なの?
理想的にはlengthとか!!とかもIntegerベースにしたいところだろうが、 まだきついか。
>>406 Data.List.genericLength
Data.List.genericIndex
理想主義者のためだけに用意された関数だ、受け取れ
Integerにしてもコンパイルすると32bitまたは64bit値として扱われるとかそういうのならおk むしろIntegerどころか0とSuccが定義されてるなんらかのクラスのインスタンスならなんでもおkみたいなぐらい一般化してくrくr どうせ最終的にAgdaとHaskellはシンクロする運命なんだし
>>409 > Integerにしてもコンパイルすると32bitまたは64bit値として扱われるとかそういうのならおk
その Integer 型の値が32bitまたは64bit値に収まる範囲しか使っていないのかどうか、
コンパイル時にどうやって調べるの?
正しさの検証をしやすいのは圧倒的にIntegerだねえ
Agdaとシンクロして自動証明のテクニックでどうにかするようになればいい
ルビを最適化した天才ティーンネイジャー呼んで最適化してもらえよ
いくら i++ しても 0x7fffffff に達することはないと仮定したお気楽コード書いてる奴なんだろうな
length :: forall a n. Integral n => [a] -> n let unmo = length xs in (hoge :: Int) + unmo こんな感じで一般化されたものを使用される部分で明示的に効率重視の型に制限してやるとコンパイル時に最適化可能だから その辺のアプローチでいくのが現実的かな?common lispのtheみたいなものか でも行き着く先は依存型を使って、コンパイラが自動n∈[minBound (a:=Int), maxBound(a:=Int)]的な命題の証明を試みて それが通ればIntに具体化するみたいな機構になると思う
>>415 それを証明出来るケースなんて、そう多くないぞ。
win版のhaskellってメモリ簡約使ってないの? linux x86-64版だと時間かかる処理でも一回実行すれば、メモリ簡約が効いて速くなるのに、winだと速くならん 同じ処理時間が掛かってる
>>418 Linuxでメモリ簡約が効いていると判断した手段を用いて、Windowsでメモリ簡約が効いているかどうかを確かめてみる
>>419 いや、だから使って見て明らかに効いてないんよ
>>418 メモリ簡約ってのは初めて聞いた言葉だけど、メモ化のこと?
問題をもう少し絞り込みたいんだけど、
とりあえずコア言語レベルではどちらのOSでコンパイルしても同じなの?
それを再現できる可能な限り小さいプログラムのソースは提示できる?
>>418 あと、+RTS -p オプションで出力した *.prof ファイルで、
問題の関数の entries や %time はどちらのOSでも同じなの?
他に *.prof ファイルで、Linux と Windows で違いは出てる?
>>421 メモ化の事です
sum関数に時間が掛かってると感じる程度の、でかいリスト入れればおk
もう一度、同じ引数渡したら、普通はメモリ内を検索して結果を返すだけの時間しか掛からない
>>423 申し訳ないが、具体的にあなたが試したコードを見せてくれないだろうか
原因が他に隠れている事は一切無いとは言い切れないし、
一字一句同一のコードで試したい
あと大事なことを忘れていた
各OSのバージョン、およびGHCのバージョンも教えてほしい
この具体的なコードの出さなさ具合と環境を言わないのと根拠があいまいな点から考えると 問題の切り分けにすら不慣れなレベルで 8割くらい他の原因orただの勘違いと予想しておくよ
そもそも、今の GHC って自動で「引数 <-> 戻り値」のメモ化するの? 最新のは知らんが、少し前までは自動ではメモ化しない方針だったはずだが
>>424 ghci上だし、単純極まりないですよ?
sum [1..10000000]
以上ですw
実行ファイルで試すなら、上記コードを繰り返す実行ファイルを作るとかでしょうか。。。
環境は
win7 ghc 7.2.1
ubuntu 11.04 ghc 6.12.3
cpu Core i5 memory 2GB(デュアルブートなので、ハードスペックは同一です)
あ、ubuntuは64bit版です 多分コンパイラも64bitかと
以上ですw じゃねぇよ、コピペで完全に再現できるコードを示せ GHC のバージョンを揃えて実験しろ +RTS -p オプションで出力したプロファイラを比べろ 何度も言わせるな これからこちらで ubuntu のデュアルブートの環境を作りますから、 それまでに完全なソースコードと、プロファイラの実験をお願いします
環境間でのオブジェクトコードの比較するのにバージョンすら揃えないってのはどうなのよ……。
それghciで1.5Gも食いやがる。^^;
一応実行ファイルになるコードは書けたんですが、+RTS -pオプション付けるとエラーが出るんですが。。。 (-pを消すと一応エラーは出ない) プロファイルとかとった事無いので、分かりません。。。 元が単純なので、一行コードです main = putStr ((show. (( sum [1..100000]) + ( sum[1..100000]))) ++ "\n") バージョンは最近までhaskellPratformで同じバージョンにしてたのですが、ghcの最新バージョンをwinの方に入れたので。。。 (linuxは初心者なのでcabからしか入れられないです)
>>431 プロファイルとか分からないんで、体感出来るくらいの差が出るようにしたら、そんな事になりました
諸君、良い朝だ 議論したまえ
なんでドキュメント読まないの? なんでググらないの? バカなの? 死ぬの?
>>436 realWorldHasell読みながらやってみたけど、上手くいかない。。。
書籍は情報が古くなる場合もあるから、公式のドキュメント読んだ方が良いよ。 あと、上手くいかないって、どこが上手くいってないのか教えてくれないと、 エスパーじゃないと教えられんと思うよ。エラーメッセージくらい出そうぜ。
>>438 ありがとう
もうちょい頑張ってみます
初めてプロファイルなるもの出そうとしてるから、ファイルが生成されるのか、何か表示されるのかすら分かってない
RTSとは何をするのかから、調べてみます
エラーは、RTSへのオプションが違うと言われてるんで、
プログラム名 +RTS -p -RTS
の-pに何か追加で書くのが有るんじゃ無いかと推測してるんですが。。。
440 :
デフォルトの名無しさん :2011/08/21(日) 12:12:34.44
ghc-7.0.3では コンパイルする時に-prof -auto-all -rtsopts付けて 実行時に+RTS -p -RTSだけでいけましたお
>>432 だからな、コードは書き写しじゃなくてコピペしてくれ
show の後にドットがあっては型エラーだろ?
次のコードで試してみてくれないか?
main = putStr (show ({-# SCC "sum1" #-}sum [1..100000] + {-# SCC "sum2" #-}sum [1..100000]) ++ "\n")
コンパイル時はオプション 「-O2 -rtsopts -prof」 を付けてくれ
実行時はオプション 「+RTS -p」 を付けてくれ
そうすると、*.prof ファイルができる
ただのテキストファイルだから適当なエディタで開いてくれ
>>443 へ続く
>>442 からの続き
下の方に列名が COST CENTRE や MODULE などになっている表がある
COST CENTRE の sum1 や sum2 の行の右の方を見てくれ
列名 entries の所が、この関数(sum1 や sum2 は式)に処理が移った回数だ
その右隣の individual %time が処理全体にかかった時間に対する
この関数(式)に費やしたトータルの時間の割合だ
100 と書かれていれば、ほぼ 100% この処理に費やしているという意味
その右側の individual %alloc が処理全体に費やしたメモリ量に対する
この関数(式)に費やしたトータルのメモリ量の割合だ
意味は予想付くと思うが、上記コードの sum1 と sum2 のコメント欄は、
すぐ右隣の式のコストを計測してくれというコンパイラ指示だ
うちの Windows7、GHC 7.0.3 でコンパイルしたところ、
sum1 は 100% の時間 50% のメモリ量、sum2 は 0% の時間 50% のメモリ量だった
つまり、sum2 の式は端折られている(sum1 の値が使い回されている)わけだ
(ちなみに、CPU : core2 duo P8600 2.40GHz で一瞬だった)
とりあえず結果のみだ、こうなる理由はこれから検証してみる
>>441 コンパイル時に-rtsoptsしか付けてませんでした。。。
再度挑戦して来ます
本当にありがとうございます
446 :
443 :2011/08/21(日) 13:24:29.97
すまん、うちの Windows7、GHC 7.0.3 の結果が違ってた ソースファイルを保存しないで、間違ってた古いファイルでコンパイルしてた 正しくは、sum1 も sum2 もほぼ 50% の処理時間で、50% のメモリ量だった つまり、どちらの sum もしっかり同じ総和計算をしていた GHC はメモ化は自動では行わないと私は思っていたから、 これは予想通りと言えば予想通り さきほど ubuntu をやっとインストールできたから、 これからそちらでも試してみる
>>446 >>432 のコードで良いんですよね?
出かけないと行けないので、帰ってからうpしますが、こちらも似たような結果でした
どうも、GCがlinuxの方が速いのが勘違いの原因みたいな。。。
(
>>440 でうpしたファイルから推測)
448 :
443 :2011/08/21(日) 14:07:32.68
>>447 >
>>432 のコードで良いんですよね?
意味はそれいでいいけど、show の右のドットは消せよ
実は私の
>>446 の結果は、[1..100000] じゃなくて [1.10000000] でやってみた
2.5秒ほどかかって、先ほども言ったように処理時間&メモリ量ともに半々だった
私も出かけるので、ubuntu での検証は後でしてみる
449 :
デフォルトの名無しさん :2011/08/21(日) 15:20:35.37
450 :
443 :2011/08/21(日) 21:40:15.68
ubuntu 11.04 GHC 7.0.3 で、全く同じプログラムを全く同じように試してみたが、 Windows で試した時と全く同じ結果だったぞ (こちらでも [1..100000] ではなく [1.10000000] で実験した) こちらも、sum1 と sum2 でほぼ50%ずつの時間を消費し、 ほぼ50%のメモリ領域を使ってた Windows で試した時よりも若干遅かったが GHC のバージョンを揃えて試した結果だ 予想通り、GHC は自動でメモ化は行わないんだよ そちらの ubuntu で試して明らかに Windows より速いのなら、 メモ化ではない何か別の要因だと思うぞ
>>450 長々とお手数掛けました
ありがとうございますm(_ _)m
検証に使ったコードだとGCで2倍の速度差が出てるみたいでしたので、最初のやたらメモリ喰うコードだと差が大きくなったのかと予測してます
何なんでしょう。。。
コンパイルでもlinuxの方が速かったし。。。
コンパイラの32bitと64bitの差でしょうかね。。。
ともあれ、ありがとうございました!!
コンパイルに関してはwindowsネイティブでやるよか 仮想環境上のubuntuでやった方が明らかに速いとかあるからな・・・
グラフ簡約があるんでないの? それで 50% ずつ消費されるってのは納得いかないな。
454 :
443 :2011/08/21(日) 23:53:21.45
f x = x + x という関数の f (3 + 1) という適用なら x がグラフ簡約されて (3 + 1) は1回しか計算されない でも、f x = g x + g x という関数の f (3 + 1) という適用だと、 たしかに x がグラフ簡約されて (3 + 1) は1回しか計算されないが、 g x つまり g 4 は記述通り2回計算される g の引数 4 とその結果の値との対応関係がメモ化されないからだ 今回のは後者に相当する
この例だと二つのグラフが独立に存在するだけで繋がってない
ま、scalaの方が上だなw
graph rewritingの本でも読め
>>457 let x = sum [1.1000000] in x + x
とやればいい
>>459 あり^^
もちろんwhereでやっても良いんだよね?
>>454 同値であっても同一でなければグラフ簡約されないってこと?
ところでなんで明示的に指示しないとグラフ簡約してくれないの? 参照透明なら関数と引き数の纏まりも簡約しちゃって害無いでしょ?
>>463 グラフ簡約は自動でやる、自動でやらないのはメモ化だ
そして、メモ化を「指示」する方法は無い、自分でメモ化の仕組みを作れ
自動でメモ化をしない理由は、正確なところは知らん
たぶん、普通の実用的なアプリにおいてメモ化を自動でやる意味がないからだろ
普通のアプリでは、関数に渡す値の依存関係の根っこは、
たいていユーザーから入力されたり、センサーから入力された外部のデータだ
だから、例えば引数も戻り値も32bit整数型だったとして、
どの範囲の値をメモ化すべきかコンパイル時には普通は自動で判断できない
かといって、全範囲を自動でメモ化するわけにはいかない
(必要なメモリ量が大変なことになる)
あるいは、実行時に自動で逐次メモ化するような仕組みが
勝手に埋め込まれるというのも、余計なお世話だ
その仕組みのオーバーヘッドのせいで処理速度が落ちるかもしれんし、
アプリのサイズが余計に大きくなるかもしれん
また、引数の型や数、戻り値の型、また必要な範囲や出現確率、
アプリユーザーの一般的なアプリ使用傾向などから、
最適なメモ化の仕組みは1種類とは限らないかもしれん
つまり、コンパイラが「自動で」判断するわけにはいかないんだよ
(´・ω・`)はい
遅延評価って深さ優先探索みたいにやるんですよね 広さ優先探索的にやる研究ってありますか? そしたらメモ化を自動化できそうな気がします
論文書いたら教えてね
まあ >432 みたいなのは、単に部分式共通化すればいいだけなので、難しくないけどね。 ただし >442 みたいにプロファイル取得指示を入れると共通化できなくなる。 >432 の人の言う現象が再現できなかったのはそれが原因かも知れない。
>>466 遅延評価は、ラムダ式を評価する時、
正規順序簡約で弱頭部正規形にまで簡約してから
トップにある変数や関数などを評価し、
また正規順序簡約で弱頭部正規形にまで簡約
というのを繰り返すことで実現している
深さ優先というのとはちょっと感じが違う
言うなら、式をツリー状に表現した時、
まずルートのものを評価して、次にツリーを変換して、
またトップに来たものを評価して・・・という感じ
深いところ深いところへと目指している訳ではない
深さ優先はeagerな評価だな
471 :
443 :2011/08/23(火) 23:04:19.83
>>468 試してみた
コード(SCC 無しバージョン & SCC 有りバージョン)
main = putStr (show (sum [1..10000000] + sum [1..10000000]) ++ "\n")
main = putStr (show ({-# SCC "sum1" #-}sum [1..10000000] + {-# SCC "sum2" #-}sum [1..10000000]) ++ "\n")
処理時間(単位:秒)
Linux
SCC 無し : 1.64s
SCC 有り : 3.28s
Windows
SCC 無し : 1.10s
SCC 有り : 2.28s
GHC に部分式共通化という仕組みがあるという話は私は知らないが(情報源を求む)、
もしあったとしても OS に依存するような実装方法とは考えにくい
この結果からも、Windows だろうが Linux だろうが同じように働くと予想する
部分式共通化は、Linux の方が目に見えて速いという説明には使えないと思う
common subexpression elimination って共通部分式除去って日本語が普通だと思うんだけど Haskellの世界では部分式共通化って言うの? 僕はいわゆる普通のコンパイラの業界ですが
まあ意味は通じるでしょ 僕はいわゆる仕分けされかけたコンパイラの業界ですが
>>471 なるほど。
メモ化? によって総和計算は自動で1回になるんですね。
476 :
472 :2011/08/24(水) 00:04:43.71
HaskellでもCSEはCSEなので邦訳だけ別というのは考えづらいので 共通部分式除去だと思いますよ。流れを見れば通じるのでそのまま書きましたが。
未だにモナドの理解があやふやなのですが、計算を繋げるっていうイメージはこんなもので合っていますか? IOモナドだったら|みたいな、縦棒1本の計算が繋っていて、 Maybeモナドだったらトみないな、片方はNothingで止まっている分かれ木で、 Eitherモナドだったら∧みたいな、二つのどちらかに繋るもので、 Listモナドだったら可変個の分岐すべての計算が続く。 ただ、このイメージだと、IdentityモナドとIOモナドの区別がつかないのでまだ理解が足りないのかと思ってます。
479 :
443 :2011/08/24(水) 07:15:52.56
>>475 > メモ化? によって総和計算は自動で1回になるんですね。
誰がそんなこといった?
一般的に GHC は自動でメモ化はしないと言われている
今回の件が自動でメモ化されている結果なのかは未検証で不明
バイナリを直接調べる以外に確かめる方法は
GHC のソースからコンパイルの様子を調べるしかないんだろうか
>>466 深さ優先の意味が分かった
例えば (f 3 (1 + 5)) という式だと
*
├5
└*
├1
└*
├+
└*
├3
└f
こういうツリーを想定したんだね(左右の違いは無視)
正規順序簡約で簡約するから、一番外側
つまりツリーの一番深いノードの f 3 から簡約すると
これなら確かに深さ優先だ
で、広さ(幅)優先の簡約というのは、
このイメージだと正格評価そのものになると思うんだが
481 :
480 :2011/08/24(水) 07:55:59.48
ん? やっぱイメージがおかしいな (f 3 (1 + 5)) だったら、こうか * ├* │├5 │└* │ ├1 │ └+ └* ├f └3 これだと深さ優先もやっぱ違うな
482 :
480 :2011/08/24(水) 08:06:53.27
あ、深さ優先のイメージで合ってるのか ごめん、お騒がせしました 寝てくるわ
>>475 メモ化っていうのは実行時のテクニック。
実行時に、「あー この関数でこの引数の計算はもうやったわー はいはい、再計算しなくても、覚えてますよー」ってのがメモ化
共通部分式除去ってのはコンパイル時のテクニック。
コンパイル時に「あれ? この式のこの部分とあの部分って同じじゃね? それなら、一回の計算で済むんで、自動的にletだかwhereだか挟んどきますわー」ってのが共通部分式除去。
全然ちがう。
>> 443, 475 バイナリ見なくてもCoreを見ればわかります。 ghc-core -- -ddump-simpl -dsuppress-coercions -dsuppress-module-prefixes -O Foo.hs とかするとCoreが出力されます。手元のGHC 7.0.3@MacだとSCCありなしどちらでも main7 :: Integer -- 略 main7 = sum_sum'1 main8 genericLength1 main6 :: Integer -- 略 main6 = plusInteger main7 main7 という感じでCSEが働いているようです。最適化をやめて-O0にすると2回計算します。
>>483 コンパイル時に
f x = g x + g xを自動で共通部分式除去してくれないの?
487 :
443 :2011/08/24(水) 12:46:53.48
>>484 >>485 Windows7、GHC 7.0.3 でも確認できた
確かに -O0 オプションで2回計算されて、
-O2 オプションで1回になってる
共通部分式除去が働いているということか
>>477 オレはモナドを視覚的に考えるときには、矢印の先っぽが色つきなイメージで考えるときがある
普通の関数合成
|
▽
|
▽
|
▽
List
|
▼(赤)
|
▼(赤)
|
▼(赤)
IO
|
▼(青)
|
▼(青)
|
▼(青)
こういういろいろな色の矢印がHaskell圏(すべての型が対象である圏)のなかを行ったりきたりして、色とりどり、みたいな。
役に立たない話でごめん。
>>477 「モナドは木である」という比喩を扱ったチュートリアルがあったはず
ちょっと今見つからないけど
Haskell 2010では、n+kパターンが廃止されましたが、 これを使ってるプログラムを機械的に書き換えるには 一般にはガードを使うしかないのでしょうか? f (n+1) = g n みたいなのは、単純に f n = g n-1 としてしまうと、f 0 もマッチしてしまうので、 f n | n >= 1 = g n-1 としないと完全には等価じゃないですよね。
viewパターンが使える
おぉぉ、ViewPatternsオプションでこんなのができるんですね。 fib 0 = 1 fib 1 = 1 fib n@((>=2) -> True) = fib (n - 1) + fib (n - 2) ありがとうございます。 これは将来的に標準になるのでしょうか?
494 :
デフォルトの名無しさん :2011/08/26(金) 13:27:41.88
落ちてる?
495 :
Perl忍者 :2011/08/26(金) 23:10:12.59
相変わらずゴミなことやってんだな お前らはほんとにゴミだな
圏論を基礎の基礎の更に基礎から学びたい者のために本を紹介しよう
Conceptual Mathematics 第2版
http://www.amazon.co.jp/dp/052171916X/ とてつもなく丁寧に、とてつもなく優しく学べ、圏論と友達になれる
他の圏論関係の本を読んだりWebで学ぶなら、まずこれを読んでおくことを勧める
ただ良書なのに和訳されておらず、けっこう高価な本なのが玉に瑕
498 :
Perl忍者 :2011/08/27(土) 17:43:12.72
くだらね 死ね情弱
>>497 というか、圏論って、イントロダクションに400ページも必要なの?
>>499 そんなのは人によるとしか言いようがない
群論と友達になるのに数百ページ必要な人もいれば、
たった数ページ(定義と数例)だけでいい人もいるのと同じ
400ページもあるのは少しずつ丁寧に端折らず説明されてるから
ページ数でマイナスイメージを持ってしまうのはちょっと勿体ない
これは、焦らずゆっくり読んでいけば
躓くということはほとんど無いというメリットであると考えてほしい
mac lion にhaskell platform をインストールしました。 hello.hs main = putStrLn "Hello world" としてコンパイルしてみましたが、 ld: warning: text reloc in _cBR_str to _stg_ap_v_info のような警告が大量に出てしまいます。./helloしてみると問題なく実行できるようです。 何とも気になるのですが、直し方わかる方、教えていただけないでしょうか?
>>497 ,499
圏論の有用性についてなにも言えないのに、さも当たり前のように紹介するのは不誠実。
結局一体何の役に立つと言うんだ。
ただ単に延々とやっているという事実があるだけで、有用性についてはなにも示されていない。
>>502 ありがとうございます。修正版がでるのをまつ感じですかねー。。
505 :
デフォルトの名無しさん :2011/08/28(日) 08:56:35.74
難しいことをやるのが美徳 それはゲームの世界でもそう 非効率でも誰もやってない行動をやっちゃう それが難しい行動 いくら非効率でも難しいから お前にはできないのか?wっていう優越感を味わえる それはHaskellもおなじ 死ね こいつらただ学習してるだけ Haskellやってますってほざきただけ 死ね
506 :
デフォルトの名無しさん :2011/08/28(日) 08:57:01.35
早く死ねよお願いだから 死んでくれないか 死ね
とうとうコテ外したかw あぼーんされてスルーされるのが余程嫌だったんだな
Readインスタンスの書き方解らん readsprecとか変態で設計者の神経疑う
>>503 モナド則の意味や理由、概念の元は理解できるか?
はっきり言えば、理解できなくても全く問題ない
ただ、理解できると Haskell がもっと楽しくなる
Haskell を深く理解しようとする過程も楽しくなる
紹介する前にこれを言えば良かったのか?
今後気をつけるよ
1930年代、ゲーテルによって、数学そのものに矛盾が存在することが明らかになった 数学の基礎を再構築する必要がでてきて、その基礎に圏論を使う一派が出てきた 彼らは、集合の定義とか、数の定義とか、論理の定義を圏論でやろうとした 集合の定義をするときに、ラッセルのパラドックスを技術的に表面上から隠すテクニックのひとつに、集合の上にクラスを置いて定義するという方法がある この、クラスを使うような集合の定義も圏論でできた で、このクラスと集合を同時に扱うような圏論の使い方を応用すれば、プログラミングの型と演算を同時に定義することができることが分かった この、プログラミングの仕様書式(技術的用語)として圏論を使いまくって言語を構築したのが Haskell モナドというトリッキーなテクニック/概念が先にあってそれを圏論の言葉で説明したのか、 圏論の定理から推論してモナドというテクニックを発見したのか(つまり、圏論がなければモナドは理解できないのか)、 歴史的にはどっちなのかはよく分からない ちなみに、アローやモノイドやファンクタといった概念は圏論とは独立に存在する 例えば、「モノイドを(あえて)圏論で説明すると…」といった感じになる
>>510 数学に矛盾が存在する は、正しくは 数学には矛盾か無矛盾かを判断できない定理が存在するという「不都合」が存在する ね
圏論は1950年代にはもう体系化されてたんだろ?なら圏論が先に決まってる モナドとラムダ計算に関するものはMoggiによる1980年後半から1990年代にかけての仕事だし
>>512 1950年代までのプログラミングじゃモナドに相当するテクニックは使ってなかったの?
気づいたのはHASKELL言語がわかってない人は モナドを理解するために圏論の教科書を1ページ目から読んで 最後の方に書いてあるモナドのところまで読まないといけないということだな。
そういう小難しいことは(理解していれば頼もしいが)どうでもいいよ Haskell も圏論も共に楽しみたい人で、かつ興味ある人だけ読めばいい そういう軽いノリで惹かれる人に対して紹介したんだから 俺の中では「楽しめる=役に立つ」という等号も成り立ってる Haskell を実用的に使うのなら、圏論など全く必要ない たとえば圏論が分からなくても、俺FPRライブラリは十分に作れるし、 GUIライブラリも構築できるし、データベースにアクセスすることもできる
>>514 いんや
リストと再起を徹底して覚えれば十分
あとは必要になってからで良い
使う分にはモナドは多分、覚える優先度としては一番低い
ハスケルは学びたくない、本も読みたくないっていう人に もわかるモナドのホームページないの?
>>514 ブール代数も圏論のテキストでは300ページ目くらいに出てくる
だけど、圏論なんかなくても理解できる
>>517 Haskell 学びたくないのなら、OCaml スレとかで訊いてこい
>>515 それは俺も思ったこと有るなぁ。
日本語話者が全員、その文法を理解しているわけもなければ、文学作品を書くために日本語を使っているわけでもないみたいな。
Haskell でもリスト操作程度で出来ることは案外多い。
ちょっとしたオペレーションを自動化するとか、バッチファイルのような用途で Haskell を使うっていう選択肢だってあっていいと思う。
日常会話としての言語。
要するに、言語を使う前に背景をきちんと全部理解するべきだ、という考え方はハードルを上げ過ぎだろうって話。
まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。
ちょっとしたリスト操作どころか、Haskellを「ちゃんと」使う場合であっても圏論の知識は必要ないよ Monadクラスを理解していることは必要だけど >まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。 俺が個人的に知ってるHaskellプログラマは特に数学好きじゃない奴の方が多い そもそもHaskellって別に数学的な言語じゃない。言語設計が間接的に圏論の成果を使ってるだけで (計算機科学が数学の一分野だと言うなら、もちろん話は別)
米田とかkan拡張(略してカンチョー)とか一体どういう時に使うのか全く分からんよな 関手のfmapの分配とか見た目どおり過ぎるし・・・ 自然変換で順番入れ替えると全部展開しなくても式が簡単にできるとかぐらいか Haskellにおける圏論なんて式変形キチの道具箱のほんの一部ってぐらいの印象だわ
代数データ型と遅延評価だけでも十分価値がある。 数学うんたらと言うのは初学者への威嚇でしかない。
遅延評価は罠
considered harmful
なにが considered harmful なんだ?
using haskell without DCompSci
なんでそう思うんだ?
no haskell no hustle
米田の定理は、他の定理の証明に使うので、定理を使う側の人のほとんど知らなくても関係ない ぶっちゃけると、整数を定義して 1+1=2 を証明することを考える人以外は圏論を知らなくても問題ない
531 :
デフォルトの名無しさん :2011/08/28(日) 16:54:20.27
無駄なんだよ 無駄 かっこつけて 無駄じゃねーとかいってみろよ雑魚 >> まぁ、圏論にも数学にも感心が無いのに普段のプログラミングに使う言語として Haskell を選ぶ奴ってのは相当に奇特な奴だろうけどな。 かっこつけて奇人気取ってるゴミ 奇特=かっこいい 人と違う 違いを出せると思っててきもちわりーんだよ ほかの言語やれよまじ迷惑きえてくれねーかな 死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
532 :
デフォルトの名無しさん :2011/08/28(日) 16:55:23.44
モナドとか関係ない 無駄 問題ない 無駄なんだよ なくても平気なんだよ お前らジャップは欧米より脳みそ知能指数低いだろ!?!!!!!!!!!!!!!!!!!!!!!!!!!! きもちわりいー黄色人種の花で株細工ジャップ眼鏡が国論とかモナドとかわめいてんじゃねー!!!! 死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
533 :
デフォルトの名無しさん :2011/08/28(日) 16:56:14.23
Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Haskellやってるやつ死ね!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>>531 > かっこつけて奇人気取ってるゴミ
一応言っとくと俺は Haskell 使ってないけどな。
Scheme があれば幸せ。
>>534 今まで頓珍漢な発言してたのはそのせいか
こんな所に来るなよ
>>534 こういうコード書きたくなる時あるよな
((lambda (x) (x x)) (lambda (x) (x x)))
>>534 schemeとかっこつけるをかけてるのか
ちょっと面白い
やあ SCHEME餃子 。 もっとこいつら攻撃してくれ。 忙しいからこんなスレに来てる暇はないけどな。
Perl忍者さんはSchemeも嫌いそうだけどw
542 :
497 :2011/08/29(月) 00:27:52.78
Haskell らしい話題が無くてつまらなそうなので、適当に投下してみます
GHC は自動でメモ化を行う事は無いという話が以前ありました
ではメモ化はどうやってやるのという話に発展するのかと思いきや、
話の本筋ではなかったようで、全く触れられなかったんですね
特定の関数をメモ化する方法は Haskell 関連の本にもよく載っています
(たとえば The Craft of Functional Programming や The Haskell School of Expression など)
なので、もう少し一般的に、かつ Haskell らしく
遅延性を活かして実装する方法を述べた記事を紹介します
Conal さんのブログより
Elegant memoization with functional memo tries
http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries この記事の続編にあたるものも書かれているので、
ブログ内をぶらぶらと散策してみるのもいいと思います
(圏論みたいな周辺知識を得る本の紹介よりも、
こういった直接的な技術の紹介の方がいいですか)
Macでghciを起動すると
GHCi, version 7.0.3:
http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... <command line>: can't load .so/.DLL for: iconv (dlopen(libiconv.dylib, 9): image not found)
というエラーがでます。libiconvは入れてますし、/usr/lib/libiconv.dylib, /usr/local/lib/libiconv.dylibも存在します。
libiconv.dylibやそのシンボリックリンクがある場所でghciを呼ぶと問題なく起動できるのですが、
直し方がわかる方いますでしょうか?
544 :
uy :2011/08/29(月) 06:04:15.63
>>531-533 全同意
こいつら時代遅れってことがわかってないんだよなぁ
もうとっくに研究終わっていて、使えないって証明されていることを
誰も指摘してくれないから、Haskell界隈は井の中の蛙ホイホイになって
宗教みたいになってる
>>543 7.2.1でも試してみてください
7.0.3ではghciにおいてshared libraryの解決関連のバグがあった記憶があります
>>545 ありがとうございます。
GHCi, version 7.2.1:
http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... <command line>: can't load .so/.DLL for: libiconv.dylib (dlopen(libiconv.dylib, 9): image not found)
7.0.3と同じ感じでlibiconv.dylibがない場所ではエラーが出るようです。
-L/usr/lib/ -L/usr/local/lib -liconvオプション付きで起動ではどうですか?
>>547 ありがとうございます
だめなようでた。。
uyはよくわかってる
こいつら時代遅れってことがわかってないんだよなぁ
もうとっくに研究終わっていて、使えないって証明されていることを
誰も指摘してくれないから、Haskell界隈は井の中の蛙ホイホイになって
宗教みたいになってる
>>531-533 のいうとおり
こんな単純なことがわかってない
こいつら情弱
死んだほうがいい
頼むからPerl忍者は全てのレスにちゃんと名前を入れてくれ あとPerl忍者にレス返すやつは本文にPerl忍者って入れてくれ
研究終わって安定してるからみんな使おうぜ!
>>548 これでも駄目かー、パッケージ中のDYLIBの参照先がおかしいのかな
ちょっと自力でiconvパッケージをcabal installしなおして試してくれ
>>521 それもそうか。
Scheme 使いでも表示的意味論だとか操作的意味論だとかを理解してるやつなんていねーもんな。
餃子、は、忍者、の韻を踏んでるのかw
549って本当に偽だなwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwww
誰だこいつwwwwwwww toby_netか?
なんだよPerl忍者とかScheme餃子とか 増殖してんじゃねーよ 次は何よ?C#孔雀か?
Scala煎餅とかどうよ
561 :
497 :2011/08/30(火) 12:40:50.91
おまえら、どうすれば Haskell の話をしてくれるの?
>>559 Scheme餃子じゃねーよ。 SCHEME餃子だよ。
二度と間違えるな。
Haskell だって case sensitive だろ。 さてはお前、 Haskeller じゃないな?
Yiがemacsよか有名になったら
>>542 正直、そのライブラリをどういう風につかってメモ化を行うのかよく分かりません。
でも、ソース中のCプリプロセッサの使い方は面白かった。
>>563 まずは簡単にインストールできて、
問題なく起動できなければ話にならないのだが・・・
どうしたものか
有望な新人って概念が他力本願な気がする
ひょんな会社だとCOBOLからJAVAの移行もそんな感じだったに違いない JAVAで作りなさい、おじさんはCOBOLしか知らないけど。
有望な俺
>>566 phpみたいに、htmlに埋め込みでhaskell書けたら本気出す
>>571 >>564 反応がないですね・・・
ソースの一番最後に書かれてるように、
メモ化させたい関数を Data.MemoTrie.memo 関数に渡し、
返ってきた関数を元の関数と全く同じように使えばいいです
たとえば、
>>432 や
>>442 のプログラムだと、
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' = memo sumX
として、2度記述してある sum [1..100000] の代わりに
2度 sumX 100000 と記述すればOK
sumX の引数の値を大きくすれば効果がよくわかります
本当に実行時間が半分になります
>>570 え、できるだろ
出来ないの?
できるだろ?
>>572 いろいろサンクス
{- Test1.hs -}
module Main where
import Data.MemoTrie
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' = memo sumX
main = print $ {-# SCC "sum1" #-}sumX x + {-# SCC "sum2" #-}sumX x
where x = 1000 * 1000
{- Test2.hs -}
module Main where
import Data.MemoTrie
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' x = memo sumX $ x
main = print $ {-# SCC "sum1" #-}sumX' x + {-# SCC "sum2" #-}sumX' x
where x = 1000 * 1000
{- Test3,hs -}
module Main where
import Data.MemoTrie
sumX, sumX' :: Integer -> Integer
sumX x = sum [1..x]
sumX' = memo sumX
main = print $ {-# SCC "sum1" #-}sumX' x + {-# SCC "sum2" #-}sumX' x
where x = 1000 * 1000
(つづく)
576 :
575 :2011/08/31(水) 02:20:13.57
これで試してみると、たしかにTest3はTest1より速い。 たぶん、メモ化が働いているんだろうと思います。 しかし、ラムダ式としては同値なはずのTest2がTest1よりも遅いことと、 なぜかTest3.hsのコストセンタ"sum1""sum2"がプロファイルに反映されていないことが、 まだよく理解できませんが・・・
こんな場所で質問してるようなやつがやるような言語じゃない お前がやっても何も変わらない 何も 何 も 終わり
どんな言語も最初からちゃんと使えるやつなんていないし、 たくさん使って恥かいてネイティブに教えてもらって覚えるもんさ
> こんな場所で質問してるようなやつがやるような言語じゃない もはやそんな大それたもんでもないな Perlのようがよっぽど難しい
580 :
497 :2011/09/01(木) 00:33:52.17
>>546 ラムダ式としては同値なはずのTest2がTest1よりも遅いのは、
グラフ簡約がうまく働いておらず、同じ内容の環境が2度作られているためです
sumX' x = memo sumX $ x の右辺の x は trie のおかげでメモ化されますが、
左辺の x が「自動ではメモ化されません」
(ちなみに、 $ は不要です)
多少長くなりますが、もう少し詳しく説明した方がいいでしょうか
Test3.hsのコストセンタ"sum1""sum2"がプロファイルに反映されていないのは、
f :: Bool -> Integer
f b = if b then sum [1..8000000] else undefined
main = putStrLn $ show ({-# SCC "sum1" #-}f True)
これでコストセンタ sum1 の処理時間・メモリ使用量がゼロを示すのと同じ理由です
f 関数内の sum [1..8000000] の直前に SCC を置いてみてください
ちゃんと計測できます
私は SCC の仕組み自体をまだよく理解していないので、
なぜ f True の直前ではダメなのか、その理由自体は分かりません
(if 以外にも、関数のパターンマッチや case で分岐しても同様ですね)
581 :
497 :2011/09/01(木) 00:35:57.08
猫でもわかるReadインスタンス書き方講座お願いします そんな低レベルな事訊くなと言うなら Haskell初心者質問スレ作って下さい
回答出る前にキレるなよ
deriving Read
>>582 書き方さえ分かればいいんですね
import Data.List
data Nasubi = Nasu
instance Read Nasubi where
readsPrec _ s = if isPrefixOf "nasubi" s
then [(Nasu, drop (length "nasubi") s)]
else []
こう書けば read "nasubi" :: Nasubi で Nasubi 型の値が得られます
最低限 readsPrec 関数を定義すればいいです
readsPrec 関数の第1引数は無視して問題ないです
read 関数が適用した文字列が readsPrec 関数の第2引数として得られるので、
この文字列の先頭にインスタンス型の値を表す文字列が含まれているか構文解析します
含まれていれば、要素として (構築したい値, 残りの文字列) というペアを一つ持つリストを返します
含まれていなければ空リストを返します
この簡単な例では、構文解析は単に文字列の同値性を調べてるだけですが、
もっと複雑な例えばツリーを表現した型の場合ですと、
再帰的に構文解析する必要がありますね
正規表現やParsecを使って構文解析した方が楽かもしれません
まぁ、Show を自動導出しているのであれば、
>>585 の言うように Read も自動導出した方が楽です
ちなみに、私は Read 型の使い所がさっぱり分かりません
何か役に立つんでしょうか
なんかデータ入力する時、パーサわざわざ書く必要がなくて楽じゃん?
そうそうderiving前提なんだよなぁ
Readを自動導入しないのなら、結局自分でパーサーを作らなければなりませんし、 Readを自動導入したのなら、read関数で読み取れる文字列が Showを自動導入した場合にshow関数で得られる文字列に制限されます 後者の場合、読み取り可能な文字列の制限が少しきついです 融通が効かないと言いますか Persecは比較的簡単で直感的なので、私はPersecでやってしまいます
Parsecェ…
ShowみたいなPrettyPrinterも同時定義されるようなParsecが欲しいな・・・ bidirectionalizationっていう分野になるのか?
そういうのも bidirectional っていうのですか 私はどちらかと言うと、A -> B かつ A <- B みたいなのを bidirectional っていうのだと思ってました たとえば、ちょっとした DSL を使って関数(数式)を定義しておけば、 A から B への関数と同時に、逆関数も自動的に作られるみたいな (当然、必要になるまで遅延される)
593 :
592 :2011/09/03(土) 13:59:08.15
>>591 すいません、解釈は合ってましたね
bidirectionalization です
このスレを見てたみたいな記事だな
並列プログラムの振る舞いを測定するんだから、全然別だろ 数回前から続いてる一連の流れだし
function@l2ch経由でこのスレの内容を見ているという事はありそうだけど その記事に関しては関係なさそうだ
図書スレから誘導されたので、改めてこちらで質問します 洋書でも和書でも全く構わないんですが、 Haskell でランクとか kind とか forall とかの意味や役割を 丁寧に解説している本って何か無いですか? あるいは、forall なら forall(とその関連)だけでいいですから、 まとまって丁寧に説明されているサイトなどあれば嬉しいです
>>600 ありがとうございます
本の方は、Rank や kind なんかも関係してくるのでしょうか
その本の内容をさらうとrankやkindの理論的な背景がわかる 高階の型を扱うためのkindと高階関数の多相性の為のuniversal quantified types もう一つのforallの使い方existentially quantified typesの事もその後ぐらいに載ってる kindに関する議論があるのは結構最後の方だけども TAPLでは特に前提としているわけでもないけどでもできれば術語論理や集合論の初歩もあった方がいいかも、
>>602 ドンピシャっぽいですね
術語論理や集合論は最近復習したばかりなので、ちょうどいいかもしれません
その本を購読してみます
ありがとうございました
それぐらい自分で調べられない人が理解できるとは思えんがね、
プログラミングhaskellの練習問題に挑戦中なんだけど、これがどうしても分かりません 教えてもらって良いでしょうか 以下、引用 5.7 練習問題 2.関数lengthと同じように、ある要素のみからなるリストを生成するライブラリ関数replicate :: Int -> a -> [a]をリスト内包表記を用いて定義せよ。以下に使用例を示す。 > replicate 3 True [True, True, True]
無理やり書いてみたが多分違う。 replicate n x = [y | n > 0, y <- x : replicate (n-1) x]
>>606 それは私も書いて、エラーで弾かれたパターンですね^^;
5章で息絶えた漏れが貼ってみます replicate n x = [x| _ <- [1..n]]
>>608 俺はこう書いたが、そっちの方が正解っぽいな
replicate n a = [x | x <- take n (repeat a)]
>>607 エラーにはならないよ。
ただ、出題者の意図と違うだろうという気がした。
プログラミングHaskell仲間がけっこういるんだな。 9章練習問題4と5だけは放置中。 Haskellで使えるGUIって何がポピュラーなの?
Haskellまで行っちゃった人にとっては、GUIの方がかえって使いにくい
だからダメなんだという自覚もないのか…
やっぱgtk2hsとwxHaskellあたりかなぁ でもどっちも7.2.1にはまだ対応してないんだっけ・・・
qtHaskellも推しておく
コンパイルにメモリ8G食い尽くす糞パッケージの話題はそこまでだ
qtHaskell はポピュラーではないと思う
複数行に渡る文字列リテラルってどう書くんだった?
>>619 すまん、自己解決してしまった
言語仕様にちゃんと書かれてるのね
A string may include a “gap”―two backslants enclosing white
characters― which is ignored. This allows one to write long
strings on more than one line by writing a backslant at the
end of one line and at the start of the next.
string-qqのようなQuasiQuoterを使う
>>621 ありがと、申し訳ない、そっちの方も今度調べてみる
それはそうと、HXT を試しに使ってみたんだがよく分からない
import Text.XML.HXT.Core
getText :: ArrowXml a => a XmlTree XmlTree
getText = deep isText
procXml = processChildren (getText `when` isElem)
test = do
[r] <- runX (readString [] "適当なXML" >>> procXml >>> writeDocumentToString [])
putStrLn r
これで元のXML内のテキストノードだけを集めたXMLが得られると思ったんだが、
結果は "/" ノード以下に何もノードを持たない空のXMLが出力された
例えば isText を isCmt に変えると、ちゃんとコメントノードをだけ集めてくれる
(その場合、readString に withPreserveComment yes のオプションが必要だが)
isText ってテキストノードかどうかを判定するものなんじゃないの?
全体から抽出するなら procXml = multi isTextでいいんじゃねぇの?
>>623 それでやっても相変わらず得られるのは空の XML だった
でも、いろいろ実験してるうちに偶然変なことを発見した
>>622 に提示した例には、問題には関係ないと思い込み省いてたんだが、
本当は writeDocumentToString のオプションで withIndent yes を指定してた
(
http://www.haskell.org/haskellwiki/HXT ここの例を真似た)
で、このオプションを省いてみると、俺の方法でも
>>622 の方法でも、
どちらでもちゃんとテキストノードだけを集められた
なんで? (バグか?)
そもそも俺の試したverではwithIndentなんてなかった とりあえず最新版にしてもう一度試してみては?
それはすまなんだ
立て続けに質問ですまんが、hxt には意味不明なことが多すぎ hxt の Arrow の <+> って意味的には OR だよね deep (isText <+> (getName >>> mkText)) こうやると、"/" タグの直下にひとつ、 元xmlのトップのタグの名前を内容に持つテキストノードだけがあるxmlが得られた 予想では、<+> の左辺に isText があるんだから、元xmlの全テキストノードに、 getName >>> mkText で得られる何かが追加されたxmlが得られると思ってた getName >>> mkText では何も得られないかも知れんが、 それでも isText で得られるテキストノードだけは得られると思ってた が、予想に反して得られたのはトップのタグ名が書かれたテキストノードひとつだけ 試しに isText <+> hasName "存在しないタグ名" とやると、 ちゃんと isText の分の全テキストノードが得られる つまり、hasName "存在しないタグ名" の結果が空でも isText の方は生きる <+> の右辺って、左辺に(または逆に)影響を与えるもんなんだろうか hxt ライブラリのソースの ListArrow.h や IOStateListArrow.h などを見てみたが、 <+> 演算は基本的に2つのリストを ++ 演算で結合してるだけに見えるんだが・・・ 何か使い方がおかしい?
数学できないバカがバカを隠すためにやる言語=Haskell バカ隠し気持ち悪い
こいつら童貞キモクソ treeboa=俺だと勘違いしてるゴミ 早く死ね デートもしたことないかわいそうなやつら かわいそうだな 彼女暦=年齢 気持ち悪いHaskellやってるんだな 一生だ 気持ち悪い 生産性のないゴミ つまらないゴミ言語 お前らがやっても無駄無駄
彼女いない暦=年齢 哀れのゴミ死ね
2chブラウザ作ってるとかほざいてる高校生は帰れ 車輪の再発明 てめーはクズだ わかったな死ね 俺以下ゴミ つまらない発想してんじゃねーぞ 俺の発想はおもしろい ネタを創造する能力がある
vps490円ってこれってsmtpとか使えますか 教えてください 追加できますかこれ?servermanです お願いします
↑ wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
透明ってことは、やつが現れたか。
>>630 実際、他の言語に比べておもちゃみたいに簡単なんだが。。。
もっと広まっても良さそうなモンなのにな
641 :
デフォルトの名無しさん :2011/09/15(木) 23:32:44.40
wikipediaを見てエラトステネスの篩を実装して見たのだけど、、
http://ja.wikipedia.org/wiki/エラトステネスの篩 うまく行かないです>.<
何がいけないのでしょうか?
step2 (pL, sL) = step3 (pL ++ [head sL], tail sL)
step3 (pL, sL) = step4 (pL, filter (\x -> x `mod` (last pL) /= 0) sL)
step4 (pL, sL) = if (tail sL) < (tail pL)^2
then (pL ++ sL, [])
else step2 (pL, sL)
main = print $ step2 ([], [2..20])
型シグニチャを書くべき。 (tail pL)^2 って何ぞ?
関数型言語はLuaみたいな感じで生き残りを模索したほうがいいと思う
プログラミング言語に対して「生き残りを模索」なんて馬鹿馬鹿しい 宗教や文化遺産でもなければ、誰かの芸術作品でもない 他の言語と何か競争しているわけでもない 使う人がいれば生き残り、誰にも使われなければ消えていく それだけだ 生き残らせるという考え方自体が間違ってる
>>644 概ね同意だけど、プログラミング言語はある種の芸術作品だと思うんだがなぁ。。。
言語だけじゃ無しに、プログラムって、道具であると同時に作品だと思うんだが
>>645 で、あんたは売らんがための芸術作品を買いたいのか?
>>646 欲しいと思って、金を持ってれば買うだろ。普通
>>641 手続き的に描くならモナド使うのがわかりやすいyp
関数型っぽいやりかたなら
http://en.literateprograms.org/Sieve_of_Eratosthenes_%28Haskell%29 あたりみるのがいいよ
import Data.List
import Control.Monad.RWS
import Control.Monad.Identity
type SearchList = [Int]
type PrimeList = [Int]
type Max = Int
type Sieve = RWST Max PrimeList SearchList Identity
pop = do { x <- gets head ; modify tail ; return x }
square x = x * x
last' [] = Nothing
last' a@(x:xs) = Just $ last a
step :: Sieve ()
step = do {
x <- pop ; tell $ [x] -- step 2
; modify $ filter $ (/= 0) . (`mod`x) -- step 3
; y <- gets $ maybe 0 id . last' ; if square y < x then return () else step -- step 4
}
trd3 = (\ (_,_,x) -> x)
sieve m = trd3 $ runIdentity $ runRWST step m sl
where sl = [2..m] -- step 1
>>644 ある言語を気に入って、使い続けたいと思うなら、
コミュニティが生き残らないと困るし、可能なら大規模になって欲しいだろ
Haskellがここ数年で急速に実用的になったのは、
コミュニティが十分大きくなってライブラリが整備された/GHCへのフィードバックが増えたのが大きいと思う
>>629 hasName "from" <+> hasName "to"
とやると<from>と<to>の両方が集められたから大体orの意味になってるんじゃね?
とりあえずトップはテキストノードじゃないよね?
で、次にgetNameに行くわけだけど、getNameはタグ名のあるノードつまり全てのノードにマッチするわけだからトップにマッチするわな
んでgetNameでタグ名取得してmkTextで取得したタグ名を内容とするテキストノード生成・・・と
deepだからその時点で探索終了するから
>>629 の振る舞いで有ってるんじゃないの?
s1 :: String の中に Shift-JIS でエンコードされたデータがあります。 これを UTF8 に変換したいです。 s2 = f s1 この関数 f を提供してくれるライブラリはないでしょうか。 ファイルや標準入力などからの読み込みではなく、 String や ByteString などの中にあるデータを直接変換するものです。 [環境] ・Windows7 ・GHC 7.0.3
みなさんHaskellでなにやってるの? スタディがてらマルバツゲームを作ってみたけど正直便利と思えない。
vbaとかのほうがいいよ
>>653 iconvパッケージを使って
import qualified Codec.Text.IConv as IConv
toString . IConv.convert "Shift_JIS" "UTF-8" . fromString
でいけると思う
IConv.convertはByteStrinを対象としてるから、String用にする為にはStringからByteStringの変換、
ByteStringからStringへの変換をはさんでやるわけだ
>>665 iconvはwinGWかcygwinでしか使えないんですよね。
じゃあicuいるけどuconvとかは?
今日の忍者は某セミナー行きかな? 帰ったらレポ頼むわw
>>658 http://site.icu-project.org/download/48 ここから icu4c-4_8_1-src.zip (18.9 MB ZIP file for Windows platforms)
を落として次のように nconv をインストールしようとしました。
cabal install --extra-include-dirs="icuソースのフォルダ\source\common" -v3
すると、unicode/platform.h が無いと言われます。
調べてみると、たしかに platform.h.in はありますが platform.h はありませんでした。
platform.h.in を見てみますと、configure 時に autoconf が platform.h を作る
と書かれています。
cabal の install フラグでインストールする時、configure はすると思うのですが、
この時点で platform.h が作られると思ったのですが、違うのですね。
cabal install に渡すフラグが何か足りないのでしょうか。
それとも、cabal install の前に autoconf を実行しておく必要があるのでしょうか。
>>660 icu4c-4_8_1-Win32-msvc10.zip (8.8 MB Windows (x86 32-bit) Visual Studio 10)
こちらの方をダウンロードし、インクルードパスを通して cabal install してみましたが、
今度は ptypes.h が無いと言われました。
icu4c-4_8_1-src.zip の方に icu4c-4_8_1-Win32-msvc10.zip の
platform.h だけをコピーして cabal install してみましたが、
すると今度は expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
などの構文エラーらしきエラーメッセージが大量に発生しました。
windows で cygwin も VisualStudio も無い状態で uconv を使うのは難しいですね。
とりあえずまだ諦めずに、もう少し色々探ってみます。
ラムダ計算がチューリング完全である証明ってどうやるの?
反復と分岐が可能ならオッケー、だったような。
チューリングマシンシミュレーターが作れればいいのじゃね?
おまえら数学好きなんじゃないの?
含む記号が∈じゃなくてiの上に^が乗った記号を使うのは 数学でどんな分野ですか?
>>665 釣り好きでもフライは興味ないやつも居る
車好きでもカートには興味ない奴も居る
アジフライおいしいのに
要は数学っぽいものが好きなだけっで数学が得意なわけではないと
数学が好きなんじゃなくて形式化が好きなのだ
>>665 数学が好きと、数学が得意は必ずしも一致しない
ええ、下手の横好きです
>>669 というよりは、解析学は好きだけど集合論は好きじゃない、の方が近い
集合論は色んな数学の基礎のひとつになってるが、それにはあまり興味は無く、
その上に作られた解析学の方に興味がある、みたいな
ある言語(算法、計算)がチューリング完全であるかどうかは、
計算機科学の基礎の一つではあるが、ハスケラーの間でも興味がない人がほとんどだろ
ハスケラーだとピリッとしないからカレー野郎にしようぜ
おとこの子はハスケラー おんなの子はハスケルン
集合論は好きじゃないけどハスケラーw
>>672 むしろ逆で、いわゆる数学(解析学とか代数学とか)よりも、
計算機科学やその周辺(論理とか集合論)に興味のあるユーザが多い印象
おっと誤読してた、解析学云々は比喩か
能書きいいから証明して コードもかけなきゃ証明もできないのか
>>675 たとえ話だ(数学は好きなんだが、分野に依ると
>>669 に言いたかった)
すまん、喩えがまずかったな
>>678 できません
諦めてください
と、暗に言ってきたつもりだが、お前の脳では解釈できなかったか
>>678 他の人は知らんけど、自分はlength関数をCでもjavaでもrubyでも自作出来なかったのに、haskellだとあっさり少ない知識で書けちゃったのに惚れたんで、分かりませんね
(Cとrubyで書いて貰ったこと有るけど、初心者がいきなり書けるようなコードじゃ無かった)
今も、「これ、rubyとかでどう書くんだろ?」とか思いながら書く事が多いです
そりゃまた無脳ですな
>>681 うい
だからこそ、haskellは簡単だと実感してるですよ
俺は集合好きだけど コンパクト集合の積集合がコンパクトになることの証明が さくっと出てこない程度にはニワカ いや 好きなんだけどね
684 :
デフォルトの名無しさん :2011/09/18(日) 23:06:21.08
なんでhaskell使うのにそんな気張らなけりゃならんのか 何年前の感覚だ? 手続型に関する多くの難解な研究を把握してからじゃないと VBを使っちゃだめなのかい
もう9月も下旬に差し掛かるのに 7月予定だった蓮麩羅が未だに揚がってこないね
証明といえばintroduction to functional programming using haskellの練習問題には証明問題が沢山あるけど あれcoqとか使ってやりたい
InductiveかつCoinductiveな型がhaskellのlistで さらに全ての型がbottomっていう変な値を持ってるのが証明系でどうあつかうのかわかんね あとは計算量と空間使用量の証明な式簡約系を自分で作って そいつの振る舞いをに付いて証明することで間接的に証明するやり方はあるんだけど、気軽にできるものではないな 結局Haskell向けに新たに定理証明系を作るという修士・博士論文並みのプロジェクトをやることになる・・・
>>685 確かにあれはツォルンのほだいを使うからふつうは出てこないよな。
結局能書きたれたい奴用の言語か
こういう場で嫌味とか皮肉を言いたくなる奴の心理が分からん
あ
perl-ninjaさん (id:perl-ninja) の今日の☆レポートです。
本日の☆ : 1
ただいまの☆総数 : 32
■ 洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059 星一 (id:hajimehoshi) ☆
〜 ☆をくれた人に「カラースター」でお返ししよう! 〜
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
忍者はicfpか・・・裏山
International Conference on Functional Programming の略。 毎年6月頃にプログラミングコンテストが開催され、どの言語が最強か、決定される。
そっちじゃなくて今日のセミナーのことだよ
どのOSが最強とか どのアーキテクチャが最強とか そういうコンテストも欲しいね
忍者がセミナーでてるって本当? あいつが出るわけない、反感買ってるから殺される
リアバレしてないから大丈夫だろ start-haskellとか潜入レポートやってたじゃん
サイバイマンディフェンスまで乗り込んだらしいな まあ平気だろうな
何が彼をそんなに突き動かすの?
Perl忍者がドワンゴ入ったらおもしろそうだな
怪しい薬やって暴れてクビになるくらいおもしろいことは起きないと思うんだ
そういや彼もHaskellerだった
>>690 小学生の頃、好きな子にやたらと突っかかる奴いただろ
積みあがったトランプ崩したくなったり、リスカしたくなったりするあれだろ わかるよ
み上げたものぶっ壊して!!!身に付けたものとっぱらって!!!
ところでさあ、どうしてハスケルの人達って、他の言語を馬鹿にするの? 普通にハスケルの良い所をアピールすればいいだけなのに、 他の言語を馬鹿にしなければならないほどアピールポイントが皆無なの?
そんなの山○さんと○中さんぐらいしかしらんわ
関数型プログラミングに誇りを持っているんだよ しかも難しくて何をやってるかよくわからないだろ? ちょっと、普通のプログラマと違いをつける一工夫のためにHaskellやってんじゃないかな 気持ち悪いから死ね
vs OCamlの人とか、いい具合にやりあってると思うが?
他の言語とかに対する言論がちょっとアレかな、と思う人というとMatzとかScalaのあの人とか、
あれぐらいのアレではじめてちょっとどうかな、とか思う。
>>707 はネット一切見なければいいよ。見たくないものは見なきゃいい。それだけ。
>>707 むしろ他の言語ユーザーよりはバカにしてる姿見かけ無いんだが。。。
そう言う平和な所も割と気に入ってる
Haskell系は優しいと思う Rubyは怖い マジで
すぐ影響うける気持ち悪い Matzくらいの有名なやつがほざくだkですぐまね クソガキとかもまね なんでこいつ?Haskellとかわめいてんの?気持ち悪いっていうやつも多数 意味がわからない ただやってるだけ 早く死ね 死ね にくい 気持ち悪い 憎いしね
>>711 ポカーン...
手続き型は難しすぎてわかりませーん、とか、完全に見下して煽ってるだろ...
Perl忍者を受け入れるくらい優しいスレです
もう プログラミング+サーバいじり そんなやつわんさかいる ばかじゃねーの もう時代はかわった お前ら情弱消えろ 死ね そんなの誰でもできる バカでも
ポカーンってセリフが許されるのは二次元まで
そういえばハスケルって二次元ヲタが多いな しかも隠そうともしない
誰でもできることで食ってけるだけお金貰うことは素晴らしいことあるよ
2次元オタも気持ち悪いしな 一種のコミュニケーションかな Perlコミュニティでいうラリーウォールと小飼がアニメキャラ好きだし 影響うける話あわせのクズもおいな sっさと死んでくれ ”影響”受けるやつが憎いんだが
> air, hack2, loli, maid, miku, moe, nemesis このへんの hackage は割と死ねと思ってる
これからの情報戦争の時代に流行るのは各国の重要機関に攻撃かけて機密情報を取ってそれを売買するハッカー プログラマなんてもう古いということをいいたいんですね さすが忍者だ 感動的だな
そうだよ まあな 見てみ みんないい子づらしてるだろ? あんなプログラミング 脆弱性発見 どこが楽しいんだ? 破壊する 匿名で迷惑をかける 困らせる 陥れる つぶす こっちのほうが楽しいだろ 愉快犯 もうそんな時代は終わった いい子ばっかり いい子ずら 何もしない 怖くてできないびびり そういうやつばっかりだな なに考えてるんだよ まったく理解できない
Perl忍者さんコテ付けてくださいお願いしますよ
ハスケルの奴等がアニメ好きなのは、3次元は副作用だらけで不純だからだろ 不純を嫌ってピュアな身内同士でオナニーの見せっこ
てめぇの2ちゃんねる荒らしこそオナニーもいいところだろ、屑が
ネットギャングを構成したい 身長180センチ以上 体格もいい ハッキングもできる 集団リンチ可能 爆破テロ 放火 ショットガン ネットギャング かっこいい Rubykaigiに乱入して無差別に破壊したいとおもったことある
なにそれ かっこよすぎ
忍者はそんな近代的な飛び道具を使いませんが 手裏剣ですね
>>714 ごめん
それ、煽りでも何でもなく、マジで挫折したんだ。。。
忍者に触れる奴はみな忍者
忍者はウイルスだったのか
忍者はNG
忍者は凄いよ 見方につくとマクロされみたいに、アンチや憎いやつらを叩いてくれる 宣伝までしてくれる よくできたAI
おまえらは副作用の難しさがわかってないだけ、 という優越感が滲み出てるよな
>>652 ありがと、おかげさまで deep と <+> の挙動は何とか理解できた
あと multi の挙動も理解できた
だた、processChildren がよく分からない
multi とは違う挙動なのは確認できたが、理屈が分からない
体をこわすくらいなら職業プログラマなんてやめればいいと思うの。
>>735 被害妄想だよ。。。^^;
言う程副作用怖く無いから
haskellって普通のプログラムで書くほとんどのコードを外に追い出してるだけだよね。 ioとかguiとか。
やや抽象的な質問で悪いが、こういう時みんなはどうしてる? 規模が比較的大きなデータ構造がある(大きなツリーとかリストとか配列とか) データ構造の全ての要素ひとつひとつに対して処理を施す仕組み(fold 系とか)がある このデータ構造に対して、全要素の平均値を求めたり {A1}、 ある条件を満たす要素だけを集めたり {A2}、 平坦にならしてリスト化したり {A3} といった様々な処理を施したい しかし、データ構造の規模が大きく、また fold 系の処理も軽くはないため、 データ構造の全要素を何度も何度もたどることは好ましくない こういう場合、今までは fold 系に渡す関数の中で {A1} と {A2} と {A3} を並行的に行い、 結果を3要素タプルにして返してた こうすると、データ構造をたどるのは1回で済むから効率は良いんだけど、 fold 系に渡す関数の中がちょっと醜くなる {Am} と {An} の処理の一部を共通化して効率よくするともっと酷くなる が、仕方がないと思って諦め、可能な限り綺麗になるようにしてる {A1} を施す fold 系、{A2} を施す fold 系などと別々に用意し、 何らかの方法でそれらを合成すれば一度の巡回で上記のと同じ結果が得られる なんて方法はないかと、暇があれば考えてるんだけど・・・何かないかな こういう条件に絞れば可能、とかいう話でも良いんだが もしできれば、エッセンスを抽出して関数化したいと思ってる
>>739 追い出してるって言うか・・・
副作用のある関数からは、純粋な関数を呼べるけど、逆は駄目ってだけ
(結果的にトップレベル付近に副作用のある関数が集まる)
純粋な関数から作って、それに外部からデータ渡すためのインターフェースとして副作用のある関数作れば、それ程ほかの言語と違和感感じない
人が必要とする機能にアクセスできないHaskell
>>742 うーん
普通の言語でも、入力->加工->出力が理想だと思うんだが。。。
自分が昔、綺麗だと思ったCのコードとかは、mainの中身は関数を2、3個呼んでるだけのシンプルな感じだったし
それが自然と出来るようになる感じ
すぐに慣れる
Haskellでは停止しないプログラムの意味はボトム。 ということは、 [[ OSプログラム ]] = ボトム = [[ f = f]] やった! Haskellだと1行でOSが書けたよ
副作用なしにGUIは作れない 副作用なしにゲームは作れない 局所的なプログラミング言語だと思う。
gtk2hsさん、、、
的外れな指摘だらけでワロタ
>>745 純粋関数型言語って言葉に引きずられ過ぎ
副作用部分ではhaskellは、オブジェクト指向は無いけど、関数型な機能をふんだんに使える手続き型言語として機能する
純粋とか、関数型言語とかにこだわり過ぎ
IOモナドの本質は二枚舌
7, 8年前はJavaを引き合いに「Objectとは何か」「Object指向的発想とは」みたいなのが流行ったけど、 今度は関数型言語のパラダイムで同じことが繰り返される訳か。胸熱。
OOで揉めるのは「OOとはなにか」が未だ明確に規定できてないから。 関数型で揉めるのは「関数型とはなにか」が未だ明確に規定できてないから。
純粋関数型は副作用なしが定義でしょ だからそもそもありえないんだよ
副作用してるのは下っぱランタイムが勝手にやってるだけ 私は副作用なんて汚いことしませんよ? とか言って騙せばいいんだよ
>>740 RULES プラグマをうまく使えばやりたいことができそう。
でも、オレが未熟なだけかもしれんが:
RULES プラグマは、それがどう適用されるか結果を見てみないと確信できない
↓
コーディング中に自信が持てない & 試行錯誤
↓
開発効率低下
結論として、個人的には、いまやっている方向でよいんじゃない? と思う。
集合の圏の上では副作用は直積型の冪対象で表現されるんやな side-effects T A := (A×S)^S
>>740 が手作業でタプルを返すfoldの中身を書くっていうのはtuplingという手法なんだけど
それを自動化する事は考えられてる・・・がまだ研究段階でした残念!
現実的な解としては複雑化されてしまうfoldの中身をコンビネータで判りやすく組み立てる仕組みを作る事ぐらいだね
ちょっと前にでてたHXTのArrowとかまさにそれだと思う
>>754 RULES プラグマ でどこまでやれるか検証してみる
>>756 > 手作業でタプルを返すfoldの中身を書くっていうのはtuplingという手法なんだけど
そういう名前なのか
ACM で "automated tupling" "automate tupling" なんかのキーワードで検索してみたが、
結構古くから研究されてるんだな、ちょっと論文漁ってみるよ
> 現実的な解としては複雑化されてしまうfoldの中身をコンビネータで判りやすく組み立てる仕組みを作る事ぐらいだね
今の段階でできる事はやはりそこになるか
そういうのに Arrow が活用できるとは知らず、今まで小難しい Arrow を避けてたが、
そろそろ本腰を入れて勉強してみるか
いろいろありがと
759 :
デフォルトの名無しさん :2011/09/20(火) 14:56:22.90
プログラマーの付き合いネタ=レッドブル 萌え アニメ 一般職の付き合い方ネタ=ゴルフ 釣り 低底の付き合いネタ=パチンコ 麻雀 テンプレ付き合いネタでした
>>755 集合の圏じゃなくてもいい。
SはStoreもしくはStateであることを明記しなくては意味ない。
IOモナドの解説でStateモナドの話が出てくるのはそのSに係った話をしていると考えられる。
久しぶりですねみなさん
perl-ninjaさん (id:perl-ninja) の今日の☆レポートです。
本日の☆ : 1
ただいまの☆総数 : 32
■ 洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059 星一 (id:hajimehoshi) ☆
〜 ☆をくれた人に「カラースター」でお返ししよう! 〜
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
hoshihajime
hoshihajimeです
みなさん覚えてください
Perl忍者の仲間に加わりました
星 はじめ です
hosi hajime
星っていうやつはダメだな ツイートに一貫性がないな やっぱり 仲間はずす さようあんら
星っていうやつは ドワンゴも首になれ ひろゆきに伝えとくか ひろゆきは親戚なので ドワンゴ クビにするように
そういえばiterateeをIO以外で使ったことなかったな
使ったこと無いので外してるかもしれませんが、iterIOはpureなiterateeも想定している ようなので、そういう用途に使いやすいかもしれません。
潜る対象の木からEnumeratorを作って(enumListみたいな) 各処理をIterateeで書いて 後はIteratee用のライブラリのコンビネータで合成、接続、展開して取得 って感じでいけるのかなるほろなるほろ
頂点や辺がいろいろな属性をもつようなグラフの操作(作成・変形・探索) をやりたいのですが、FGLというパッケージが定番なのでしょうか? 他に何か選択肢があればご紹介ください。
さあ、連休だ。これから思いっきり、はすけりまくるぞ。
俺もこれからルンルン ハスケルン♪
プログラミングHaskellの5.7練習問題5問目、どうも自分が問題自体を理解できてないんだけど、解けた人いる? 5.7練習問題でここだけ解けなかった。 以下、問題文を抜粋。 5.二つの生成器を持つリスト内包表記[(x,y) | x <-[1,2,3], y <-[4,5,6]]は、一つの生成器を持つリスト内包表記二つでも表現できることを示せ。 ヒント:一方のリスト内包表記を他方への中に入れ、またライブラリ関数concatも使え。
concat [[(x , y) | y ← [4, 5, 6]] | x ← [1, 2, 3]]
>>773 単純にリスト内包表記をネストすれば良かったのね・・・
ありがとうございましたm(_ _)m
「Programming with Arrows」というドキュメントを読んでいるのですが、 (このタイトルでググればすぐに見れます) [1.3 Arrows as computations] の後半辺りが理解できません (5ページ目 But whereas monadic computations are・・・の辺り) monadic computation は出力の型だけパラメタ化されて、 入力の型ではパラメタ化されない 一方 arrow computation は入力も出力もパラメタ化される、とあります また、そのため、先のページで例示したストリーミングの arrow は(SF 型)、 arrow だからこそ表現でき、monad では表現できない例だとあります この辺りの意味がよく分かりません 特にストリーミングの arrow が monad では表現できないという意味がわかりません 分からないなりに考えてみたのですが、 arrow ==> runSF (arr (+1)) [1..5] (同ドキュメントの4ページ目) monad ==> [1..5] >>= (\x -> [x+1]) これは、arrow と同じ computation を monad で表現できるが、 arrow ==> delay x = SF (x:) (同ページ) monad ==> ??? これは monad の中だけでは表現できない、ということなんでしょうか? (もしそうだとしても、入力もパラメタ化できる事との繋がりがまだモヤモヤしてる)
そろそろ haskell行者 とか scalaモヒカン があらわれても良い頃。
ラグビーをみてるとHaskellって選手が現役イングランド代表にいるよ。 今度日本に助っ人としてくるみたい。
perl-ninjaさん (id:perl-ninja) の今日の☆レポートです。
本日の☆ : 1
ただいまの☆総数 : 33
■ 洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Has
http://b.hatena.ne.jp/perl-ninja/20110804#bookmark-2860059 hinassan (id:hinassan) ☆
〜 ☆をくれた人に「カラースター」でお返ししよう! 〜
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか? 大切な相手に特別な思いを伝えたい!カラースターを活用してみませんか?
>>775 reactiveみたいなFRPもある種のストリームプロセッシングとみなす事ができるよ
そしてそういうのは大抵MonadやApplicativeのインスタンスを持ってるから
工夫は必要だけど不可能というわけでも無いと思う
>>775 (>>=) :: Monad m => m a -> (a -> m b) -> m b
の第二引数の最初の引数が m で包まれてないので
>>= を実装するために m a から a を取り出せる必要がある
この条件が Arrow に比べてできないことが増えてる
これがMonadでは入力がパラメタ化されていないということ
>>780 MonadはArrowの特殊な場合
一般には、ArrowはMonadではないってところが重要
Monadになっている時点でArrowの能力全部を使っていないはず
Programming with Arrows では、Monadでは表現できなくてArrowでは表現可能なストリームの例がある
783 :
782 :2011/09/24(土) 13:46:11.79
あーArrowガン無視だからこの話題は別問題だなぁ ごめん忘れて
Haskell を使ったアプリケーション プログラムの設計を解説したものってないんかな 枝葉の技術を解説したり実検したサイトやブログはよくあるんだけど、 ひとつアプリを作ってみましょうってのは見当たらないよね その中で、何を目的にして、何を考えて、どう設計しているのか、 解説してるのがあるといいんだけど
日本人は数学を苦手とする人が多いから Haskellの理論を学ぶだけで精一杯で まっとうなアプリという形まで仕上げられる人が少ないんだと思う。 かくいう俺も今のところ簡単なテキストフィルタを作るので精一杯だな。
いや、べつに英語でも構わないんだが
今の所、今までの手続き言語のほうがGUIに向いてるからじゃないか? CUIなら引数を与えて動かすだけだけど、GUIはユーザーの指示をひたすら待たないといけない。 そこがHaskellにとっては不得手なんだろ。 言語が抽象的すぎて実感がわかないのと、他の言語でも同じ事できるし。 インタラクティブに弱いのかも。
ごめん、GUI でなくてもいいんだ 例えば darcs の思想の話は本家サイトからたどって見れるんだけど、 実際にソースコードを追って、こういう設計で作ってるんだという解説が見当たらない オープンソースなんだから読めばいいだろとよく言われるんだが、 やはり分かっている人の道案内が欲しい 自分で言って気がついたが、Haskell ソースのガイドをしてくれる人っていないの?
>>785 他の言語以上に数学が必要だろうか?haskellでアプリ作るのに。
haskellで作った実行ファイルってexeなんですか?実行環境にもランタイムライブラリとかいりますか?
elf だったり runghc スクリプトだったりもします
>>791 Windows で ghc を使ってコンパイルするのなら exe です。
基本的には実行環境にランタイムライブラリは不要です。
つまり、デフォルトでは実行ファイル exe に全て詰め込まれます。
ただし、外部ライブラリ(たとえば LAPAC とか GTK とか)を使ってるのなら、
それらの DLL などが必要になります。
と思ってるけど、違ってたらゴメンね
>>793 GUIとか使うとmfc*.dllとかcomctrlとかいるのかなあと。ていうかそもそもHaskellでWindowって作れるのか・・
>>790 いらないよ。
モナドだのアローだのとオナニーする気がないなら数学とか関係ない。
入出力のたびにオマジナイが必要な、単なる面倒臭い言語なだけだから。
>>784 > Haskell を使ったアプリケーション プログラムの設計を解説したものってないんかな
オナニー言語にそんなもんあるわけない。
枝葉の解説しかないのは、枝葉以外は「普通の」言語と同じ設計で済むからだろ
RWH とか読んだのか?
あんなんで実用の例になってると思うわけ?さすがスーパーオナニスト集団w
801 :
hajimehoshi :2011/09/25(日) 09:26:56.31
みんなやってるから俺もやる 社内のエンジニアがHaskellやってるから 仲間はずれにされるのが怖い 俺は数学もできないバカだけど はてな民、LL業界人の話題あわせでやっている 話ができなくなるから、Haskellやってないと舐められる 「え?エンジニアなのにHaskell知らないの?」 そう全部あのせい あの記事が悪い 「本物のプログラマはHaskellを使う」っていう記事があった こいつのせいだ こいつのせいでLL界のやつらは洗脳された これがなければ俺はHaskellをやる必要がなかった クソったれが この記事が存在するために Haskellをやってないと本物のプログラマではない ”にわかプログラマ”っていうレッテルを貼られてしまう 残念なことだ ちなみにアニメにもはまっている、 マドカまぎか それとブラウザ三国志にもはまっていた 社内ではやったから 君たちは洗脳されている Haskellをやっても意味がない 踊らされている 気づけ Perl忍者のコメントで洗脳が解除された perl-ninja 洗脳されてるよお前ら気持ち悪い うざい 死ね死ねしんでくれねーか? こういう記事書くやつうざいんだよ 早く死ね なにが本物のプログラマはだよ つけこみやがって Haskell学ばせる工作か?
実用実用と喚いてるバカはどの程度の内容を期待してるんだ? 書いてあるソースコードをコピペすればそのまま動くなにかが手に入る、サルでもできるレベルか?
流行ってるからやるってのは何の問題もないよな むしろ偉い
>>801 ぐだぐだ長文うざいんだよ
Haskellやってろ糞ったれが
>>801 そういう時期はもう過ぎてると思うんだがなぁ・・・
自分は切欠はそう言うものでも、今は純粋に気に入って使ってる。
出せないってことは相当クズなことやってんだろうな 小物
気に入らないんだったら、JavaだろうがC++だろうがご自由に利用して 作ればいい。それだけの話。他人にあれこれ言うもんじゃないよ。
809 :
デフォルトの名無しさん :2011/09/25(日) 11:21:41.22
>>801 お前が無能だから知らないとバカにされるんだろ
責任転嫁してんじゃねーよ屑
また新しい人格でも誕生したのか?
>>798 > 枝葉以外は「普通の」言語と同じ設計で済むからだろ
本当にそうだろうか
実際に「普通の言語と同じ設計手法」を用いて
なにかアプリを作る解説が皆無なのはなぜだろうか
例えばソフトウェア工学で普通に学ぶような理論の多くは(OOADなど)、
現在の普通の言語(オブジェクト指向が普通に表現できる言語)を対象にしてる
だから普通の言語なら、それらの言語にそのまま翻訳すれば、
たいていは問題なくその理論の力を十分に発揮できる
でも Haskell だと(他の関数型や論理型言語などの事は知らん)
そのまま翻訳して利用するという訳にはなかなかいかない
そのまま翻訳した結果としてよるよくある失敗は、
どうしても明示的に保た(管理し)なければならない状態の数が多くなって、
かつ散らばり、かつその多くの状態が保たれる寿命が長くなるというもの
(さらには保つ必要のない状態まで残ってしまう事もあるが、これは設計手法とは別話)
この辺りは、改善策をちょっとしたトイプログラムやスニペットで示すことは難しい
アプリケーション全体の設計でどう Haskell で表現するかを示す必要があると思う
枝葉以外は普通の言語と同じ設計で済むのなら問題なくできるはずだが、俺には難しい
まぁだから解説はないかなと探しているんだが・・・
812 :
デフォルトの名無しさん :2011/09/25(日) 13:53:17.62
>>802 都銀勘定系の構築事例の2,3も挙げてもらえると。
てことはJavaも.NETも実用じゃないのか。 実用の例を上げてもらえるかね。
とりあえずhajimehoshiっていうやつは コテあげてここに書き込むアホってことがわかった
実用じゃない言語ってCASL?
某M社の系列企業のサーバに侵入して色々持ち出したとかいう話は聞いた
>>816 これで二十歳過ぎらしいからな
プログラミングとは残酷なものだね
まあHolyGrailはもっとゴミクズって証明されてるけどね
>>806 https ://gitorious.org/carettah
Perl忍者はssig33やotsuneより断然まとも。 ちなみにスレ違いだろ。 Perl忍者の話題は他でやれ。
これからPerl忍者と書き込むやつは、全員Perl忍者
NGしろ
かわいそうだからできない
もっと長いコードはないの? それだと話にならないよ
>>826 Perl忍者はお前みたいな下等な分際と話もしたくないだろ
perl忍者はperlユーザーの評判を下げるためのrubistな工作員だろ
こんにちは、なんかスレ荒れてますね
なんか自分が書き込むと荒れます すみません
川上っていうやつ気持ち悪いな
hajimehoshiもわかってんだろ?
わかったなら することはわかるな?
暗殺だ
忍者プロダクションのスパイは日本のあらゆる企業にスパイがいるんだけどな
ドワンゴにはhajimehoshi
おっと これ以上は言えないが
始末しとけ hajimehoshi
ドワンゴ・川上量生氏との特別対談企画「ゲーマーはもっと経営者を目指すべき!」を本日よりスタート。第一回めのテーマは「世の中で一番面白いゲームは現実」
http://www.4gamer.net/games/000/G000000/20110922039/
こりゃ、川上消えそうだな
見たけど茶髪が似合ってないなw ズラかw
1968年生まれってwikipediaにあったけど1986の間違いじゃないの? なんか童顔すぎる。^^;
Haskellのネットワークプログラムは速いし簡潔だといわれているので、 Erlang/OTPみたいな監視系含んだフレームワークがあると実用的になると思うんだが。(もしかしてある?)
そろそろ捜査の手が伸びる
今更かもしれんけど、現実世界ハスケルを手に入れた。
>>838 どうせなら、「Haskell」も漢字にしようぜ。
『現実世界 覇洲懸瑠』 雄雷莉 出版
男塾にでてきそうな固有名詞になった
猛納怒
>>839 失敬。ハスケルって漢字にするのは難しい。^^;
それより ハスケルおっぱい のほうが豊満そうでいい。意味不明
仮想世界に行けるプログラミング言語はありますか?
吉里吉里かNScripterあたり
ネトウヨの同族嫌悪がどうかしたか?
えっ、ねとうよ!?
他墳留 里垂兎 矮-魂尾寧汰
Matzさんこっちです
セカンドライフとか必死にわめいてたやついたけど バカだよな 気持ち悪かった情弱だとおもった 土地かってるやつとか リンデンスクリプトやってるバカとか 気持ち悪かった
セカンドライフとかほざいてた情弱と Node.jsとかjavascript!!とかわめいてる社会のクズを見ると 惨めだわ セカンドライフの情弱と通じるものがあるよなjavascriptバカは
s/javascript/haskell/
Continuation モナドって実用的? 使ったことある人いる?
haskellを勉強してるけど、型言語やのに、抽象化はかなり強力やね。 抽象化が強力な言語って阿呆な人に使いこなせないから普及しにくいのかな。
また忍者が沸きそうなことを
>>854 Haskellはニュージャージー・アプローチじゃなくて、どっちかと言えばMITアプローチだからじゃね?
個人的にはQIがお奨め。
HaskellやOCamlはヨーロッパ風
>>853 実用的ってどういう意味で言ってる?
強力なモナドだし、実行効率もそんなに悪くないけど、
コードが読み難くなりがちなのを嫌ってなるべく使わないようにしていると、
結果的に出番が少ない、というのが俺の印象
859 :
853 :2011/10/01(土) 11:10:58.00
>>858 うーん‥・ そもそも継続の使いどころが分からないっていうか‥・
手続き型言語だと広域脱出っていうのはたしかにやりたいときがあるんだけど、HaskellだとMaybeモナドとか、もっと馴染んだ道具のほうが使いやすい。
広域脱出以外だと、Schemeで継続を使ったステートフルなHTTPサーバのコードとか見たことあるけど、堅牢そうには思えなかった。
つまり、「関数呼び出しも、関数からのリターンも継続なんですよ!」みたいに一般化しなければ、継続の使いどころって広域脱出しか思いつかない。
でも、Haskellだと広域脱出なんてMaybeモナドで充分(つねに充分とはいえないが、継続みたいな難しいものを導入するほどではない)。
それなら、Continuation モナドはどういうときに使うんだろう、という感じ。
‥・とここまで書いてきた分かった。
要は、オレが継続を自家薬籠中のものにしていないから、怖がっているだけか。
先日の継続チュートリアルに来れば良かったのに。 限定継続によってHaskell的に「お行儀をよくした」継続が可能になったわけで。
限定継続ってprintf以外に使い道あるの?
coroutineの実装とか?
久しぶりにhaskellスレ覗いた。 読むのがめんどくさいから今のスレの話題を3行にまとめて。
ビーフ チキン ポーク
忍者 uy 民明書房
限定継続のチュートリアル見ると printfとかcoroutineとかバックトラックとかstateモナドが例に出てたけど 個人的にはどれも既存の実装や代替品で十分なので魅力的に見えないんだけど 限定継続やってる人は何に使おうと思ってるの?何が魅力なの? 応用なんてどうでもいいという意見とかなら それはそれでいいけど
型付きがポイントなんじゃないの? 何も違わない?
バックトラックに関してはリストモナドを使った場合より性能が出ることがあるらしい
gtk2hsのTreeViewでセル上にマウスポインタをかざした時に セルのテキストをツールチップで出したいんだけど 無理かな?
clojureスレでも限定継続の話題が 同時多発限定継続テロ?
蓮麩羅リリースが遅れてるな 毎度のように遅れるなら前もって遅めに宣言しとけよ
875 :
853 :2011/10/02(日) 13:37:39.30
>>873 サーセン、関数型言語スレ同時に読み書きしてるんで。
(ついでにscalaの限定継続プラグイン使ったakka dataflow APIの話も気になった)
じゃんけんゲーム作ろうとしてるんだけど、どうもmain関数が上手く書けない・・・ 鬼門はIO付の関数・・・ 誰か、main関数書いて完成させてはくれまいか・・・
以下、コード import IO import Char import Random data Te = G|V|P|Other deriving (Eq, Show, Read) data Hantei = Win|Lose|Aiko deriving (Eq, Show, Read) strToTe str | (toLower (head str)) == 'g' = G strToTe str | (toLower (head str)) == 'v' = V strToTe str | (toLower (head str)) == 'p' = P strToTe _ = Other intToTe i | i == 1 = G intToTe i | i == 2 = V intToTe i | i == 3 = P isWin m com | m == com = Aiko isWin m com | (m == G) && (com == V) = Win isWin m com | (m == V) && (com == P) = Win isWin m com | (m == P) && (com == G) = Win isWin _ _ = Lose janken s i = isWin (strToTe s) (intToTe i)
main = do hSetBuffering stdout NoBuffering s <- putStr "input te> " >> getLine i <- randomRIO (1,3) :: IO Int print $ janken s i
>>879 あいこでも続かず停止してる・・・
まあ、でも取り合えず動くから、これを手がかりに改良していきます。
thx
適当なFRPライブラリを使って試しに作ってみるか・・・
lift系を知らずに戸惑ったとか?
877 :デフォルトの名無しさん:2011/10/03(月) 01:38:16.75 じゃんけんゲーム作ろうとしてるんだけど、どうもmain関数が上手く書けない・・・ 鬼門はIO付の関数・・・ 誰か、main関数書いて完成させてはくれまいか・・・ ↑ はあ・・・
式の簡約の仕方や順番について質問です 次のようなデータ型と関数があるとします data A = A Int f :: a -> b -> ・・・ -> A Int g :: A Int -> Int -> b g (A x) y = [関数 g の計算] 関数 f はいくつかの引数を使って A Int 型の値を計算します 関数 g は A Int 型と Int 型の値を使って適当な b 型の値を計算します 第2引数が 0 以外の場合、x を使って b 型の値を計算しますが、 第2引数が 0 の場合、b 型の値を計算するのに x は全く利用しません ここで、次のような式の場合、 x = g (f ・・・) 0 g (f ・・・) 0 を [関数 g の計算] に簡約し始める前に、 g の第2引数を (A x) にパターンマッチさせる為に、 先に f ・・・ を (A x) の形になるまで簡約されるのでしょうか それとも、まず g (f ・・・) 0 が [関数 g の計算] の形に簡約され、 [関数 g の計算] の中で (A x) の x が必要になってから、 それから (f ・・・) が (A x) の形になるまで簡約されるのでしょうか もしそうなら、上記の式の場合は第2引数が 0 なので (f ・・・) は簡約されませんよね 今回の場合は、遅延パターンマッチではないので前者の簡約順になる と私は思っているのですが合ってますか、それとも、どちらも間違いですか
885 :
884 :2011/10/03(月) 20:49:24.37
>>884 すいません、提示する式の型シグネチャを間違えました
data A = A Int
f :: a -> b -> ・・・ -> A
g :: A -> Int -> b
g (A x) y = [関数 g の計算]
です
まぁ、意味は汲み取ってもらえると思いますが
実験すりゃいいやん data A = A Int f :: () -> A f = undefined g,h :: A -> Int -> () g (A x) y = () h ~(A z) y = ()
887 :
884 :2011/10/03(月) 23:06:04.65
>>886 あぁ、なるほど
遅延パターンでないと、やはり先に (A x) の形にまで簡約されますね
ありがとうございました
@sudotan の ReTweet
40 FOLLOWERS
http://twitter.com/sudotan/ 都内の某私立校に通う中学生です。プログラム勉強中です。\nよろしくおながいします
はてなID
rokujyouhitoma
ニックネーム
rokujyouhitoma
自己紹介
nickName: とぅーる, ろくじょー
name: Tohru Ike
姓名:池徹
よみ:いけとおる
誕生日:1984年11月9日
(a.b) x = x + 1 a x = x + 2 から、bを創りだすことって出来るんでしょうか?
891 :
853 :2011/10/04(火) 12:00:21.37
>>890 中学生レベルの数学じゃなイカ?
(a.b) x = x + 1
a (b x) = x + 1 ∵ (f.g) x = f (g x)
(b x) + 2 = x + 1 ∵ a x = x + 2
b x = x - 1
>>879 コードできた
>>878 に以下のコード追加で動きます。
ありがとうございました。
jankenMain = do
hSetBuffering stdout NoBuffering
s <- putStr "input te> " >> getLine
i <- randomRIO (1,3) :: IO Int
let kekka = janken s i
if kekka == Aiko then jankenMain else print kekka
main = do
jankenMain
「簡約!λカ娘」か 同人誌読んで頭痛くなったの初めてだ
適当に書き換え規則を与えることでそれを計算機に解かせる方法については知りたい
Prolog?
ノートに手作業で簡約の様子を書いていくと、無限ループに陥って簡約が完了しない でも、ghci などで実行するとちゃんと値が返る なので、手作業簡約の方が100%間違っているのは分かるが、どこがおかしい? 以下の定義のもとで、 import Control.Arrow import qualified Control.Category as C newtype SF a b = SF {runSF :: [a] -> [b]} instance C.Category SF where id = SF (map id) SF g . SF f = SF (g . f) instance Arrow SF where arr f = SF (map f) first (SF f) = SF (unzip >>> first f >>> uncurry zip) nstance ArrowChoice SF where left (SF f) = SF (\xs -> combine xs (f [y | Left y <- xs])) where combine (Left _:xs) (y:ys) = Left y : combine xs ys combine (Right x:xs) ys = Right x : combine xs ys combine [] _ = [] h f = C.id ||| (f >>> h f) 次の式の簡約の様子が知りたい runSF (h (arr undefined)) [Left 1] ==> [1]
898 :
897 :2011/10/04(火) 20:46:12.72
>>897 一番外側の関数から弱頭部正規形へ順に変換していくことを意識して簡約したら、
次のようになったんだけど、どこかがおかしいはず
プロポーショナル フォントだと式が見難くなるので、ここだけの省略文字を定義する
undefined => ⊥ C.id => cid C.id => . (最後の式だけ、SF の合成と関数の合成に同記号を使った)
Arrow 関係の演算子の簡約はライブラリ ドキュメントのソースのデフォルト定義をもとにした
また、細かな簡約手順は所々で端折った(端折った部分があやしかったら指摘してほしい)
runSF (h (arr undefined)) [Left 1]
[1]==> runSF (cid ||| (arr ⊥ >>> h (arr ⊥))) [Left 1]
[2]==> runSF (cid +++ (arr ⊥ >>> h (arr ⊥)) >>> arr untag) [Left1]
[3]==> runSF (arr untag . (cid +++ (arr ⊥ >>> h (arr ⊥)))) [Left1]
[4]==> runSF (SF f1 . (left cid >>> right (arr ⊥ >>> h (arr ⊥)))) [Left1]
f1 = map untag
[5]==> runSF (SF f1 . right (arr ⊥ >>> h (arr ⊥)) . left cid) [Left1]
[6]==> runSF (SF f1 . arr mirror . left (arr ⊥ >>> h (arr ⊥)) . arr mirror . left cid) [Left 1]
[7]==> runSF (SF f1 . SF f2 . left (h (arr ⊥) . arr ⊥) . arr mirror . left cid) [Left 1]
f2 = map mirror
[8]==> runSF (SF (f1 . f2) . left (h (arr ⊥) . arr ⊥) . arr mirror . left cid) [Left 1]
この後、 left (h (arr ⊥) . arr ⊥) を簡約して SF f の形にもっていかないといけないと思うが、
そうすると h (arr ⊥) を SF f の形に簡約しないといけなくなり、循環してしまう
4の時点でSFでてきてるからそこで(.)を簡約すればrunSF . SFが取れるんじゃね?
あー8か、まぁいいや あとは.は結合規則成り立つから適当に()挿げ替えたら(.)の展開によってarr mirrorが簡約できる状態になるからそこで SFを一番外に持ってこれてrunSFが外せるはず 最外簡約といっても書き換え規則は使えるからな、処理系でも実際に使ってるし
runSF (left undefined) [] = {leftを展開} runSF (SF (\xs -> combine xs (⊥ [y | Left y <- xs]))) [] = { runSF, beta} combine [] (f ...) = { combine [] } [] さてleft (h (arr ⊥) . arr ⊥) はどう展開されるでしょうかっていう
そしてnewtypeをdataにかえてみて同様の式を評価すると・・・
>>903 IOモナドだと、
f x = 何か >>= f x'
の形の再帰は末尾再帰になってスタックを消費しない
905 :
897 :2011/10/05(水) 07:56:13.93
>>900-902 ありがとうございます
今初めて知りました
(今まで何となくやってたことを理解したといった方がいいか)
data A = A Int
newtype B = B Int
f (A x) = 0
g (B x) = 0
この場合、f undefined は例外が発生し、g undefined は 0 が返る
つまり g のパターン (B x) の B は単に型を識別するための飾りで、
B 型にマッチするかどうかを調べるだけで、
B x というパターンにマッチするかどうかではない、ということですね
>>897 の方も考え方を正して、どうなるか調べてみます
>>904 会社から帰って来るまでにレスが付けば良いかと思いきや、早い回答ありがとうございます
do以下で再帰をループ替わりに使うのもどうかと思って居たのですが、あまり心配しなくて良いと言う事ですかね?
どちらにしても、もっとスマートな方法が有ったら知りたいですが。。。
>>906 つFRP
あと外部に貼るならskydriveよかhpasteがいいよ、軽いし
今の所一番簡単に使えるのはElereaなんでそれを使って書くとこんな感じ
qが入力されると終了するだけの簡単なものだけど雰囲気はつかめると思う
IOが伴うものを扱う場合は大体どんなFRPでもこんな構成になる筈
入力が無い場合に繰り返すときの処理を飛ばすとかもちょっと変更すればできる
import FRP.Elerea.Simple
import Control.Applicative
import Control.Arrow (second)
untilM_ p m = do { p' <- p <$> m ; if p' then return () else untilM_ p m }
main = do {
; (str,strUpdater) <- second (getLine>>=) <$> external ""
; loop <- start $ return $ (=="q") <$> str
; untilM_ (==True) $ strUpdater >> loop
}
普通にforとかwhileすりゃいいのに わざわざ末尾再帰だの余再帰だのにするとか 何の罰ゲームだかw 挙げ句にちょっと手を入れただけで末尾再帰が検出されないという罠w バカがハサミを持つとはこの事だ
わざわざforとかwhileとか使わなくてもmapとかfoldとか使えばいいじゃん
どーせデータ構造作るたびにmapやfold実装するんだろ? そのたびにforやwhileが使えずに再帰の微妙な最適化に頼るんだろ? それがハサミを使うバカっつーのw
forとかwhileってどこにあんの?
>>910 > どーせデータ構造作るたびにmapやfold実装するんだろ?
そんなことする必要ありません
>>914 Haskellでは再帰を使うのはクールじゃない。
>>912 へー、どんなデータ構造でもなにもしなくてもmapやfoldがつかえるのかー
クスクス
>>915 じゃあfoldrみたいなコンビネータ使って?
>>917 それと必要ならStateモナドも使う。
fmap活用しないの?
よく知らないけど-XDeriveFoldable使えばfoldを実装しなくてもいいんじゃないの?
922 :
897 :2011/10/05(水) 21:01:32.67
>>900-902 ちゃんと簡約できました
newtype と data の違いが理解できました
newtype A = A Int
というのは、同じ Int 型でもコンパイル時に他の Int 型と区別する為に
単に A というラベルが付いているだけなんですね
(で、コンパイルされたら A というラベルは剥がされる)
だから、
f (A x) = 0
a = A 1
f a
という場合、f a は a が A 型ならそれだけで f (A x) = の (A x) にマッチする
そして、= 0 で x の値は使われないから、x つまり A 1 の 1 の部分は評価されない
あとは、map f xs という式なら、map の定義が map f (x:xs) = なので、
まずは xs の部分を (:) x xs の形に簡約しようとする
これら2つの事を意識して芋づる式に簡約していったら、ちゃんとできました
ありがとうございました
こいつらって、小さいことばっかりやってるよね 画面に文字が表示されて 「わーあーわーわー!!」 みたいな 自分ではHaskellやってますとかアピールしちゃって、「お、知的好奇心あるな」 って思われたいんだろうけど やってることがバカだし そもそも2chに書き込んでて、書き込み内容からみると頭が残念で”下手な横好き”程度なんだろうなって思ってしまう バカだよな Haskellやって知的好奇心ありますアピール、プログラマとしての美徳を感じながらHaskellを触ってるバカども 早く死ねばいいんじゃない?
いいぞもっとやれ
言ってることが当てはまっててもなおやめないw 自分の意思を貫いて、いくら無駄、役に立たない、非実用的 お前みたいなバカがやっても何も生産性がない ただの自己満足、知的好奇心ありますアピール、でも続ける 物凄い底辺技術者のゴミプライドだと思う その多くの気持ち悪いプライドを支えているのは はてな民や、LL民の「Haskell万歳制」 Matzが「次世代の言語にHaskellをあげていたのもそう」 「本物のプログラマはHaskellを使う 」っていう記事 これがHaskellプログラマの美徳を作り出してる 何か迷ったら、Haskellをバカにされたら MatzやLL民、はてな民で人気あるんだ IT業界はMatz,LL民、はてな民の言うとおりだ!!だからHaskellは凄い!!って思い込む そして、ボロクソいわれたら 「本物のプログラマはHaskellを使う 」 っていう記事を思い出して一人で、美徳に浸る 俺は本物のプログラマなんだHaskellをやってるからって 気持ち悪いな早く死ねよいい加減 お前らさ?バカなのによくやってられるよな
図星すぎて死ねる
目覚ませよ
眠い、カフェインが足りない 誰かメタンフェタミンくれ
>>925 > っていう記事を思い出して一人で、美徳に浸る
ごめん。バカな底辺プログラマなんで、難しい日本語、よく分からないや。
haskellが分かりやすくて便利だから使う。それだけだ。 もっと分かりやすくて便利な言語が現れたらそっちを使う。 haskell使ってる奴が気持ち悪くてバカだと思うなら良い言語紹介してくれよ。
だから、何に対してわかりやすく便利なんだ? 言ってみろよ 何に対して便利なのか言ってみろゴミ
>>931 俺にとって分かりやすく便利なんだよ。
早く俺が分かりやすく便利だと思う言語紹介してくれよ。
だから便利の意味わかってる? 便利・・・目的を果たすのに都合のよいこと。あることをするのに重宝で、役に立つこと。 っで目的ってなに? 早く言えよゴミ
>>933 守秘義務により回答は差し控えさせていただきます。
都合が悪くなるといつもそうだよなジャプp 早く死ね イエローがしゃしゃりでてんじゃねえよカス ただ漠然とやってるバカ研究者気取りは気持ち悪いな本当に ただの足し算、クソゲー作って満足してる脳みそか 新しい言語でてもサンプル程度動かして満足して2chに聞いてるバカの軍勢早く死ぬべきだなクズが 糞ジャップは死ね
さあ、早くhaskellより良い言語紹介してくれよ
言葉遣いをわかってないレスなんてスルーすりゃいいのに。 相手にするからつけあがるんだろ?
Haskellと同等以上に型に頑固で、高い抽象性のあるコードが書けて、型推論が強力で、コミュニティがでかくて、周辺ツールとライブラリが充実してる言語教えてくれ。
「煽れば教えて貰える」厨ってまだ生息していたんだな。胸熱。
なんで日本人に限定するの? 寧ろ仕事でHaskell使ってカスコード量産してるのは外国人の割合が高いと思うけど 仕事でHaskell使ってる日本人が滅茶苦茶少ない的な意味で
日本のIT産業はアメリカより数十年遅れてる。
ココまで全部俺の自演。ふう、さすがに疲れたぜ。
日本人に限定するとか言っちゃう時点でジャップ 外国人見てるふうにほざいてるけどジャップ 紛れもなく海外旅行+滞在100回未満 幼少期、欧米に住んだことないジャップ
ジュップジュップ
ジョブズ死亡だが、また一つ面白い会社が終わったな。
森首相のときのイット革命で著しく前進したよ
フランスに渡米したい
100回も外国に行く機会なんてそうそうないと思う。
俺のおばさん5年間で韓国へ100回以上行ったよ
なんか日本プライド持ってるやついるみたいだよなw アニメ・漫画がマスコミとかで取り上げられて 世界で日本=漫画・アニメみたいになって 誇らしげに日本文化だ!! サブカルチャー!! とかほざいて ツイッターとかアニメアイコンにしたり マドマギとか言ってる痛い連中 まじイエローが母国愛丸出しの気持ち悪いジャプpにしかみえねーわw イエローがよw何で息してるのか?イエロージャップがw ITは欧米にもボコボコだしw ジャップは生まれつき殆どのやつが貧乏、小金もちで英語ができないしw 哀れだよなw ITもゲームもだめじゃねえかw芸術産業は世界的にみてクソだとしか言いようがないw 何にしてもだめだなw食品もw ジャップにすむと考えも低レベルになりそうだがw 気持ち悪いバカ愚民たちの考えの同調圧力w 流行w ごみみたいだなwジャップは
過剰な自虐も日本の文化
>>950 日の丸をtwitterアイコンの下に入れてる奴が時々いるけど、
大抵頭のおかしいやつだね。
>>952 あれみてると日の丸の冒涜にしか見えない連中が日の丸を掲げてるとしか
思えない時がある。
忍者でも欧米人でも欧米かでもいいけど、コテハンつけてくれよ
>>950 そうだね、君の言うとおりだと思う。
日本人は自分で自分たちをすごいと言わないと自信が持てない民族なんだよな。
ここは自然言語処理とファジー論理を使って忍者とかuy臭いレスを検出してあぼーんする2chブラウザをHaskellで作るべき
twitter時代に新しい2chブラウザを作る価値が果たしてあるのだろうか。
>>956 ベイジアンフィルターをつかったスパム対策なんて参考になると思ってたん
だけど誰もやってないよね。
おもしろ法人カヤックだっけ? 全然おもしろくないじゃん 社員みたら、どいつもこいつもチョン顔 チョン顔って知ってる? 欧米人は顔の彫りが深いから、視覚的に感情表現がわかりやすくて 笑ってる、うれしい、怒ってるの感情が豊かだけど 面白法人とか名乗ってるカヤックとかさ、日本人はチョン顔ばっかりじゃん 顔が薄くて、表現がよくわからねえわw だから、おもしろくなくない?つまらないよね おもしろいって感情表現が豊かな顔なんだよ チョン顔はつまらないってこと そもそもアジアって コミュニケーション 英語力 脳みそ 身長 体格 声 性格 食文化 全てにおいてごみだよな なんか、道に迷ってる人がいて 欧米人とアジア人が声をかけたら どれくらいの人が道を教えてくれるかっていうので 断然白人のほうが上
だからお前らジャップなんだよw hopihajimeの顔面みたか? チョン顔じゃん 怒ってるんだか、冷静なのか よくわからない つまらなそうな顔 やっぱりアジアは感情表現がダメだな つまらなそうにみえる だから”おもしろい”とか名乗ってウケ狙わないとダメなんだと思う必死に
書き込みの99%がブロックされる。
2chだろうがしたらばだろうが個人の掲示板だろうがtwitterだろうがfacebookだろうがその他SNSだろうが 全部、取ってくるデータの形式とこちらから発信するデータの形式さえ適当に定めてれば同じように購読、発信できるような抽象を考えてる 取ってくるだけならそれpla(死語)でいけるんだけど
お前らそんな下らないことで騒いでる場合じゃないぞ。 CERNふぇニュートリノが光速を上回る実験結果が出たそうだ
Perl忍者を利用すれば、物凄いビジネスができる気がしてならん 工作もしてくれるしな
ニュートリノはよく知らないが三色トリノは好きだった
タイムマシンを作る巨大プロジェクトで仕事が増えるかもしれない。
ジョブズも死んだことだし、haskellでタイムマシンを再実装だ
さて、話を仕切り直そう。 このスレでHaskellで100行以上プログラミングしたことがある人どのくらいおる?
行数という古い指標を持ち出すような人間にhaskellの理念が理解できるはずがない
971 :
970 :2011/10/06(木) 16:49:33.27
っていうか、Parsec使っていると縦に長くなるから、100行くらいすぐいく。
2KB以上プログラミングしたことがある人どのくらいおる?
100行くらいはすぐに行くけど、このスレのことだから(ry と 思ってね。 Lispとはまた違った抽象化が楽しいプログラミング言語だなと思った。 データ構造を作っていじるのはすごく面白いかも。 でも使いこなせる人ってそこそこたかいIQがないと厳しそう。
>>972 UTF-8として、ソースで2048字以上ってこと?
100行よりも少なそうだが…
他人の書いたHaskellプログラムって読めるものなの? 俺職場でOOPで実装しただけでアスペルガ扱いされてるから 抽象化された世界を理解されない苦しみをこれ以上味わいたくない かといって阿呆が書いたP*言語のメンテするのもいやだ
適当なパッケージのソースコードでも読んでみたら? 読みにくいのはとことん読みにくいから
>>975 > 他人の書いたHaskellプログラムって読めるものなの?
他の言語と比較して、っていうことだよね?
そういうのは大部分が慣れの問題であり、かついわば「どこまで読みたいか?」というのに依存するけど、
中置演算子を自由に定義できる、関数をいつでも中置記法化できる、というのはかなりのアドバンテージだと思う。
>>972 あるよ
今作ってんのと過去に作ったガラクタ
記号や中置演算子の定義し過ぎは読みにくいと思う
英語のSVOに準じた形になってる時は欧米の人にとって 自然に理解できるんだろうよ。<中間表記 記号 難しいよな。読み方も .|. とかみてると ぽこちん とか >=> をイカ とか言ってそうだもん。
ForthやLispが、中置記法がないせいでどんだけ不人気だよ
なんとなく取ってきたコードが IO で素朴に書いてあると安心する
本物のHaskellerはコメントを書かない
痛いよ・・・足捻挫したよ・・・ 痛い痛いよ・・・
>>986 遅延評価だから足を必要とするまで直らないよ。
いやむしろ、足を必要とする迄、痛みを感じないのでは?
足を必要とするまで捻挫しないだろ
もはや嫌がらせの領域
息はして無いけどパターン認識の分野の肥やしにはなってる
993 :
デフォルトの名無しさん :2011/10/07(金) 11:59:56.47
死ぬのが怖くて生きられない
ファジー理論じゃなくてファジー論理じゃないかと。
なんか メンヘラー がこのスレに常駐してしまったのだろうか。 スレと関係ない話題は少しくらいならいいけど・・・
実質忍者達と遊ぶスレですから Haskellの話題はあくまで彼等を呼び寄せるエサなんです
次スレ立ってないのに雑談は勘弁してほしいわ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。