板検索:
関数型プログラミング言語Haskell Part28 (1000)
まとめビュー
1
デフォルトの名無しさん[sage]   投稿日:2015/04/10 01:30:32  ID:KZNYLMbm.net(4)
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
http://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part27
関数型プログラミング言語Haskell Part27_
コメント2件


2
デフォルトの名無しさん[sage]   投稿日:2015/04/10 01:36:19  ID:KZNYLMbm.net(4)
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
http://en.wikibooks.org/wiki/Haskell

Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters

Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/

(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
https://wiki.haskell.org/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86...

Haskell - Wikibooks (先述Wikibooksの日本語版。未編集の項目、多)
http://ja.wikibooks.org/wiki/Haskell

Programming in Haskell
http://www.sampou.org/cgi-bin/haskell.cgi

Haskell のお勉強
http://www.shido.info/hs/

Haskell Programming
http://www.geocities.jp/m_hiroi/func/haskell.html

本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/

[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog

3
デフォルトの名無しさん[sage]   投稿日:2015/04/10 01:39:03  ID:KZNYLMbm.net(4)

4
デフォルトの名無しさん[sage]   投稿日:2015/04/10 01:41:33  ID:KZNYLMbm.net(4)

5
デフォルトの名無しさん[sage]   投稿日:2015/04/10 09:33:29  ID:xXBTN+Xq.net
どちらが正統か?

6
デフォルトの名無しさん[sage]   投稿日:2015/04/11 10:52:03  ID:PPihF5HG.net
銀河帝国正統政府()

7
デフォルトの名無しさん[sage]   投稿日:2015/07/14 07:57:08  ID:dR+Nasf+.net(5)
このスレを実質「関数型プログラミング言語Haskell Part29」として活用します。
前スレ(Part28)のレス数が1000になってから利用してください。
以下、テンプレ。

8
デフォルトの名無しさん[sage]   投稿日:2015/07/14 07:57:56  ID:dR+Nasf+.net(5)
関数型プログラミング言語 Haskell について語るスレです。

haskell.org (公式サイト)
https://www.haskell.org/

前スレ
関数型プログラミング言語Haskell Part28

9
デフォルトの名無しさん[sage]   投稿日:2015/07/14 08:00:30  ID:dR+Nasf+.net(5)
過去スレ一覧
27) http://peace.2ch.net/test/read.cgi/tech/1420718555/
26) http://peace.2ch.net/test/read.cgi/tech/1406436392/
25) http://peace.2ch.net/test/read.cgi/tech/1393313450/
24) http://toro.2ch.net/test/read.cgi/tech/1382705669/
23) http://toro.2ch.net/test/read.cgi/tech/1376111807/
22) http://toro.2ch.net/test/read.cgi/tech/1364009659/
21) http://toro.2ch.net/test/read.cgi/tech/1358702176/

10
デフォルトの名無しさん[sage]   投稿日:2015/07/14 08:00:59  ID:dR+Nasf+.net(5)
20) http://toro.2ch.net/test/read.cgi/tech/1350428908/
19) http://toro.2ch.net/test/read.cgi/tech/1340760070/
18) http://toro.2ch.net/test/read.cgi/tech/1331902463/
17) http://toro.2ch.net/test/read.cgi/tech/1325510368/
16) http://toro.2ch.net/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.net/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.net/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.net/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.net/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.net/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.net/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.net/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.net/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.net/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.net/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.net/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.net/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.net/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.net/test/read.cgi/tech/1013846140/
01) http://pc.2ch.net/tech/kako/996/996131288.html


11
関連サイト[sage]   投稿日:2015/07/14 08:02:02  ID:dR+Nasf+.net(5)
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
https://en.wikibooks.org/wiki/Haskell

Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters

Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/

(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
https://wiki.haskell.org/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86%E3%83%83%E3%83%97

Haskell - Wikibooks (上記Wikibooksの同タイトル日本語版。多くの項目が未編集)
https://ja.wikibooks.org/wiki/Haskell

Programming in Haskell
http://www.sampou.org/cgi-bin/haskell.cgi

Haskell のお勉強
http://www.shido.info/hs/

Haskell Programming
http://www.geocities.jp/m_hiroi/func/haskell.html

本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/

[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog

12
デフォルトの名無しさん[ageteoff]   投稿日:2015/07/14 19:51:26  ID:V8pOZFXs.net
関連書籍検索一覧 (「米」はamazon米国、主に洋書。「日」はamazon日本、主に和書)

Keyword = "Haskell"
「米」 http://www.amazon.com/s/?url=node%3D3839&;field-keywords=Haskell
「日」 http://www.amazon.co.jp/s/?url=node%3D492352&;field-keywords=Haskell

Keyword = "functional programing" 「米」 | "関数 プログラミング" 「日」
「米」 http://www.amazon.com/s/?url=node%3D3839&;field-keywords=functional+programing
「日」 http://www.amazon.co.jp/s/?url=node%3D492352&;field-keywords=%E9%96%A2%E6%95%B0%20%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

----
テンプレは以上です。

13
デフォルトの名無しさん[sage]   投稿日:2015/07/15 20:55:40  ID:70iQnSqB.net
新たなるオライリー本か?
http://www.amazon.co.jp/dp/B00TN97BE2/
コメント1件

14
デフォルトの名無しさん[sage]   投稿日:2015/07/16 18:27:15  ID:gee943jx.net
>13
どさくさ宣伝乙。 帰って、どうぞ

15
デフォルトの名無しさん[sage]   投稿日:2015/07/18 01:57:00  ID:wQVOOXnd.net
変なAAが貼ってある方のスレは隔離スレなのか?
こっちよりレス伸びてるけども
コメント1件

16
デフォルトの名無しさん[sage]   投稿日:2015/07/18 20:49:05  ID:8uXNBMZf.net
>15 本来の意図は違うと思うが、隔離スレにしたほうが良いからそうしようぜ

17
デフォルトの名無しさん[]   投稿日:2015/11/10 07:03:48  ID:RJS+i6XX.net(2)
foo 0 = 〜
foo 1 = 〜
foo x = 〜
って書くのと

foo x
| x == 0 = 〜
| x == 1 = 〜
| otherwise = 〜
って書くのと

オススメな記述ってどっち?
使い分け方のヒントみたいなのあったりする?
それとも完全に好みの問題?

18
デフォルトの名無しさん[]   投稿日:2015/11/10 07:24:21  ID:tbHGFOTY.net
範囲で分けるとき下使ってる
コメント1件

19
デフォルトの名無しさん[sage]   投稿日:2015/11/10 15:09:26  ID:+Ply0ARe.net
パターンマッチはガード条件よりも出来ることが狭い。
なるべく狭い意味の機能を使った方が意図を特定しやすい。
よって、可能ならば前者の方が望ましいと思う。

でもまあ、そんなに厳密なもんじゃないよ。
それを原則としつつも見易いと思う方を柔軟に選ぶしかないんじゃないか。

20
デフォルトの名無しさん[sage]   投稿日:2015/11/10 19:45:40  ID:RJS+i6XX.net(2)
>18-19

21
デフォルトの名無しさん[]   投稿日:2015/11/13 21:46:49  ID:wOHg++fH.net
       自民党 対 国民!  死者数、戦時なみに!


川崎病の年間患者数、史上最高に 1万5千人を突破、ピーク時を超える 最初の報告は水爆実験後。本当の原因は被曝
震災以降に死亡者数が、第二次大戦に匹敵するほど急増している
厚生労働省によると平成23年から平成25年の累計死亡者数は360万人以上に急増。今の日本は太平洋戦争時の時と同じくらいの勢いで人が亡くなっている
https://twitter.com/tokai amada/status/664927655544795136

除染袋回収の作業員5人 疲労で動けず、自衛隊など救助  疲労じゃないだろう、被曝障害だろうよ 死んだように眠る人々(写真多数)
http://s.ameblo.jp/kaito000777/entry-12031605335.html

【川島なお美の食べて応援が恐怖すぎる】自宅でも進んで食べて応援
1年後・軽くぶつけただけで肋骨骨折 2年後・眼球から出血は半年に一度 3年後・胆管に腫瘍、血液検査は異状無し 4年後・逝去 夫は片目失明、愛犬もがん
https://twitter.com/2ch_NPP_info/status/648256313571479552

・・・ 今も、原子力緊急事態宣言中… 対策本部長は安倍首相。


        安倍が国民を被爆させながら核兵器を密造している!?

三菱商事の核ミサイル担当重役は安倍晋三の実兄、安倍寛信 三菱重工の重役でもあるらしい
これがフクイチで核弾頭ミサイルを製造していた疑惑がある 書けばツイッターで速攻削除されている
https://twitter.com/toka iamada/status/664017453324726272

安倍晋三の兄が関与している三菱重工 核開発疑惑について いくつかツイートしたが、反応がないから変だと思って、自分のタイムラインを調べてみたら、
完全に削除されていた 私のツイートで、安倍政権に都合の悪い情報は速攻削除されている これは驚いた ここまでやるのか
https://twitter.com/toka iamada/status/664016524592574464

先ほど、まだ数分以内に、三菱重工の核開発疑惑について、いくつかツイートしたが、検索しても出てこない 多くの人のタイムラインに出てこない ツイート直後に消されてしまったようだ
https://twitter.com/toka iamada/status/664015521830952960

22
デフォルトの名無しさん[]   投稿日:2015/11/30 04:16:13  ID:3yHpaj1I.net
data Foo = Foo {}

で{}の中身がない場合ってどういう時に使うものなのでしょうか

23
デフォルトの名無しさん[]   投稿日:2015/11/30 08:16:05  ID:yyLLqUKU.net
【 オンラインTCGエディター 】 >1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正。

機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。

下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
【報酬制カード】DUELEAGUE【デュエリーグ】13 /ラウンジクラシック板-13

24
デフォルトの名無しさん[sage]   投稿日:2015/12/22 00:36:50  ID:JyKdzAuM.net
この記事の宣伝か何か?


本物のプログラマはHaskellを使う 日経ソフトウエア
第58回 Cの配列をHaskellで利用する 2013/08/07
http://itpro.nikkeibp.co.jp/article/COLUMN/20130806/496825/

25
デフォルトの名無しさん[sage]   投稿日:2015/12/27 20:26:50  ID:Uc9cUKER.net
coqに比べたらhaskellなんかオモチャだわ。

26
デフォルトの名無しさん[sage]   投稿日:2016/01/12 20:04:56  ID:uxklQDbX.net
構文解釈にバグがあったらコンパイル通るんじゃねえの

27
デフォルトの名無しさん[sage]   投稿日:2016/01/12 20:25:39  ID:3+klCnXk.net
こういうのも誤爆って言うのかね

28
デフォルトの名無しさん[]   投稿日:2016/01/31 13:36:39  ID:AKL8QDPC.net
すごいH 批判されてるときあるけど
具体的な話は聞いたことがない
どのへんがどうダメなのか解る人いますか?

俺は擁護も批判もできないレベルなんでなんも言えないw

29
デフォルトの名無しさん[]   投稿日:2016/01/31 16:19:13  ID:gaE4MpDR.net
自動的に処理を並列化してくれるというところに俺は魅力を感じますね。
メニーコア時代には32Kコアプロセッサが普通になる。
そうなるとHaskell以外の選択肢が無いんですよ。
コメント1件

30
デフォルトの名無しさん[sage]   投稿日:2016/01/31 18:20:42  ID:d3QvGQc6.net
>29
メニーコア,メニーコア,っていうけど haskell の実装がメニーコアにすでに適用している事例はあるの?
個人的には clojure の STM のような,具体的なカラクリのアイディアがない haskell が並列化に対応できるようになるとは思えない

haskell のこの方面での将来性は,ない
コメント3件

31
デフォルトの名無しさん[sage]   投稿日:2016/01/31 18:32:52  ID:4aqfDNg2.net
健全でない言葉が含まれているため表示しません 内容を確認する

32
デフォルトの名無しさん[sage]   投稿日:2016/01/31 19:23:48  ID:F9NTpP4r.net
健全でない言葉が含まれているため表示しません 内容を確認する

33
デフォルトの名無しさん[]   投稿日:2016/01/31 21:23:02  ID:9irTPz61.net(2)
>30
>個人的には clojure の STM のような

STMとか普通にあるんだけど……

34
デフォルトの名無しさん[]   投稿日:2016/01/31 21:25:39  ID:9irTPz61.net(2)
>30
>haskell の実装がメニーコアにすでに適用している事例はあるの?

「適用 apply」と「適応 adapt」を間違える日本語の不自由な子が増えてるよね
それにしてもまだ日本語がおかしいけど

それはともかく、並列性のボトルネックがないソフトェアならGHCでわりと
素直にスケールするのも知らんのかしら

35
デフォルトの名無しさん[]   投稿日:2016/01/31 21:45:08  ID:zyH0pBzu.net
メニーコア時代にはHaskell以外すべて淘汰されるんですよ。

36
デフォルトの名無しさん[sage]   投稿日:2016/02/04 13:53:14  ID:UJ/Pq+8G.net
ここが実質Part 30でいいんだろうか

>1
■前スレ
関数型プログラミング言語Haskell Part29

37
デフォルトの名無しさん[sage]   投稿日:2016/02/05 05:19:19  ID:xfnoaCBb.net(2)
関数型言語の話題って素人の衒学家が多いのは何でなんだろうな
とりあえず触ってみりゃ欠点もそれなりに多い事に気づくと思うが
コメント1件

38
デフォルトの名無しさん[]   投稿日:2016/02/05 08:38:32  ID:19bi+l7A.net
そりゃ関数型言語の話題で玄人ってのはCSの一部にしかいないからだw

39
デフォルトの名無しさん[sage]   投稿日:2016/02/05 20:24:20  ID:xfnoaCBb.net(2)
玄人がいないって意味じゃねえよ…
極端だな

40
デフォルトの名無しさん[sage]   投稿日:2016/02/05 20:24:21  ID:/MC0YSt9.net
tanakhがHaskellで仕事してない時点で察しろ

41
デフォルトの名無しさん[]   投稿日:2016/02/05 21:00:17  ID:CS7E051N.net
>37
欠点と言っても、本質とは関係ないからな。
Haskellに討ち滅ぼされた雑魚言語に絡まれるとかその程度。
唯一完成された言語だし、Haskell以外はすべて淘汰される。

42
デフォルトの名無しさん[sage]   投稿日:2016/02/06 00:34:56  ID:AtWB76qi.net
また胡乱な方向付けに

43
デフォルトの名無しさん[sage]   投稿日:2016/02/06 00:55:24  ID:bnndf23C.net
Haskellがすでに淘汰済みの残照な気が。

44
デフォルトの名無しさん[sage]   投稿日:2016/02/06 06:38:48  ID:qHjkJ1/w.net
前スレからわざと混乱するようなこと書いてるアホがいんだよ、無視しろ無視

45
デフォルトの名無しさん[sage]   投稿日:2016/02/06 12:06:40  ID:wrmjFiB3.net(2)
そういえば無視というのは「見ない」ではなく「だんまり」って意味なんだよな
逆に「だんまり」といって相手を煽るのは「無視するな」ということ

46
デフォルトの名無しさん[sage]   投稿日:2016/02/06 14:20:26  ID:wrmjFiB3.net(2)
ignore m = m >> return () -- 戻り値を無視するが副作用を無視しない

ignore' _ = return () -- 全て無視

47
デフォルトの名無しさん[]   投稿日:2016/02/06 18:58:32  ID:4z0/BkxB.net
アスペか糖質か

48
デフォルトの名無しさん[sage]   投稿日:2016/02/07 08:09:04  ID:cU6bDpiy.net
荒らしに反応するとき、荒らしもまたこちらに反応するのだ。byニーチェ

49
デフォルトの名無しさん[sage]   投稿日:2016/02/07 09:44:32  ID:fEVoSTHz.net(2)
荒らしだと気付いてない奴がいるんだからしゃーなし

50
デフォルトの名無しさん[sage]   投稿日:2016/02/07 10:09:33  ID:/7Z+PXON.net
俺は個人的にはキャメル形式よりスネーク形式の方が断然好きなんだが、
Haskell のライブラリってなぜか知らんがキャメル形式で統一されてるよね。

プログラムを組むときは形式を統一すべきと言われる。
いろんな形式が混ざってると吐き気を催す人もいるらしい。
俺もやっぱり良い気はしない。

そこで、自分でプログラムを組むときは、
ライブラリの公開されている識別子を全てスネーク形式にしたラッパーを作り、
それを import してるんだが、これはキモイ?


もちろん、グループで組むときはみんなに合わせるし、
hackage に公開するライブラリはキャメル形式にするつもりだ。

51
デフォルトの名無しさん[sage]   投稿日:2016/02/07 11:22:18  ID:fu54F6yL.net
健全でない言葉が含まれているため表示しません 内容を確認する

52
デフォルトの名無しさん[sage]   投稿日:2016/02/07 11:47:12  ID:yu9AA7dR.net(2)
正解が一つだから統一すべきって奴はキモイ
どれでも同じだから統一を手伝ってやるから金払えって奴は有能

53
デフォルトの名無しさん[]   投稿日:2016/02/07 15:08:08  ID:/PqCUlOY.net
OCamlは駱駝のくせにスネークなんだよな
個人的にはキャメルの方が好きだが
そもそも簡素でわかりやすい一語の識別子を使えばどっちもいらない

54
デフォルトの名無しさん[sage]   投稿日:2016/02/07 18:19:17  ID:yu9AA7dR.net(2)
filenameがcase-sensitiveじゃなかったりするから大文字を使わない方が安全だとか
もともとOS依存に否定的だった場合は面子を保つために敢えて大文字を使うとか
コメント1件

55
デフォルトの名無しさん[sage]   投稿日:2016/02/07 23:08:45  ID:fEVoSTHz.net(2)
hlintはスネークケースを叱るよね

56
デフォルトの名無しさん[]   投稿日:2016/02/08 00:14:06  ID:K7vwFuB3.net
>54
その理屈はおかしい
ファイル名が case-insensitive だったところで
その言語(の識別子)が case-sensitive なら関係がない
コメント1件

57
デフォルトの名無しさん[sage]   投稿日:2016/02/08 11:56:14  ID:+KLQd2tl.net
>56
ファイル名と直接関係あるのはモジュール
ただしモジュールと型が癒着していたり型と関数が癒着していたりすると影響が広がる

58
デフォルトの名無しさん[sage]   投稿日:2016/02/09 20:08:55  ID:T+WeLdAU.net(2)
Haskellコンパイラをメイクするには前バージョンのHaskellコンパイラが要るんですよね?
じゃあ前バージョンのHaskellコンパイラをメイクするには前々バージョンのHaskellコンパイラが要るんですよね?
ということは、GCCからArmで動くHaskellコンパイラをメイクするには、C/C++で書かれた最後のバージョンのソースコードを探してきてそこから順番にメイクで辿って行かなきゃならないんですか?

59
デフォルトの名無しさん[sage]   投稿日:2016/02/09 21:07:41  ID:p2mta7H7.net
健全でない言葉が含まれているため表示しません 内容を確認する

60
デフォルトの名無しさん[sage]   投稿日:2016/02/09 22:01:01  ID:T+WeLdAU.net(2)
ひぇ

61
デフォルトの名無しさん[sage]   投稿日:2016/02/09 22:06:42  ID:T/GcQe87.net
代数データ型のレコード名に困る。

data Common = Cmn Int String

data Type1 = T1 {num :: Int, cmn :: Common}
data Type2 = T2 {name :: String, cmn :: Common}

これだと当然 cmn 関数が2つ定義されてるからコンパイルエラーになる。

これの回避策として、cmn 関数をメンバに持つ型クラスを作る方法があるが、
オブジェクト指向のクラスのように型クラスを使うのは何か違う気がする。

かと言って、あとは両者の cmn で名前を変える方法しか思いつかない。
そりゃ終域が同じでも定義域が違うのだから別の関数になる理屈は分かるが、
関数の意味は同じなんだけどなぁ・・・

どうしたものか。
何かいい案はない?
コメント3件

62
デフォルトの名無しさん[]   投稿日:2016/02/09 23:37:31  ID:bzuQoNTa.net
冗談だよね? クロスコンパイラ知らない奴がいるわけ?

>61
これは確かにHaskellのクソな点のひとつ
列多相(row polymorphism)が必要なので標準のHaskellではできない

GHC 7.12 でOverloadedRecordFields拡張が入って
お望みのことができるようになるが、それまで待てないなら
http://nikita-volkov.github.io/record/
というライブラリを検討してもいいかもしれない
コメント1件

63
デフォルトの名無しさん[sage]   投稿日:2016/02/10 01:32:51  ID:v+PYUzVT.net(3)
Type1とType2の型は同じなんだけどなぁ

data Type0 a = T0 {uncmn :: a, cmn :: Common}
num t1 = uncmn t1 :: Int
name t2 = uncmn t2 :: String
コメント1件

64
デフォルトの名無しさん[sage]   投稿日:2016/02/10 01:41:32  ID:Jpj0GH1T.net(2)
なんだこいつ

65
デフォルトの名無しさん[sage]   投稿日:2016/02/10 16:17:31  ID:v+PYUzVT.net(3)
型の宣言には属人性があって、2種類の型を宣言する人もいれば1種類で済ます人もいる
コメント1件

66
デフォルトの名無しさん[sage]   投稿日:2016/02/10 20:32:03  ID:wJ3QdPqe.net
みんなありがと。

>62
GHC 7.12 のリリースはまだ当分先だと思うから、record を試してみるよ。


>63
誤解させたようですまん。
>61 の例はあくまで例で、実際は Type1 と Type2 で持っているレコード数が異なるんだよ。

あと、それって

type Type1 = Type0 Int
type Type2 = Type0 String

ということ?
Type0 Int と type0 String は別の型じゃないの?


>65
ごめん、もう少し噛み砕いて説明してくれると助かる。
どういこと?
コメント1件

67
デフォルトの名無しさん[sage]   投稿日:2016/02/10 20:55:10  ID:Jpj0GH1T.net(2)
>66
7.12は8.0になったんだった。すまん。
つい数日前にRC2まできたんで、もうすぐリリースされる。
ただ、OverloadedRecordFieldsが完全に入るわけじゃないようだ

https://ghc.haskell.org/trac/ghc/wiki/Records/OverloadedRecordFields/...

8.0ではこれがまだ入らない。
当面はおとなしくrecordsライブラリを使うのがいいかもな

68
デフォルトの名無しさん[sage]   投稿日:2016/02/10 22:27:56  ID:v+PYUzVT.net(3)
よく考えたらprivate変数のようなものを作る方が簡単だった
public変数はもうどうでもいい

newCounter = do {
n <- newIORef 0; -- private
return (readIORef n >>= \ k -> writeIORef n (k+1) >> return k)
}
main = do {
counter <- newCounter;
counter >>= print;
counter >>= print
}

69
デフォルトの名無しさん[sage]   投稿日:2016/02/11 00:56:05  ID:Nd3tdnXb.net
モナドが理解できなくて10年近く悩んでいる。
理解できれば死んでもいい。
コメント1件

70
デフォルトの名無しさん[]   投稿日:2016/02/11 01:23:45  ID:WmGIDCmu.net
これからはHaskellの時代だから頑張って理解したほうが良いよ。

71
デフォルトの名無しさん[sage]   投稿日:2016/02/11 01:55:29  ID:s0UUbhTE.net(2)
IO、Maybe、Listをそれぞれ具体的に理解したら、それらに共通する
抽象的構造が漠然と理解できるようになる。話はそれからだ。

Functorを理解してApplicativeを理解すればMonadはすぐそこ。
MonadにできてApplicativeに出来ない事例をIOやListで書いてみれば、
Monadの意味もわかる。

72
デフォルトの名無しさん[sage]   投稿日:2016/02/11 05:05:08  ID:UHi7AMAe.net
何を以てモナドを理解したことになるのか
コメント1件

73
デフォルトの名無しさん[sage]   投稿日:2016/02/11 09:54:22  ID:mcDetqD3.net
>72
入門書や解説書のモナドの章を「自分の言葉で書ける」ようになり、
なおかつ、読者が「なるほど」と言ってくれれば、自分は理解できてるなと安心できる。

74
デフォルトの名無しさん[]   投稿日:2016/02/11 10:39:05  ID:2qMTPVuS.net
Monadが理解できないならプログラミングやめちまえよ。
迷惑だわ。

75
デフォルトの名無しさん[sage]   投稿日:2016/02/11 10:41:07  ID:RWcQtaIC.net(2)
サンクは二回以上評価しても同じなので必要なら一回だけ評価してメモ化するよね
IOは毎回結果が異なるので一回で終わらないがそれ以外はサンクと同じ物だよね
モナドは何の変哲もない型クラスだね
コメント1件

76
デフォルトの名無しさん[sage]   投稿日:2016/02/11 10:48:22  ID:4PPMlVIJ.net
モナドは窓を持たず
ただ表象するのみ

77
デフォルトの名無しさん[sage]   投稿日:2016/02/11 15:22:54  ID:Ijn2TjOB.net
また胡乱な方向へ

78
デフォルトの名無しさん[sage]   投稿日:2016/02/11 15:33:12  ID:g2tgmyMx.net(2)
>75
違う

79
デフォルトの名無しさん[sage]   投稿日:2016/02/11 18:41:59  ID:RWcQtaIC.net(2)
いずれにせよ教える側に悪い奴がいるのは事実だよ
この状況でみんな善人ということはありえない

80
デフォルトの名無しさん[sage]   投稿日:2016/02/11 19:33:58  ID:s0UUbhTE.net(2)
この人、統合失調かなんかなの?

81
デフォルトの名無しさん[sage]   投稿日:2016/02/11 20:01:48  ID:ZGIjujTB.net
ただのバ

82
デフォルトの名無しさん[sage]   投稿日:2016/02/11 20:19:46  ID:g2tgmyMx.net(2)
いやキ

83
デフォルトの名無しさん[sage]   投稿日:2016/02/11 22:32:37  ID:h5Y5qyZF.net
いやケ

84
デフォルトの名無しさん[sage]   投稿日:2016/02/12 22:34:57  ID:Az+dNpcd.net
いやロー

85
デフォルトの名無しさん[]   投稿日:2016/02/13 18:30:17  ID:zeyk14CL.net
暗いと不平を言う前に進んで火を付けましょう。

86
デフォルトの名無しさん[sage]   投稿日:2016/02/13 19:25:49  ID:tYDOUXsU.net
ボワッ!

カジダー! ワー

87
デフォルトの名無しさん[sage]   投稿日:2016/02/13 19:50:06  ID:/Hz5ypwN.net
そして胡乱な方向へ(言ってみたかっただけ

88
デフォルトの名無しさん[sage]   投稿日:2016/02/14 12:00:16  ID:iEUC0Mwt.net(2)
不平には問題提起の意味があります
問題提起する前に解決しましょうって言われたらどう思いますか
コメント1件


89
デフォルトの名無しさん[sage]   投稿日:2016/02/14 12:50:37  ID:T34rz49+.net
>88
だったら、本人たちには適切に問題提起をする能力がないのだから、
あんたが代わりに翻訳して、普通の人に分かるように問題提起してくれよ。

でなきゃ、ただのノイズとして見逃される。
コメント1件

90
デフォルトの名無しさん[sage]   投稿日:2016/02/14 13:37:03  ID:iEUC0Mwt.net(2)
>89
それを誰に言いたいですか
言いたい相手はもう見つかっていますね
見逃されるというのは嘘ですね

91
デフォルトの名無しさん[sage]   投稿日:2016/02/14 13:46:14  ID:vmByG/Xl.net
そしてうどんな昼食へ

92
デフォルトの名無しさん[sage]   投稿日:2016/02/14 15:13:51  ID:cqB0Nh3J.net(2)
そうか。

93
デフォルトの名無しさん[sage]   投稿日:2016/02/14 15:22:10  ID:cCh+B9qI.net
糖質さんに付きまとわれてるHaskellかわいそう

94
デフォルトの名無しさん[sage]   投稿日:2016/02/14 16:04:41  ID:XEWxVYXa.net(2)
2ちゃんはオワコンだとしてお前ら普段どこでHaskellの話してるの
コメント1件

95
デフォルトの名無しさん[sage]   投稿日:2016/02/14 16:06:28  ID:XEWxVYXa.net(2)
英語でいいとこ教えて

96
デフォルトの名無しさん[sage]   投稿日:2016/02/14 17:35:47  ID:cqB0Nh3J.net(2)
Google+

97
デフォルトの名無しさん[]   投稿日:2016/02/14 22:21:56  ID:zI7ECB9O.net
data Hoge = Hoge {
a :: {
b :: Int
}
}
こんな感じで宣言する方法はないのでしょうか?
用途はネストしたJSONへの変換です。

98
デフォルトの名無しさん[sage]   投稿日:2016/02/16 22:19:56  ID:sJ0P3nVA.net
data A t = A {a :: t}
data B t = B {b :: t}
data Hoge = Hoge {
hoge :: A (
B Int
)
}
コメント1件

99
デフォルトの名無しさん[sage]   投稿日:2016/02/17 03:41:21  ID:1UNcQaMi.net
誰かが坂道発進は難しいと言うと苦手意識が形成され苦手になってしまう
誰かがS字・クランクは難しいと言うと苦手意識が形成され苦手になってしまう
誰かがポインタは難しいというと苦手意識が形成され苦手になってしまう
誰かがモナドは難しいというと苦手意識が形成され苦手になってしまう
コメント1件

100
97[]   投稿日:2016/02/17 10:06:32  ID:quIHvTl+.net
>98
別で定義してあげる必要があるんですね。
ありがとうございます。

101
デフォルトの名無しさん[sage]   投稿日:2016/02/17 10:47:00  ID:N32mDm+m.net
モナドって名前を意識する前から色々知ってた奴らは
九合目辺りまで無意識というか意識低いから簡単なんだよ

102
デフォルトの名無しさん[sage]   投稿日:2016/02/17 14:43:49  ID:xZS1HXec.net
九割知っても目標に届かなければ何も知らないのと同じとかいって
ゴールしか見ないからスタートラインを弄ることを思いつかない

103
デフォルトの名無しさん[sage]   投稿日:2016/02/17 16:37:41  ID:+oxsYRhZ.net
胡乱トーク

104
デフォルトの名無しさん[sage]   投稿日:2016/02/17 20:02:43  ID:qMJfKGhR.net(3)
f :: Int -> String
定義域 Int の元と終域 String の元とを対応づける関数

g :: Int -> Int -> [Int]
定義域 Int の元と終域 Int -> Int の元とを対応づける関数

と考えることに異を挟む人は少ないと思う。
(正確には、終域にはボトムも元として含むだろうが)

では、

h :: String
定義域は空集合と考えても問題ないだろうか。

105
デフォルトの名無しさん[sage]   投稿日:2016/02/17 20:04:22  ID:qMJfKGhR.net(3)
>99
訂正

g :: Int -> Int -> [Int]
定義域 Int の元と終域 Int -> [Int] の元とを対応づける関数

106
デフォルトの名無しさん[sage]   投稿日:2016/02/17 21:43:32  ID:qMJfKGhR.net(3)
いや、定義域が空集合だなんて馬鹿げたことがあるわけがない。

この場合の定義域は要素がただ一つだけの何かだろう。
それが省略されているだけだ。
そう考えればつじつまが合う。

みんなのおかげで自己解決できた。
ありがとう、感謝する。

107
デフォルトの名無しさん[]   投稿日:2016/02/17 22:00:25  ID:/+olwn0P.net
よし、今日も布教活動頑張るぞ!

108
デフォルトの名無しさん[sage]   投稿日:2016/02/18 00:15:24  ID:NoBWmHQb.net
なぜ定義域が欲しいのか、胡乱だ
それがわからないとKleisliやArrowも胡乱になる

109
デフォルトの名無しさん[]   投稿日:2016/02/19 22:07:21  ID:LvuG0cXK.net
よし、今日も布教活動頑張るぞ!

110
デフォルトの名無しさん[]   投稿日:2016/02/20 20:10:48  ID:hxPxeUMY.net
布教活動がんばるぞい!

111
デフォルトの名無しさん[sage]   投稿日:2016/02/20 20:45:29  ID:pvUNCsFm.net
布教したら逆布教されて、今ではすっかりJavaScripterです。

112
デフォルトの名無しさん[sage]   投稿日:2016/02/20 21:02:23  ID:kXmEjnOB.net
haskellは原理主義すぎてelixirに逃げ出しました。
コメント1件

113
デフォルトの名無しさん[]   投稿日:2016/02/20 21:17:04  ID:Xi17WzDF.net(3)
よし、今日も布教活動頑張るぞ!

114
デフォルトの名無しさん[sage]   投稿日:2016/02/20 21:50:09  ID:JIrwRLWR.net
Haskell と JavaScript と Erlang は競合しないと思う
どれかを使うと別のモノを使わなくなるという仕事をしてる人は、どれをやらなくても困らないからプログラミングやめればいいとおもう
コメント2件

115
デフォルトの名無しさん[sage]   投稿日:2016/02/20 22:06:23  ID:5dzdENdK.net
>114
JavaScriptは応用範囲はHaskellと競合はしないけど、こんなクソ言語が書けるかぁっ!
となってマトモなaltJSを探しに旅立ってしまうのでわりとHaskellと排他的な気がする

HaskellからElixirに逃げ出したと称する>112がまったく意味不明なのはその通り

116
デフォルトの名無しさん[sage]   投稿日:2016/02/20 22:59:49  ID:WjN+AF9T.net
確かにクソ言語なんだが、慣れてくるとこれでいいやと思えてくる
それがjs

117
デフォルトの名無しさん[]   投稿日:2016/02/20 23:57:13  ID:Xi17WzDF.net(3)
神々の言語と糞言語を比べるのが間違い。

118
デフォルトの名無しさん[]   投稿日:2016/02/20 23:58:28  ID:Xi17WzDF.net(3)
>114
それは素人考え。
Haskellさえあれば他は要らない。
玄人ならこう考える。

119
デフォルトの名無しさん[sage]   投稿日:2016/02/21 00:36:20  ID:60OzU5Vm.net
https://github.com/i-tu/Hasklig
haskell使ってる人はfontもこだわりが?

120
デフォルトの名無しさん[sage]   投稿日:2016/02/21 01:20:54  ID:UfOP8/7O.net
Hasklig いいよね

121
デフォルトの名無しさん[sage]   投稿日:2016/02/21 03:44:54  ID:Ppx8wqFy.net
たまにこういうのが来るから、スレから離れられない

122
デフォルトの名無しさん[sage]   投稿日:2016/02/21 16:03:45  ID:nQxbvp7F.net
たのしい

123
デフォルトの名無しさん[sage]   投稿日:2016/02/23 22:59:37  ID:IWj7+wz0.net
すみません質問なのですが、文献で
[0, 1, 2, 3]を[[0],[0,1],[0,1,2]にしてくれる
便利な関数があったのですが

fn :: [a] -> [[a]]
fn [] = []
fn (x:xs) = [x] : map f (fn xs)
where f lt = x : lt

リストにmapを掛けてconsしてまた再帰呼出など
初心者の自分には仕組みが今一つ掴めないです。
もっと簡単に理解できて同様の事ができる関数は
ありえますでしょうか?
コメント4件

124
デフォルトの名無しさん[sage]   投稿日:2016/02/24 01:18:41  ID:eE6/28/I.net
>123
これでどうでしょう

(\y -> map (\x -> take x y ) [1..(length y)]) [0,1,2,3]
コメント2件

125
デフォルトの名無しさん[sage]   投稿日:2016/02/24 01:37:17  ID:b4ze5Byr.net(2)
>124
ありがとうございます。
試してみます。
コメント1件

126
デフォルトの名無しさん[sage]   投稿日:2016/02/24 02:03:00  ID:TK8B6JFM.net
>123

fn :: [a] -> [[a]]
fn xs = scanl1 (++) $ map cons xs
where cons x = [x]
コメント1件

127
デフォルトの名無しさん[sage]   投稿日:2016/02/24 02:04:52  ID:+WgOrOxz.net(2)
>125
fn [] = [[]]
fn (x:xs) = map (x:) $ [] : fn xs

で書ける。要するに

fn [0, 1, 2, 3] = [ [0], [0,1], [0,1,2], [0,1,2,3] ]



fn [1, 2, 3] = [ [1], [1,2], [1,2,3] ]

から作る方法がわかればこの関数は素直な再帰で書けるわけ。
で、それには後者の頭に空リストを足して [ [ ], [1], [1,2], [1,2,3] ] を作り、
これの各要素の頭に 0 をくっつければいいわけだ。
この操作を一般的に書けば上の定義の2行めになる。
コメント1件

128
デフォルトの名無しさん[sage]   投稿日:2016/02/24 02:15:22  ID:+WgOrOxz.net(2)
>123のコードも若干手順前後があるが同じことをしている。
>123のコードは

fn [1, 2, 3] = [ [1], [1,2], [1,2,3] ]

に対して、まず各要素の頭に0をくっつけて

[ [0,1], [0,1,2], [0,1,2,3] ]

を作り、最後にこのリストの頭に[0]をくっつけて

[ [0], [0,1], [0,1,2], [0,1,2,3] ]

を得ている。それを一般的に書いただけ。
コメント1件

129
デフォルトの名無しさん[sage]   投稿日:2016/02/24 04:35:56  ID:dFLtbL+c.net
import Data.List (inits)

main = print . drop 1 . inits $ [0, 1, 2, 3]

[[0],[0,1],[0,1,2],[0,1,2,3]]
コメント1件

130
デフォルトの名無しさん[sage]   投稿日:2016/02/24 09:33:53  ID:6CE9DY8K.net
やった! Emacs でも Haskligできた!
http://lpaste.net/153250

131
123[sage]   投稿日:2016/02/24 21:51:07  ID:b4ze5Byr.net(2)
>124
>126
>127
>128
>129
どうもありがとうございます。
学習の参考にさせて頂きます。

132
デフォルトの名無しさん[sage]   投稿日:2016/02/25 16:51:57  ID:Tf/tuDHy.net
>94 亀だけど英語でいいなら irc (freenode #haskell) は結構盛んみたいですよ
コメント1件

133
デフォルトの名無しさん[sage]   投稿日:2016/02/26 03:11:34  ID:xtcDhLHf.net
>132
ありがとうございます

134
デフォルトの名無しさん[sage]   投稿日:2016/02/28 14:49:27  ID:VpGcPiMB.net(2)
ghciでputStrLn

135
デフォルトの名無しさん[sage]   投稿日:2016/02/28 15:08:47  ID:VpGcPiMB.net(2)
上の書き込み失礼。2chに文字列リテラル打てなくなったのですかね
codepad.org/K6saiwGy
parsecで日本語文字列を出力したいのですがコードを実行すると
index \12411\12370\12405\12364
のように数値で日本語文字列が出力されてしまいます
これはどういう風にすればうまくいくのでしょうか
グーグルと格闘していますがなかなか解決できません
コメント1件

136
デフォルトの名無しさん[sage]   投稿日:2016/02/28 21:42:18  ID:wqm/iHx2.net
>135
show val の show を削除する

valは そもそもUTF-8を格納した String なのにそれに show を使ったせいで
UTF-8 リテラル文字列になってしまっている

putStrLn "index ¥12411¥12370¥12405¥12364"



putStrLn $ show "index ¥12411¥12370¥12405¥12364"

は違うということ
コメント1件

137
デフォルトの名無しさん[sage]   投稿日:2016/02/29 20:32:33  ID:KkDNedMO.net
esqueleto の groupBy 関数について質問です。

persist で Day 型のカラムを作ったのですが、
esqueleto の groupBy 関数を使って月ごとにグループ分けすることは可能でしょぅか。
単純に groupBy に Day 型のカラムを渡すと日ごとにグループ分けされてしまいます。

138
デフォルトの名無しさん[]   投稿日:2016/02/29 23:26:11  ID:q7VWC7Ji.net(3)
Haskell初心者です。
質問なのですが、

recQuery :: BS.ByteString -> String -> IO BS.ByteString

parseDnsMessage :: BG.BitGet DnsMessage

resolveName :: [Word8] -> [Word8] -> BS.ByteString -> String
resolveName qname name bstr = do
let newbstr = BSL.toStrict $ replace (BS.pack qname) (BS.pack name) bstr
retbstr <- recQuery newbstr rootServer4
let msg = BG.runBitGet retbstr parseDnsMessage
case msg of
Right m -> (intercalate

139
デフォルトの名無しさん[]   投稿日:2016/02/29 23:28:09  ID:q7VWC7Ji.net(3)
Right m -> (intercalate "." $ map show (rdata $ head $ answer $ m))


Couldn't match expected type ‘[BSI.ByteString]’
with actual type ‘IO BSI.ByteString’
In a stmt of a 'do' block:
retbstr <- recQuery newbstr (head rootServers4)
In the expression:
do { let newbstr
= BSL.toStrict $ replace (BS.pack qname) (BS.pack name) bstr;
retbstr <- recQuery newbstr (head rootServers4);
let msg = BG.runBitGet retbstr parseDnsMessage;
case msg of {
Right m
-> (intercalate "." $ map show (rdata $ head $ answer $ m)) } }

このような場合どのように書くのが適切なのでしょうか?
よろしくお願いします。

140
デフォルトの名無しさん[]   投稿日:2016/02/29 23:28:12  ID:q7VWC7Ji.net(3)
2重書き込みのため表示しません 内容を確認する

141
デフォルトの名無しさん[sage]   投稿日:2016/03/01 12:55:17  ID:HGgkTTuu.net
>136 ありがとうございました!これで先に進めます

142
デフォルトの名無しさん[]   投稿日:2016/03/03 13:06:37  ID:b3dAQAyk.net(2)
>69
Monadが理解できないってのは健全で冷静な感覚だ。
単なる型構成子の一つなのになぜあんなに誇大宣伝されるのかというのが理解できないんだろう。
Monadってそんなに大したものじゃないので、Functorと同じくらいに分かるんならそれで正しいよ
コメント1件

143
デフォルトの名無しさん[]   投稿日:2016/03/03 20:02:18  ID:4mtdR8td.net
いやいや、モナドは第三次産業革命とすら言われる大発明ですよ。
そんな軽々しく語れるものじゃない。
コメント1件

144
デフォルトの名無しさん[sage]   投稿日:2016/03/03 21:05:52  ID:hbEIqzuI.net
>142
Haskellの重要な型は a -> b と IO a なんだけど
こいつらデータコンストラクタを宣伝できないから
型コンストラクタを誇大宣伝するしかない

145
デフォルトの名無しさん[sage]   投稿日:2016/03/03 21:45:05  ID:b3dAQAyk.net(2)
>143
誇大広告の域を超えてるな
君も詐欺に引っかかるタイプだな。早く目を覚ませ

146
デフォルトの名無しさん[]   投稿日:2016/03/04 00:47:47  ID:O42fAfhp.net
ネタにマジレス?

147
デフォルトの名無しさん[sage]   投稿日:2016/03/04 08:26:12  ID:/J2AWB0A.net
革命の大半は失敗に終わる

148
デフォルトの名無しさん[]   投稿日:2016/03/04 18:01:54  ID:8KmO5X/u.net
そいつネタじゃなくて例のゴミだから

149
デフォルトの名無しさん[sage]   投稿日:2016/03/04 21:13:29  ID:3Y+HzM1E.net
論文の量産という意味では成功した

150
デフォルトの名無しさん[sage]   投稿日:2016/03/04 22:28:27  ID:Rii2sRuh.net
ポインタのポインタが理解できないって言ってた頃からずっと静的型付け革命

151
デフォルトの名無しさん[sage]   投稿日:2016/03/06 13:15:40  ID:tSjFkCSl.net
EmacsでコーディングよりもパワポでUMLとか量産したいから型が必要なんよ

152
デフォルトの名無しさん[]   投稿日:2016/03/07 15:47:57  ID:qBrIq/RY.net
yesod使ってみようかと思ったんだけど導入で躓く
コメント1件

153
デフォルトの名無しさん[sage]   投稿日:2016/03/07 18:16:32  ID:uqmql4P/.net
いまどきはstackがあるのに、それでもYesodの導入からダメってのは珍しい

154
デフォルトの名無しさん[sage]   投稿日:2016/03/11 22:48:50  ID:lf/FOxiD.net
>152
導入というのがインストールではなくプログラミングのことなら、
書籍「Developing Web Applications With Haskell and Yesod」がおすすめ。

既にHaskellの基礎が分かってるなら、Chapter3 の冒頭の Hello, World から
手を動かしながら読んでいけばWebアプリの作り方が分かるようになるよ。

英語だけど、殆どのところは平易な言い回したがら、和訳しようなんて思わなければ、
高校生でも意味は読みとれると思う。

(今となっては一部内容が古いかも。MozillaのBrowserIDの例があったり)
コメント1件

155
デフォルトの名無しさん[]   投稿日:2016/03/11 23:14:09  ID:3/HLXc0f.net
Persistentでモデルごとにファイルを分けたいのですが、どのように書けばいいのでしょうか?

156
152[sage]   投稿日:2016/03/16 19:43:32  ID:5Au1FueU.net
>154
遅レス(´・ω・)スマソですが、ありがとうございます

その本英語でちょっと古いという話があるから、
どうしようか迷ってたけどやってみますかね

157
デフォルトの名無しさん[sage]   投稿日:2016/03/17 23:13:15  ID:Opt/41wo.net
すごハスで:での畳み込みを覚えたでござる
1:2:[]と[1,2]が一緒で構文糖衣というてな

158
デフォルトの名無しさん[sage]   投稿日:2016/03/18 05:09:50  ID:bw5Y7I/7.net
CPS書換のドリル下さい!

159
デフォルトの名無しさん[sage]   投稿日:2016/03/18 16:35:22  ID:SKNZeuAp.net
レベルを上げて米田で殴ればいい

160
デフォルトの名無しさん[]   投稿日:2016/03/19 17:34:27  ID:W8OFmztn.net
なぁ発音記号的にハスケルじゃなくてヘスケルじゃね?

https://en.wikipedia.org/wiki/Haskell_%28programming_language%29

161
デフォルトの名無しさん[sage]   投稿日:2016/03/19 17:47:08  ID:SYQTFOu+.net
はすこぅ

162
デフォルトの名無しさん[sage]   投稿日:2016/03/19 17:49:00  ID:EuGwJiBL.net
マイコー

163
デフォルトの名無しさん[sage]   投稿日:2016/03/19 18:00:05  ID:2lKXEDYi.net
なんだいたのかよお前らー

164
デフォルトの名無しさん[sage]   投稿日:2016/03/20 00:11:31  ID:wXobkPts.net
諸君、議論したまえ。

165
デフォルトの名無しさん[sage]   投稿日:2016/03/20 00:31:55  ID:GdGOCP5U.net(5)
今これ勉強してるんだけどさぁ堅すぎて実用に向くか不安になってきたんだけどどうなのよ
遺伝的アルゴリズムや正規表現とのテキスト処理しようかと思ってるんだけども

166
デフォルトの名無しさん[]   投稿日:2016/03/20 00:46:35  ID:75/94Ydr.net(5)
>堅すぎて実用に向くか不安に

「堅すぎて」の意味もよくわからんが、
それが「実用に向くか」となんの関係があるんだ
コメント1件

167
デフォルトの名無しさん[sage]   投稿日:2016/03/20 01:06:04  ID:GdGOCP5U.net(5)
>166
今の所cでcgiを書くかのような凡雑さやくどさを感じてる
リストや配列処理はp系言語より上とは思ったけどその他は面倒そうな印象
ファイル入出力と正規表現でささっと色々出来たら文句ないんだが慣れの問題かね??
コメント1件

168
デフォルトの名無しさん[sage]   投稿日:2016/03/20 01:24:57  ID:lpAAOCss.net
その位の用途ならどの言語選んでも一緒な気がするが
コメント1件

169
デフォルトの名無しさん[sage]   投稿日:2016/03/20 02:03:43  ID:RTTkGWUK.net
シェルスクリプトで良さそう

170
デフォルトの名無しさん[sage]   投稿日:2016/03/20 02:19:41  ID:GdGOCP5U.net(5)
>168,169
まあそう言うな趣味だから用途は理屈付けだからあんま意味ないわ
最低限事が出来るならそれていいべ

今ちなみに今はすごハス読みながらガードを覚えた所

171
デフォルトの名無しさん[]   投稿日:2016/03/20 03:49:21  ID:Q2v2u5ZM.net
Haskellの文字列は型が色々あって最初は戸惑うよな、正規表現ならpcre-heavyとかおすすめ

172
デフォルトの名無しさん[sage]   投稿日:2016/03/20 05:16:25  ID:2OeezbvB.net
>167
ほんとにちょっとした文字列処理なら正規表現でもいいけど
ある程度の規模ならパーサコンビネータ(Parsecとか)覚えると
可読性やメンテ性、あとHaskell使いこなしてる感が上がって楽しい
ファイルの読み書きはとりあえずwithFile関数覚えておけばいいんじゃないですかね

173
デフォルトの名無しさん[sage]   投稿日:2016/03/20 06:28:19  ID:yN6fzEfa.net(3)
ORMとトランザクション併用できたり、Webも楽なのに
なぜか使いにくい印象持たれてるのはあるな

ただ慣れないと細かい事に文句言いまくるクソ言語にしか見えないのも確かだ
一定以上慣れてやっと、エンバグの減少と共に恩恵の効き目が見えて来る

174
デフォルトの名無しさん[sage]   投稿日:2016/03/20 06:54:21  ID:75/94Ydr.net(5)
>ファイル入出力と正規表現でささっと色々出来たら
> 今の所cでcgiを書くかのような凡雑さやくどさを感じてる

それが「実用に向くか」の中身ならまさに「スクリプト言語でも使えば?」としか
CがCGIに向いてないから「実用に向かない」というなら
Haskellも同じように「実用に向かない」んじゃね

…つうか「凡雑さ」ってなに??
コメント1件

175
デフォルトの名無しさん[sage]   投稿日:2016/03/20 06:57:00  ID:75/94Ydr.net(5)
「煩雑 はんざつ」を「ぼんざつ」と読み間違えていて、当然変換できないので
「ぼん」が「凡」になったのかな(実用向きの推理)

176
デフォルトの名無しさん[sage]   投稿日:2016/03/20 08:50:29  ID:b1lneXII.net
型なんて書きたくねーよ
ってことでしょ

177
デフォルトの名無しさん[sage]   投稿日:2016/03/20 10:12:07  ID:QzGGeNAr.net
Perlで書いたコード
Haskellで書いたコード

それぞれ三ヶ月後に見なおして戦意を保てるのはどっち?
コメント2件

178
デフォルトの名無しさん[]   投稿日:2016/03/20 10:40:39  ID:yN6fzEfa.net(3)
>177
当然戦意ならPerlのが保てるだろう
矛先の向く先は別だが

179
デフォルトの名無しさん[sage]   投稿日:2016/03/20 11:05:04  ID:bCzJEDSh.net
矛先が自分の喉に向くくさい

180
デフォルトの名無しさん[sage]   投稿日:2016/03/20 11:23:11  ID:GdGOCP5U.net(5)
>174
>177の様なこの辺の感覚がどうも分からんのよなぁ
自分cとperl出来ないけど多分cとperlはやったらやり易いか他と比べて"煩雑"か分かるとは思うんだがhaskellは分からないんだよな

181
デフォルトの名無しさん[sage]   投稿日:2016/03/20 11:40:10  ID:uW1sojJd.net(4)
逆に記憶力は供給過剰で行動力が低いタイプもいると思うよ
普段はほとんど書かないくせにたまに珍しく書いたコードは忘れない
他人のコードも読んで覚えているので自分のコードを忘れても普通に読める

182
デフォルトの名無しさん[sage]   投稿日:2016/03/20 13:41:30  ID:XXr7OH0e.net
何それ羨ましい

183
デフォルトの名無しさん[sage]   投稿日:2016/03/20 14:18:15  ID:uW1sojJd.net(4)
眼高手低という言葉を覚えたんだが使う機会がない

184
デフォルトの名無しさん[sage]   投稿日:2016/03/20 19:23:53  ID:F6EQ+GjV.net(2)
haskellには2つ以上の引数を取る関数が無いので、部分適用は存在しませんか?
コメント4件

185
デフォルトの名無しさん[sage]   投稿日:2016/03/20 19:49:59  ID:yN6fzEfa.net(3)
>184
まず任意の引数を取れる
そしてカリー化も部分適用もできる、というかカリー化がデフォ

186
デフォルトの名無しさん[sage]   投稿日:2016/03/20 21:11:55  ID:uW1sojJd.net(4)
>184
関数 a -> b が2つ以上の引数を取る可能性≒リスト x : xs の長さが2以上になる可能性

187
デフォルトの名無しさん[sage]   投稿日:2016/03/20 21:12:04  ID:yCyuHG/E.net
>184
カリー化されているからこそ部分適用が出来る気がするが
2つ以上の引数を同時に与えたければ、tupleなりuncurryを使えばよい

188
デフォルトの名無しさん[sage]   投稿日:2016/03/20 21:24:27  ID:RHLJPn4C.net
>184
読んでる本にhaskellはデフォで入ってるmaxやらsuccやらの関数は実はカリー化、部分適応されてて全部引数は一つと書いてたけど
逆に一つでしか出来ないという意味だったことにお宅のレスを見て気付いたありがとう
コメント1件

189
デフォルトの名無しさん[sage]   投稿日:2016/03/20 22:15:16  ID:75/94Ydr.net(5)
>188
○「適用 application」
×「適応 adaptation」

この間違いがなんでこんなに蔓延ってるのか理解に苦しむ

190
デフォルトの名無しさん[sage]   投稿日:2016/03/20 22:50:07  ID:F6EQ+GjV.net(2)
add1 = \x -> \y -> x + y
add2 x y = x + y
のとき、
(add1 1)も(add2 1)も部分適用ですか?
そもそもHaskellで引数の個数はどうやって決めるんでしょうか。
コメント2件

191
デフォルトの名無しさん[sage]   投稿日:2016/03/20 23:00:39  ID:GdGOCP5U.net(5)
>190
あら?haskellに引数の数自体なくて全てカリー化、2個目以降の引数は全て部分適用に回す
、て話じゃなかたの?

192
デフォルトの名無しさん[sage]   投稿日:2016/03/20 23:17:31  ID:uW1sojJd.net(4)
C++風に書くと Function<A, B> が実体化し B が決まれば引数の個数が決まりそう

193
デフォルトの名無しさん[sage]   投稿日:2016/03/20 23:52:47  ID:75/94Ydr.net(5)
>190
add2のような関数定義はadd1のシンタクス・シュガー
そしてどちらでも引数の個数は常に1だ
add関数が「2引数」の関数だと言いたいときのような
普通の意味での「引数の個数」は、型の中に関数型構築子(->)が
何個あるかを数えれば(少なくとも直感的には)よい

部分適用(に見えるもの)の特殊例――第1引数に対する部分適用――が
カリー化されていることによって容易に記述できるという話であって、
部分適用の実現にカリー化を使う必要があるわけではないし、
第2引数(に見えるもの)に対する部分適用はカリー化とは関係がない
Haskellなら演算子に限っては(* 2)のように、第2引数(に見えるもの)に対する
部分適用の構文があるわけだけども

194
デフォルトの名無しさん[sage]   投稿日:2016/03/20 23:53:27  ID:rJQ1OYnP.net
Haskellの関数が取る引数の個数は一個だけだよ。
引数を一個取って、『引数一個取る関数』を返せば、それをさらにn-1回繰り返してn個の引数を取る関数を実現できるからね

195
デフォルトの名無しさん[sage]   投稿日:2016/03/21 00:12:24  ID:W47zDOKQ.net(3)
その部分って拘って何か得することあるの?

196
デフォルトの名無しさん[sage]   投稿日:2016/03/21 00:20:07  ID:+Zc9mgUl.net
関数を一つの型に抽象化できる
コメント1件

197
デフォルトの名無しさん[sage]   投稿日:2016/03/21 00:26:29  ID:mEjk8CaC.net
カリー化の理屈がわかってる方がHaskellの文法を習得しやすいと思う
コメント1件

198
デフォルトの名無しさん[sage]   投稿日:2016/03/21 02:09:27  ID:mqJW4NLD.net
add 1が部分適用だという説明をよく見るけど、あってるの?
最初から1引数関数に1引数を渡しているようにしか見えないんだが

199
デフォルトの名無しさん[sage]   投稿日:2016/03/21 02:10:12  ID:W47zDOKQ.net(3)
>196
それってどの部分に応用できるの?

>197
ただの部分適用だと思ってても文法は変わらなくない?
コメント2件

200
デフォルトの名無しさん[sage]   投稿日:2016/03/21 08:13:00  ID:Z1UuXowG.net
>199
そこまで行くと最早言語仕様の話になるような。。
他の言語でいう連想配列あれば配列いらなくね的な
俺も初学者だけどhaskellは 文法しっかり覚えた方がいいぞx:xsとか構文糖衣で言い回しを変えてる所が沢山あってむしろお宅が悩んでる所はそこよ
コメント2件

201
デフォルトの名無しさん[sage]   投稿日:2016/03/21 08:57:12  ID:XJIk5Rbo.net
>200
それは違う
「その部分」「どの部分」と言ってるからもっとピンポイントな答えが期待されてる
あの部分だな

202
デフォルトの名無しさん[sage]   投稿日:2016/03/21 15:57:08  ID:em5aFOqL.net(2)
すごはす!

203
デフォルトの名無しさん[sage]   投稿日:2016/03/21 15:59:40  ID:em5aFOqL.net(2)
なんか読み進めらんないからすっ飛ばしてモナドのとこから読んだら捗った

204
デフォルトの名無しさん[sage]   投稿日:2016/03/21 21:30:37  ID:W47zDOKQ.net(3)
>200
構文糖という意味じゃなくて、Coreを見ても変わらないから本当にわからないんだって

205
デフォルトの名無しさん[sage]   投稿日:2016/03/22 00:33:33  ID:oW40IkQf.net(2)
\ x -> id id (\ y -> (x, y)) :: a -> b -> (a, b)
これは型を見るとarityが2だけど値を見るとarityが1のような気がする

206
デフォルトの名無しさん[sage]   投稿日:2016/03/22 14:51:30  ID:mpnhn3sE.net(2)
>199
関数を一つの型に抽象化できると、論文やテキストを書くときに楽

207
デフォルトの名無しさん[sage]   投稿日:2016/03/22 19:21:14  ID:oW40IkQf.net(2)
でも一つの型にできなくても一つの型クラスにする手もあるから
型クラスがなかった古い言語を無視して、現在のHaskellが何の得になるかという議論は
砂上の楼閣っぽい

208
デフォルトの名無しさん[sage]   投稿日:2016/03/22 20:34:04  ID:mpnhn3sE.net(2)
Haskell はプログラミング言語ではない
言語表現そのもの
Haskellに何の得もないという意見は、日本語じゃプログラミングできないという意見と同レベル

209
デフォルトの名無しさん[sage]   投稿日:2016/03/23 22:02:39  ID:r6iJqmyn.net
ghc8.0.1マダァ

210
デフォルトの名無しさん[sage]   投稿日:2016/03/24 17:36:19  ID:xXG4RPew.net
Mac の El Capitan でHaskellプラットフォームがインストールできなくなって、その後でインストールできるようにした人いますか?

211
デフォルトの名無しさん[sage]   投稿日:2016/03/24 21:27:30  ID:J6WmYFYy.net
意味がよくわからんが

brew install haskell-stack
stack setup

で何かいけない理由があるのか?

212
デフォルトの名無しさん[sage]   投稿日:2016/03/24 22:50:37  ID:gVM1g8dJ.net
haskell platformがオワコンなのを知らんのだろう

213
デフォルトの名無しさん[sage]   投稿日:2016/03/25 22:14:17  ID:2hwI0Ray.net(3)
WindowsのHaskellプラットフォームで作ったコードを一切いじらずにMacでも使いたいので

214
デフォルトの名無しさん[sage]   投稿日:2016/03/25 22:29:21  ID:CJ0htTKH.net
Javaじゃあるまいし無理だろ

215
デフォルトの名無しさん[sage]   投稿日:2016/03/25 22:35:31  ID:2hwI0Ray.net(3)
半年前に作ったコードなんかもう読めないんだけど、Macに移植するときとかみんなどうしてんの?
コメント1件

216
デフォルトの名無しさん[sage]   投稿日:2016/03/25 22:43:56  ID:CnirOUU5.net
? Haskell platformで吸収できるような環境依存なわけ?
コメント1件

217
デフォルトの名無しさん[sage]   投稿日:2016/03/25 22:49:02  ID:2hwI0Ray.net(3)
>216
brew でやるとライブラリが入ってないって言われてそのつど入れたりimport文を書き直すハメになる
オフラインのスタンドアロンで使ってるから非常に困る
コメント1件

218
デフォルトの名無しさん[sage]   投稿日:2016/03/25 22:50:18  ID:8xyGagLX.net
コード読みたくないってwin32パッケージ使ってたらアウトじゃないの?

219
デフォルトの名無しさん[sage]   投稿日:2016/03/26 02:10:19  ID:kRgMl8e0.net
>217
だからなんでstack使わないの?

220
デフォルトの名無しさん[sage]   投稿日:2016/03/26 06:11:36  ID:xgz3RPza.net
宗教的な理由で

221
デフォルトの名無しさん[sage]   投稿日:2016/03/26 10:52:26  ID:7O7WN3J8.net
>215
自分で作ったコードが読めないんじゃなくて自分で意図してない依存関係が読めないんだよな

222
デフォルトの名無しさん[sage]   投稿日:2016/03/27 20:56:30  ID:0fEHBexO.net
HaskellPlatform のバイナリダウンロードした後はWindowsで全部オフラインで作ったプログラムの移植
el capitan の前はHaskellPlatform だけで完結してたプログラムなので、誰かなんとかしてほしい
コメント1件

223
デフォルトの名無しさん[sage]   投稿日:2016/03/27 21:15:53  ID:qne5z7mn.net
Either に fmap を適用すると Right 側の値に適用されるが、
Left 側の値に関数を適用するものは標準ライブラリにある?

readEither のエラーメッセージをもっと分かりやすいものに変えたい。

無ければ作るが、標準ライブラリにあるのなら、できるだけそれを使いたい。
コメント1件

224
デフォルトの名無しさん[sage]   投稿日:2016/03/27 22:56:01  ID:0Jfntbhy.net(3)
標準では存在しない

225
デフォルトの名無しさん[sage]   投稿日:2016/03/27 23:08:58  ID:0rC/ofPw.net(2)
>222
詳しくはわからないが、El CapitanのセキュリティのしくみにHaskellPlatformが合わないらしい。
で、パッチを当てられたバージョンが配られてるっぽい。
http://stackoverflow.com/questions/32920452/how-to-run-haskell-on-osx-...

226
デフォルトの名無しさん[sage]   投稿日:2016/03/27 23:14:31  ID:0Jfntbhy.net(3)
Haskellが動きが速くてしかもライブラリ間の依存度が高い言語なのは当面変わらんだろうから
きちんと追随してないコードが早々にobsoleteになるのは諦めるしかない

227
デフォルトの名無しさん[sage]   投稿日:2016/03/27 23:14:35  ID:0rC/ofPw.net(2)

228
デフォルトの名無しさん[sage]   投稿日:2016/03/27 23:29:56  ID:0Jfntbhy.net(3)
>227
あ、Base-4.8.0からBifunctor入ったんだ。知らなかった。

229
デフォルトの名無しさん[sage]   投稿日:2016/03/28 00:40:49  ID:nQ5EzqqT.net
instanceが不特定多数ならともかくEitherのためだけにclassを作るメリットは何だろう

230
デフォルトの名無しさん[sage]   投稿日:2016/03/28 00:57:36  ID:nJiPkWp9.net
こういうのはekmett製ライブラリとかでよく使うんだよ

231
デフォルトの名無しさん[sage]   投稿日:2016/03/28 01:32:55  ID:qcb2KDJp.net
OK, let's ekmettize it.

232
デフォルトの名無しさん[sage]   投稿日:2016/03/28 21:14:55  ID:Lm1cq8wv.net
ありがと
BiFunctorを使うよ

233
デフォルトの名無しさん[]   投稿日:2016/03/28 21:40:11  ID:iKsxfZek.net
メニーコアについて、第一人者のコメントです。耳糞かっぽじってどうぞ
https://ask.fm/tanakh184/answers/135945765779
コメント1件

234
デフォルトの名無しさん[sage]   投稿日:2016/03/28 22:10:45  ID:PPQPikPw.net(2)
梯子を外された

235
デフォルトの名無しさん[sage]   投稿日:2016/03/28 22:24:37  ID:eoKtZ9pp.net
俺もそれ見て笑ったわ

236
デフォルトの名無しさん[sage]   投稿日:2016/03/28 23:01:56  ID:PPQPikPw.net(2)
tanakhは最近Rustに熱い眼差しを向けているご様子

237
デフォルトの名無しさん[sage]   投稿日:2016/03/29 07:10:25  ID:YQCa1g4d.net(2)
f *** g = arr (bimap f g)
f +++ g = arr (bimap f g)

238
デフォルトの名無しさん[sage]   投稿日:2016/03/29 11:22:43  ID:YQCa1g4d.net(2)
ぐぬぬ

(arr f) *** (arr g) = arr (bimap f g)
(arr f) +++ (arr g) = arr (bimap f g)

239
デフォルトの名無しさん[]   投稿日:2016/03/29 20:58:59  ID:WTA2j3Vp.net
qt :: (Ord a) => [a] -> [a]
qt [] = []
qt (x:xs)=
let
s=[a|a<-xs,a<x]
b=[a|a<-xs,a>=x]
in qt s++[x]++qt b
main = do
print (qt [9,5,4,4,1])

これで[1,4,4,5,9]となって、b=[a|a<-xs,a>x]とすると
[1,4,5,9]となることに感動した

240
デフォルトの名無しさん[]   投稿日:2016/03/30 06:07:46  ID:2BObmFiJ.net
>233
この人のツイッターめっちゃツイートしすぎじゃね??無職なの?ボットなの?
コメント1件

241
デフォルトの名無しさん[sage]   投稿日:2016/03/30 06:30:20  ID:275vy7J8.net
お前が世間知らずなだけで有名人はだいたいこんなもんだ

242
デフォルトの名無しさん[sage]   投稿日:2016/03/30 13:21:10  ID:Spu236HU.net
ちょっと休憩してタバコ一服みたいな感覚でツイートする廃人がいっぱいおる

243
デフォルトの名無しさん[sage]   投稿日:2016/03/30 14:14:52  ID:qbKmn6Oy.net
>240
スーパーエンジニア()やで。お前の持ってるHaskell本の翻訳を手がけてる可能性もあるで

244
デフォルトの名無しさん[]   投稿日:2016/04/01 23:01:10  ID:RonLnaIy.net
c01::String->String
c01 []=[]
c01 (x:xs)
| x=='?' = []
|otherwise =x:c01 xs

c02::String->[String]
c02 []=[]
c02 x=[_c01]
where
_c01=c01 x

main = do
print (c02 "213?46464?698")

言語感覚を掴むために文字列を?区切りの配列化とかやってんだけど
なんか上手くいかない。。後ろの方なんかどうにかスマートに取れんかな?
コメント1件

245
デフォルトの名無しさん[sage]   投稿日:2016/04/01 23:14:48  ID:PV5EBc/W.net
Prelude> import Data.List.Split
Prelude Data.List Data.List.Split> splitOn "?" "213?46464?698"
Loading package split-0.2.2 ... linking ... done.
["213","46464","698"]
Prelude Data.List Data.List.Split>

splitOn のソース
splitOn :: Eq a => [a] -> [a] -> [[a]]
splitOn = split . dropDelims . onSublist

246
デフォルトの名無しさん[sage]   投稿日:2016/04/02 00:30:07  ID:Ev1W2wgk.net(3)
>244
split = split' [] ""
split' acc buff "" = reverse $ reverse buff :acc
split' acc buff (x:xs)
| x == '?' = split' (reverse buff :acc) "" xs
| otherwise = split' acc (x:buff) xs

main = print $ split "213?46464?698"

こんなもんだろ。既に区切った語のリストをaccに蓄積して
今読んでる途中の語はbuffに蓄積してやる(適宜reverseで順番を直す)
コメント2件

247
デフォルトの名無しさん[sage]   投稿日:2016/04/02 00:45:02  ID:Ev1W2wgk.net(3)
素朴な再帰ならこうだな

split "" = [""]
split (x:xs)
| x == '?' = "" :split xs
| otherwise = (x:hd):tl
where (hd:tl) = split xs

main = print $ split "213?46464?698"

蓄積引数を使って末尾再帰にするか
こちらにするかはまあ好きにしたらいいと思う。

248
デフォルトの名無しさん[sage]   投稿日:2016/04/02 01:38:17  ID:Xzav67mJ.net(2)
ぼくも末尾再帰書いてみたお!
http://ideone.com/vh3Ovj

splitQ :: String -> [String]
splitQ s = unko id id s where
unko c1 c2 [] = c2 $ c1' : []
where c1' = c1 []
unko c1 c2 (x:xs)
| x == '?' = unko id (c2 . (c1 [] :)) xs
| otherwise = unko (c1 . (x :)) c2 xs

main = print $ splitQ "213?46464?698"

249
デフォルトの名無しさん[sage]   投稿日:2016/04/02 02:08:57  ID:Xzav67mJ.net(2)
ごめんだお!ぼくのやつこれで死んでしまったお!

main = print $ take 10 $ splitQ $ cycle "213?46464?698?"

http://ideone.com/aKJZ7v
コメント2件

250
デフォルトの名無しさん[sage]   投稿日:2016/04/02 03:52:31  ID:c4u50AAG.net
うんこでサイクルとなると蜷局を連想してしまう

251
デフォルトの名無しさん[sage]   投稿日:2016/04/02 10:40:52  ID:HRtXuUOo.net(2)
let {
p = (/='?');
t xs = takeWhile p xs;
d xs = drop 1 $ dropWhile p xs
} in map t $ takeWhile (not . null) $ iterate d

252
デフォルトの名無しさん[sage]   投稿日:2016/04/02 10:44:33  ID:HRtXuUOo.net(2)
let {
p = (/='?');
t xs = takeWhile p xs;
d xs = drop 1 $ dropWhile p xs
} in \ str -> map t $ takeWhile (not . null) $ iterate d str

253
デフォルトの名無しさん[sage]   投稿日:2016/04/02 14:20:52  ID:Ev1W2wgk.net(3)
>249
無限リスト上で末尾再帰したらそりゃ戻ってこないよw

254
デフォルトの名無しさん[sage]   投稿日:2016/04/03 00:11:50  ID:YJ1NbmGD.net(4)
末尾呼び出しはループじゃなくてgotoなんだよな
意味的には二重ループだがソースを見たら入れ子になってないパターンとかgotoに似てる

255
デフォルトの名無しさん[sage]   投稿日:2016/04/03 00:35:09  ID:I1bXI3bS.net(3)
ghcとcabelがぶっ壊れてコードが書けない件

256
デフォルトの名無しさん[sage]   投稿日:2016/04/03 00:47:31  ID:Zu/8k3HN.net
そんなコンパイラ窓から投げ捨てろ

257
デフォルトの名無しさん[sage]   投稿日:2016/04/03 01:58:17  ID:enKsHibE.net(7)
この期に及んでstack使わないやつの泣き言はきかん

258
デフォルトの名無しさん[sage]   投稿日:2016/04/03 09:55:56  ID:YJ1NbmGD.net(4)
良いオープンソースは、プロの支えがなくなっても可読性が落ちない

259
デフォルトの名無しさん[sage]   投稿日:2016/04/03 16:01:20  ID:n4lb76fM.net
>246
リバースだらけで中々読むのに時間がかかった、、++はいかんのか、、
コメント2件

260
デフォルトの名無しさん[sage]   投稿日:2016/04/03 16:20:55  ID:GDeNTkfE.net
>249
よく分からないけど、splitQが正格か非正格かという問題と絡むのだろうか

261
デフォルトの名無しさん[sage]   投稿日:2016/04/03 16:50:27  ID:enKsHibE.net(7)
>259
再帰でリストの後ろに(++)するとO(n^2)かかるので
頭に(:)していって後でreverseするのが定跡
定跡なので慣れれば読みにくくもなくなる
コメント1件

262
デフォルトの名無しさん[sage]   投稿日:2016/04/03 16:56:16  ID:enKsHibE.net(7)
>259
split = split' [] ""
split' acc buff "" = reverse . map reverse $ buff:acc
split' acc buff (x:xs)
| x == '?' = split' (buff:acc) "" xs
| otherwise = split' acc (x:buff) xs

main = print $ split "213?46464?698"

reverse する箇所をまとめたこれならもう少し読みやすいかな。

263
デフォルトの名無しさん[sage]   投稿日:2016/04/03 17:04:47  ID:enKsHibE.net(7)
split = reverse . map reverse . split' [] ""
split' acc buff "" = buff:acc

の方がいいかもしれん。まあ殆ど趣味だと思うが。

264
デフォルトの名無しさん[sage]   投稿日:2016/04/03 18:32:19  ID:YJ1NbmGD.net(4)
>261
もし要素が1個増えるたびにバッファ全体をコピーしたらO(n^2)になるが
それは配列でもリストでも同じだし、(++)だからといってO(n^2)とは限らないよ
コメント1件

265
デフォルトの名無しさん[sage]   投稿日:2016/04/03 18:44:38  ID:enKsHibE.net(7)
>264
リストの最後尾に要素を付け加える操作はリストを頭から尻まで走査しないとできないのでO(n)
コピーとかそういう問題ではない

266
デフォルトの名無しさん[sage]   投稿日:2016/04/03 18:48:57  ID:enKsHibE.net(7)
プログラミング初心者ならともかく単連結リストの基本操作コスト知らんのはちょっとなあ……
コメント1件

267
デフォルトの名無しさん[sage]   投稿日:2016/04/03 19:02:39  ID:enKsHibE.net(7)
以下の2つの速度を比較すれば一目瞭然

ghci> foldl' (¥x y -> (x++[y])) [0] [1..100000] ― O(n^2)
ghci> reverse $ foldl' (¥x y -> y:x) [0] [1..100000] ― O(n)
コメント1件

268
デフォルトの名無しさん[sage]   投稿日:2016/04/03 22:51:53  ID:I1bXI3bS.net(3)
>266
プログラミング初心者というか関数型初心者じゃ
>246を重点的に見てたんだが知らんことが多く246にその気はなかったんだろうが個人的にだいぶいい情報が詰まってたので感謝
再帰関数内で変数保持のような事をどうすればいいのかを特にわからんかったんだが
部分適応回避の二つの関数噛ませての引数保持やら、reverseの定石やら、地味に(reverse buff :acc)でbuffをaccの前に置いて何故またreverseでbuffを後ろにするんや?という勘違いやら色々ためになった

269
デフォルトの名無しさん[sage]   投稿日:2016/04/03 22:53:32  ID:I1bXI3bS.net(3)
あらまた適用間違えたが

270
デフォルトの名無しさん[sage]   投稿日:2016/04/03 23:01:07  ID:YJ1NbmGD.net(4)
>267
foldrなら速い
一目瞭然とはいわないが、O(n^2)より速いケースもあるだろ

f n = foldr (++) [n] [ [k] | k<-[0..n-1] ]

271
デフォルトの名無しさん[sage]   投稿日:2016/04/04 01:30:08  ID:csEJBaCm.net
末尾再帰でどう書くかの話でfoldr持ち出すやつってw

272
デフォルトの名無しさん[sage]   投稿日:2016/04/04 07:27:01  ID:efe3FcRd.net
scanlやiterateが個性的すぎるから、foldlが定跡だみたいな話になってる
foldrもどちらかといえば個性的

273
デフォルトの名無しさん[]   投稿日:2016/04/05 22:42:15  ID:lFAuwsOe.net
Windowsでstack入れてghcインスコするとmsys2環境まで付いてくるのここまできたか感ある

274
デフォルトの名無しさん[sage]   投稿日:2016/04/05 22:59:32  ID:hSAjYG8r.net
foldr でリストの頭に連結してくならそりゃ速いだろ 空間は食うけどな
リストの末尾に連結するとO(n)でオーダーが無駄に上がる、
という肝心の点が理解できてないのかな
まあバッファのコピー云々を見るにそうなんだろうけど

275
デフォルトの名無しさん[sage]   投稿日:2016/04/06 13:41:13  ID:txEWT2Ww.net
こればっかりは型を書いてもさっぱりわからん
型に頼らなくてもコードが読めるような超能力でもない限り

276
デフォルトの名無しさん[sage]   投稿日:2016/04/06 19:48:19  ID:P/7KHel4.net
おたくらすごいな。++によるスピードダウンとか気にすらならんわ。なんか速度必要なこと書いてんの?

277
デフォルトの名無しさん[sage]   投稿日:2016/04/06 20:34:59  ID:1LxesQSA.net(2)
長大なリスト構造使うくらいなら別のデータ構造使うだろ、という趣旨ならわかる
そうじゃないなら……

278
デフォルトの名無しさん[]   投稿日:2016/04/06 21:04:05  ID:eFJoLkWW.net
splitパッケージ使えばいいじゃんよお
なんでHaskellerっていうか関数型言語好きは手慰みコーディングが好きなのか

279
デフォルトの名無しさん[sage]   投稿日:2016/04/06 21:15:01  ID:1LxesQSA.net(2)
しばらく前までのcabal hellをみりゃわかるだろ 依存増やしたくねえんだよ

280
デフォルトの名無しさん[]   投稿日:2016/04/06 23:50:18  ID:IHdtvNSs.net
低レベルプログラミングだってオーダーくらいは気にかけるのでは

281
デフォルトの名無しさん[]   投稿日:2016/04/06 23:59:46  ID:I6OThI1C.net
メニーコア時代にはHaskell一択になりますよ。
自動的に複数のコアを利用できますからね。

282
デフォルトの名無しさん[sage]   投稿日:2016/04/07 00:11:48  ID:WDm2021j.net
糞ザコプログラマはプロファイリングでボトルネックの特定ができない

283
デフォルトの名無しさん[sage]   投稿日:2016/04/07 00:24:55  ID:838jiYpM.net
畳み込み楽しいお

284
デフォルトの名無しさん[sage]   投稿日:2016/04/09 04:33:25  ID:dgqvoixn.net
stack exec yesod add-handlerを実行したら
no cabal file foundと出ました

285
デフォルトの名無しさん[sage]   投稿日:2016/04/09 05:11:27  ID:Vzzo5Ul2.net
圏論を習得するまでは、コーディングはおあずけだ

286
デフォルトの名無しさん[sage]   投稿日:2016/04/09 07:03:57  ID:1BFZNWV8.net
生涯封印フラグ

287
デフォルトの名無しさん[sage]   投稿日:2016/04/09 14:30:16  ID:b41tx2Rx.net
圏論の理解が無益だとは言わんが、そんな事より、ドメイン駆動設計を理解してから
Functional and Reactive Domain Modeling を読んだ方が
Haskell をはるかに役立たせる事ができる。

288
デフォルトの名無しさん[sage]   投稿日:2016/04/09 19:27:52  ID:UzLa1aNi.net
ほー

289
デフォルトの名無しさん[sage]   投稿日:2016/04/09 19:49:05  ID:w7hE6ybz.net
仕事でhaskell使いはるんですか?

290
デフォルトの名無しさん[sage]   投稿日:2016/04/09 20:44:53  ID:+YXoN4jI.net(2)
合成した射も、Hom集合に含めていいのですか?
コメント1件

291
デフォルトの名無しさん[sage]   投稿日:2016/04/09 21:52:21  ID:2MBZRcp4.net
>290
合成した射がHom集合に含まれるというのが圏の定義
コメント1件

292
デフォルトの名無しさん[sage]   投稿日:2016/04/09 22:04:03  ID:+YXoN4jI.net(2)
>291
そうだったんですか!
ありがとうございます。

293
デフォルトの名無しさん[sage]   投稿日:2016/04/09 23:51:04  ID:e0N/R4cH.net
sp11::[String]->String->String
sp11 [] y=y
sp11 (x:xs) y=sp11 xs y:x
--sp11 (x:xs) y=sp11 xs y++x

僕ちゃん今これが通らないでCAしてるのが通る理由を10分ほど考えて納得して満足してたのにやたらハイレベルなお話をしていますなぁ
コメント1件

294
デフォルトの名無しさん[sage]   投稿日:2016/04/10 01:23:55  ID:e/CI/bNW.net(4)
そりゃ型があってなきゃ通らんよ
コメント1件

295
デフォルトの名無しさん[sage]   投稿日:2016/04/10 01:24:54  ID:e/CI/bNW.net(4)
CAてなんだと思ったが、もしかして comment out の綴り間違えてんのかな

296
デフォルトの名無しさん[sage]   投稿日:2016/04/10 02:19:12  ID:h8a8i3Ei.net(2)
>294
型というかリストの取り扱い方間違えてたな。あ、これじゃ構文糖衣ならんわ的な
いや型があってないは間違ってはないんだが

297
デフォルトの名無しさん[sage]   投稿日:2016/04/10 04:13:19  ID:e/CI/bNW.net(4)
(:) と (++) の型の違いを理解してなかったんだろ
構文糖衣ならんわ的? 意味不明にも程があるな

concat . reverse

で済む程度の関数をわざわざ定義する意味もわからん

298
デフォルトの名無しさん[sage]   投稿日:2016/04/10 05:59:18  ID:jyVvoqyQ.net
車輪の再発明はするな
既にある車輪を手際良く組合せる能力を育てろ
目的の機能は、要するに既知の有名関数のこれこれこれの組み合わせに過ぎないと気づく能力を育てろ

299
デフォルトの名無しさん[sage]   投稿日:2016/04/10 06:02:28  ID:HOcPU6mM.net
フルスクラッチが好きなんです

300
デフォルトの名無しさん[sage]   投稿日:2016/04/10 08:20:12  ID:FcOwY46H.net(2)
>293
ローレベルすぎる
中学生か

301
デフォルトの名無しさん[sage]   投稿日:2016/04/10 09:17:57  ID:YvXo8qRd.net(4)
concat . reverse
これはつまり代名詞とか定冠詞とかそういうのを使うなって意味か

302
デフォルトの名無しさん[]   投稿日:2016/04/10 10:50:50  ID:h8a8i3Ei.net(2)
すごハスだけ読みながら初学者として勉強してんだがなぁすごハスは実用的な部分弱いんよ
今6章やけどずっとプロンプト内で車輪の再発明コードコンパイルしてるわ
流石に少し飛ばしてsystemIOやmain doやった

303
デフォルトの名無しさん[sage]   投稿日:2016/04/10 11:16:53  ID:e/CI/bNW.net(4)
実用的なコードなんか書いたこともない中学生がなんで実用性とか気にしてんのw

304
デフォルトの名無しさん[sage]   投稿日:2016/04/10 12:08:24  ID:f+MX8G/w.net
あなたのような童貞でもテクニックに興味があるかと。
同じですよ。

305
デフォルトの名無しさん[sage]   投稿日:2016/04/10 12:25:10  ID:YvXo8qRd.net(4)
ものを作らなくても、再発明するなとか言うだけでも実用性はあるんじゃないの
有害または無益なものを批判するだけでもいいじゃん

306
デフォルトの名無しさん[sage]   投稿日:2016/04/10 12:36:41  ID:2Sp/+uDX.net(3)
その文章じゃ何言ってるのかわからんのでもう一度お願い

307
デフォルトの名無しさん[sage]   投稿日:2016/04/10 12:42:53  ID:YvXo8qRd.net(4)
どこがどうわからないのかを説明する義務もあるよ
説明を要求する権利に甘えるな

308
デフォルトの名無しさん[sage]   投稿日:2016/04/10 13:04:01  ID:2Sp/+uDX.net(3)
何に対しての実用性の話をしているの?
てっきりソースやソフトの実用性の話だと思っていたけど
あなたの文章では本(もしくはここの人たち?)に対する実用性の話をしだしているように読めるんだけどあってる?
しかも本はすごハスについての話題だとおもったけどすごハスは最発明するなとも言ってないんだけど
どの本に対しての話なのかも読み取れないんだけど
結局何を言いたかったの?
コメント1件

309
デフォルトの名無しさん[sage]   投稿日:2016/04/10 13:32:57  ID:YvXo8qRd.net(4)
なるほど
しかし、ソースやソフトに限定すればするほど理論的になっていく
限定がない方が実践的だし、実用的だと思う

310
デフォルトの名無しさん[sage]   投稿日:2016/04/10 13:48:44  ID:2Sp/+uDX.net(3)
元の話題でもないし回答でもないし内容自体もおかしいし大丈夫か
コメント1件

311
デフォルトの名無しさん[sage]   投稿日:2016/04/10 13:57:09  ID:eD46Bq4L.net
そりゃ勉強では再発明不可避だろwww
自分で実践して何かを作る時にするなといってるだけwwww

312
デフォルトの名無しさん[sage]   投稿日:2016/04/10 14:47:48  ID:df5SYaAC.net
日曜出勤してるギスギスしたブラック社員と休日の優雅なサンデープログラマじゃ話は噛み合わないと思う

313
デフォルトの名無しさん[sage]   投稿日:2016/04/10 16:14:53  ID:FcOwY46H.net(2)
>310
これはあれだ、モスバーガーの食い方と同じやつだ
つまり相手にしてはいけない

314
デフォルトの名無しさん[sage]   投稿日:2016/04/10 19:18:39  ID:bGdugtOr.net
>308
Haskellの実用先は論文の生産

315
デフォルトの名無しさん[sage]   投稿日:2016/04/10 19:48:29  ID:AP+c5oKN.net
ってそれ一番言われてるから。

316
デフォルトの名無しさん[]   投稿日:2016/04/11 19:48:46  ID:HssZkwMb.net
とりあえずHaskellはいいぞ

317
デフォルトの名無しさん[sage]   投稿日:2016/04/11 22:03:36  ID:lUP9Y6l3.net
haskelでl深さ優先探索は書けるんだけど
幅優先探索とか動的計画法の書き方が分からなくて競技プログラミング詰んだ
コメント1件

318
デフォルトの名無しさん[sage]   投稿日:2016/04/11 22:16:23  ID:edqlulhA.net
解候補のリストを作るときに : 演算子以外でリスト構築すればいいのではなかろうか

319
デフォルトの名無しさん[sage]   投稿日:2016/04/11 23:09:22  ID:ByxXtYTi.net
>317
幅優先探索なら、Listじゃなくて双方向キュー Data.Seq を使えばいいよ
動的計画法はメモを引数で持ち回すとかいろいろ方法がある

320
デフォルトの名無しさん[sage]   投稿日:2016/04/12 01:03:49  ID:odne2N/q.net
ところで、動的型のメリットは汎用のデータ構造だよな
リストにもタプルにもなるデータ構造とか
それは静的型では不可能というか可能だとしても邪道

321
デフォルトの名無しさん[sage]   投稿日:2016/04/12 09:58:04  ID:+Rec4Xwk.net
ヘテロリストは邪道という程でもない
実行時型検査は邪道だけど(できないわけではない)


322
デフォルトの名無しさん[]   投稿日:2016/04/14 23:58:19  ID:C943vaja.net
stackでプロジェクトを作った時にできるappとsrcってどう使い分ければいいのでしょうか?

323
デフォルトの名無しさん[sage]   投稿日:2016/04/15 22:39:56  ID:04ZAKGz8.net
ノリ

324
デフォルトの名無しさん[]   投稿日:2016/04/16 00:04:38  ID:A75UJ+qB.net
メニーコア時代には、自動的に全てのコアを使ってくれるHaskell以外の言語は滅びる。
C/C++もJavaもPythonもすべて滅びる。

325
デフォルトの名無しさん[sage]   投稿日:2016/04/16 04:43:02  ID:P/Gx7cPV.net
そこのとこの実装をやさしく教えてあげて

326
デフォルトの名無しさん[sage]   投稿日:2016/04/16 18:34:43  ID:dotHc+RC.net
Haskell勉強中なのだが、サンクの評価はサンクの構造を変更するから排他処理しないといけないと思うのだが
マルチコアで処理しようと思ったら、そこがボトルネックになるという考えは正しい?

327
デフォルトの名無しさん[sage]   投稿日:2016/04/16 20:30:49  ID:eellksOQ.net
サンクでやりたいことは無限の計算をあわよくば有限で済ませることだよね
サンクの構造を変更するのに無限の時間がかかるとしても
そこと関係ない部分にとってはボトルネックにならないし
関係ある部分はシングルコアでもマルチコアでも無限に待たされる
コメント1件

328
デフォルトの名無しさん[sage]   投稿日:2016/04/17 10:04:04  ID:FqwYan/n.net
誰かが変更するまで無限に?待機するだけなら排他制御は関係ない気がする
待機じゃなくて自分で率先して変更しようとするから排他制御になる

329
デフォルトの名無しさん[sage]   投稿日:2016/04/17 12:02:13  ID:Rdn/TyF0.net
ST3のビルド設定が何故かwinでできなかったから桜でhs書くわもう

330
デフォルトの名無しさん[sage]   投稿日:2016/04/17 15:43:08  ID:5McqnKxO.net
サンクは、構造体の「計算済みならここに値を入れておく」という場所に値が入るだけだから、サンク自体の構造は変わらないと思う

331
326[sage]   投稿日:2016/04/17 19:43:10  ID:+zMRWBTM.net
>327,328,330
ありがとうございます
勉強になります

332
デフォルトの名無しさん[]   投稿日:2016/04/19 22:48:22  ID:GUcpde7h.net
8.0.1なかなかこないね

333
デフォルトの名無しさん[sage]   投稿日:2016/04/20 09:21:38  ID:dTPS4iPY.net
義エディタってどうなったの?
コメント1件

334
デフォルトの名無しさん[sage]   投稿日:2016/04/20 09:39:35  ID:io4dbaLH.net
>333
半死のプロジェクト
エディタとしての使用感も凄え微妙

335
デフォルトの名無しさん[sage]   投稿日:2016/04/20 20:10:33  ID:Tnrtp5pD.net
st3のビルドに惹かれる

336
デフォルトの名無しさん[]   投稿日:2016/04/22 19:58:59  ID:/z9+X7Km.net(3)
そうか?
Haskellで書かれているだけあって世界最高のエディタだと思うけど。
拡張性が高いし、使用感も最高。
滑るように筆が進む。

337
デフォルトの名無しさん[]   投稿日:2016/04/22 20:02:19  ID:/z9+X7Km.net(3)
何よりHaskellで書かれているという事は、メニーコアマシンに自動的に対応しているという事。
1万コアのマシンを使えば自動的に1万倍の速さで書ける。
これは素晴らしいこと。
JavaやC++には真似できまい。

338
デフォルトの名無しさん[sage]   投稿日:2016/04/22 21:05:33  ID:F5OOvSJd.net
いくら機能性や汎用性が高くても、コミュニティが育つ要素が乏しいソフトは、
最初の一時に盛大に果実が実り、あとは閉じた世界の中でじわじわと腐っていく。

339
デフォルトの名無しさん[sage]   投稿日:2016/04/22 21:25:46  ID:7+eL8tO2.net
あ、判ったぞ、触っちゃいけない人だ!

340
デフォルトの名無しさん[sage]   投稿日:2016/04/22 23:15:47  ID:RfwjpRNt.net
コミュニティや人柄で判るのはデメリットやリスクのような悪い部分だけだな
良い部分は専門知識がないと判らない

341
デフォルトの名無しさん[]   投稿日:2016/04/22 23:25:12  ID:/z9+X7Km.net(3)
バグが無いことも素晴らしい。

342
デフォルトの名無しさん[sage]   投稿日:2016/04/23 00:22:37  ID:h0nkzBbJ.net(3)
初心者にとっては生兵法は大怪我の元だし
悪い部分ばかり見えるというのは理にかなっている

343
デフォルトの名無しさん[sage]   投稿日:2016/04/23 09:30:09  ID:JWq9tg2T.net
圏論の初歩的な勉強をしています。質問です。

Haskell の Functor class で pure (return) が強制されてないのは、なぜですか?

Applicative (歴史的にはMonad) で、分けて導入する理由は、無いと思えるのですが。
コメント1件

344
デフォルトの名無しさん[sage]   投稿日:2016/04/23 10:38:20  ID:h0nkzBbJ.net(3)
強制するクラスと強制しないクラスを合併したら強制しないクラスになる
吸収法則?

345
デフォルトの名無しさん[sage]   投稿日:2016/04/23 10:45:20  ID:zyr2RBeo.net(3)
pureが意味を持つのは <*> と対になってからだから。

346
デフォルトの名無しさん[]   投稿日:2016/04/23 13:39:22  ID:g8SqXRs6.net(3)
>343
理由は簡単だ、pureを定義できないものがあるからだ。例えばConstとかだな。
コメント1件

347
デフォルトの名無しさん[sage]   投稿日:2016/04/23 13:43:14  ID:X//hQ6+3.net(2)
今まで ghc を単体でインストールし、ライブラリも cabal でインストールしていました。

今 yesod を cabal でインストールしようとしたら、
依存パッケージの monad-logger などでバージョンの問題が発生し、
いくつかのパッケージをダウングレードしないと yesod がインストールできない状態です。

たまたま今はバージョン問題が解決されるまで待てない状況なので、
Stack を使って yeaod に必要な環境を作るという対処を考えました。

そこで質問です。

今この状況でStack を使って yeaod に必要な環境を作る場合、
ghc はアンインストールしておかないと問題が起きるでしょうか。
cabal でインストールされているライブラリは消しておかないとだめでしょうか。
コメント1件

348
デフォルトの名無しさん[sage]   投稿日:2016/04/23 14:41:43  ID:zyr2RBeo.net(3)
>346
Const は Applicativeのインスタンスだ
Control.Applicative のドキュメントを見よ
コメント1件

349
デフォルトの名無しさん[]   投稿日:2016/04/23 14:58:41  ID:g8SqXRs6.net(3)
>348
Monoid制約見えてないのか

350
デフォルトの名無しさん[sage]   投稿日:2016/04/23 15:04:05  ID:zyr2RBeo.net(3)
そりゃpureに意味が無いからじゃなくてapに意味が無いから制約がついてるに過ぎん
コメント1件

351
デフォルトの名無しさん[]   投稿日:2016/04/23 15:13:58  ID:g8SqXRs6.net(3)
>350
中にMonoidのインスタンスが入ってる時しかfmapできなくなるんだけどいいの

352
デフォルトの名無しさん[sage]   投稿日:2016/04/23 15:21:37  ID:trNShuTT.net
>347
たぶん問題ないよ。stack は特に指定しない限り stack がインストールしたghcやライブラリを使う。

このことを確認する方法。
まず、stack unpack yesod したのち、yesodのディレクトリに移り、
stack exec -- which ghc
して、stackが使うghc が .stack ディレクトリ以下の階層にあることを確かめる。
stack exec -- ghc-pkg list
で、使用されるライブラリが .stack ディレクトリや .stack-work ディレクトリの深くに入っていることを確認する。
コメント1件

353
デフォルトの名無しさん[sage]   投稿日:2016/04/23 18:08:35  ID:h0nkzBbJ.net(3)
memptyはNothingに似てる
Maybeを使う理由は無いと思ってバリバリ書いてたら急にMaybeが来る感じ

354
デフォルトの名無しさん[sage]   投稿日:2016/04/23 20:09:25  ID:X//hQ6+3.net(2)
>352
ありがとうございます。

問題なく環境を構築できました。

355
デフォルトの名無しさん[sage]   投稿日:2016/04/24 02:18:00  ID:0A/NlO7U.net
ちょうど今stackでMapが無くてイライラしていた所だ

356
デフォルトの名無しさん[sage]   投稿日:2016/04/28 19:35:13  ID:myZYEKUT.net(2)
tanakhはどこ勤めなの?
鶴キャピタルと思ってたらペジ一とかあってよく分からないんだけど。
あとPFI在籍時に心を壊したみたいな記事を見つけたけど、ここってブラック?
コメント1件

357
デフォルトの名無しさん[sage]   投稿日:2016/04/28 19:44:58  ID:myZYEKUT.net(2)
あ、最近の記事見てなかった。鶴は半年で辞めたって事か……

358
デフォルトの名無しさん[sage]   投稿日:2016/04/29 00:41:56  ID:p88N57n4.net
優秀な人はほいほい転職できていいなあ

359
デフォルトの名無しさん[sage]   投稿日:2016/04/30 00:47:21  ID:v4IXAsZh.net(2)
Nothing :: Maybe a
ここで
class (Functor f) => Applicative f where
  (<*>) :: f (a -> b) -> f a -> f b

instance Applicative Maybe
  Nothing <*> _ = Nothing

左辺のNothing が Nothing :: f (a -> b)
右辺のNothing が Nothing :: f b

型ちがくね?
コメント2件

360
デフォルトの名無しさん[]   投稿日:2016/04/30 10:31:52  ID:N4gpQEz/.net
>359
そりゃ違うでしょ、Maybe (a -> b)型のNothingとMaybe b型のNothingなんだから
コメント1件

361
デフォルトの名無しさん[sage]   投稿日:2016/04/30 11:36:11  ID:XDCplkAG.net
>359
変数の型が違うならエラーにしないと危険じゃないかってことね
let n = Nothing in n == (n <*> undefined) -- True
これは変数じゃなくて無引数の多相関数だからエラーじゃない

ちなみにletではなくラムダで変数束縛すれば多相にならない
(\ n -> n == (n <*> undefined)) Nothing -- エラー
コメント1件

362
デフォルトの名無しさん[sage]   投稿日:2016/04/30 17:17:20  ID:v4IXAsZh.net(2)
>360
記述されているのは構築子だから別の値ってことか

>361
let多相だね

363
デフォルトの名無しさん[sage]   投稿日:2016/04/30 18:42:21  ID:dTOuLsNg.net
Nothingにも型があったんだなぁ
あと、letによる束縛とラムダによる束縛は別物なのかぁ
為になったねぇ〜為になったよぉ〜

364
デフォルトの名無しさん[sage]   投稿日:2016/04/30 22:03:49  ID:kBh7fjCf.net
Groundhog のチュートリアルや解説は無いでしょうか。

https://www.schoolofhaskell.com/school/to-infinity-and-beyond/pick-of-the-wee...
http://hackage.haskell.org/package/groundhog-th-0.7.0.1/docs/Database-Gr...
これらよりももう少し優しい感じのチュートリアルや解説があると嬉しいのですが。


ちなみに、今まで Persist を使っていました。
シンプルでかなり使いやすいライブラリでしたが、主キーが勝手に作られたりと融通が効かない所もあり、
その点 Groundhog はより細かく調整できると聞き、調べているところです。

365
デフォルトの名無しさん[]   投稿日:2016/05/01 12:59:02  ID:tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません

366
デフォルトの名無しさん[sage]   投稿日:2016/05/01 17:53:33  ID:rVZalbzS.net
894にtanakhらしき人物を見つけた

https://code.google.com/codejam/contest/11254486/scoreboard?c=1125448...#sp=871

367
デフォルトの名無しさん[sage]   投稿日:2016/05/01 19:57:50  ID:q399unAy.net
最近はじめた
コンパイルエラーがわかりにくい はたして慣れるのだろうか

368
デフォルトの名無しさん[sage]   投稿日:2016/05/01 20:34:11  ID:bRTHAwhW.net(2)
C系に慣れてからの関数型はカルチャーショック大きい
嫌がらせかってくらいコンパイル通してくれなくて最初の頃は辛かった
しかし、走り出してエラー出すくらいなら初めから走れない方がマシなんだって学ぶんだ

369
デフォルトの名無しさん[sage]   投稿日:2016/05/01 20:44:21  ID:bRTHAwhW.net(2)
有能な働き者 コンパイル通って正しく動かす
有能な怠け者 プロジェクトリーダー
無能な働き者 コンパイル通って実行時エラー
無能な怠け者 監査部門へ転属

370
デフォルトの名無しさん[sage]   投稿日:2016/05/01 20:59:15  ID:4Y0CumS/.net
監査部門へ転属したい

371
デフォルトの名無しさん[sage]   投稿日:2016/05/01 21:13:48  ID:uKoS1wpj.net
すごハスp148のYesNoクラスのIntだけ動かんな
Integerにしたらなぜか動いたけども

372
デフォルトの名無しさん[sage]   投稿日:2016/05/07 19:59:15  ID:M+qs63jq.net
3、4年前は、OSに依存せずに実行ファイルのパスを取得するには
system-argv0 パッケージに頼らざるを得ませんでしたが、
今はどうなのでしょう。

進化した標準ライブラリで事足りますか?

373
デフォルトの名無しさん[sage]   投稿日:2016/05/08 11:02:25  ID:/0/pzihM.net
依存関係を考えるのは変化を最小化するためだから
進化されると困る
OSの進化よりライブラリの進化の方が激しい場合にはライブラリを使う意味がわからん

374
デフォルトの名無しさん[sage]   投稿日:2016/05/08 13:41:39  ID:5VemuvB9.net
>356
ハードウェアのPEZY?
どこに向かってるんでしょうか。

375
デフォルトの名無しさん[sage]   投稿日:2016/05/08 15:25:17  ID:ZUsvhrTO.net
haskell platform のライブラリですら場所がコロコロ変わってるし

376
デフォルトの名無しさん[]   投稿日:2016/05/13 02:43:07  ID:DqCdCrx3.net
エラーは書いた自分が悪いんだからな。
コンパイラは親切に教えてくれるだけ。
言語を呪う暇が有ったら精進せい。

377
デフォルトの名無しさん[sage]   投稿日:2016/05/13 08:07:43  ID:mEOqqcQ9.net
自分で精進しなくても他人に親切に教えてあげるだけでも良いですよ
むしろ自分で一行も書かない方がエラーしませんから

378
デフォルトの名無しさん[sage]   投稿日:2016/05/13 22:06:50  ID:1un4dmOW.net
もうすぐ自動プログラミングが完成するからそれまで我慢してほしい

379
デフォルトの名無しさん[sage]   投稿日:2016/05/14 09:02:55  ID:eR5KeWi+.net
したくないことを定義したいと思えた人はもう救われている
定義もしたくない人はまだ我慢している

380
デフォルトの名無しさん[sage]   投稿日:2016/05/14 14:46:07  ID:XgEAo3/V.net
コンパイル時よりも書いてる最中に誤りを教えてほしい
ペアプログラミングの相方がAIになった感じ
部分的には実現しつつあるが
コメント1件

381
デフォルトの名無しさん[]   投稿日:2016/05/15 08:20:24  ID:XkJuevwc.net
>380
IDEで出来てない?
誤りが仕様書と違うとかだと無理だけど(´・ω・`)

382
デフォルトの名無しさん[sage]   投稿日:2016/05/15 08:57:05  ID:1apbfDjR.net
これ合法だろって言おうとしたら即座に違法ですよって教えてくれるAI

383
デフォルトの名無しさん[]   投稿日:2016/05/16 21:47:15  ID:CaYDtDLn.net
エラーは心の弱さなんですよ。
信じる強い心が有れば、それは最早エラーではないのです。
コメント1件

384
デフォルトの名無しさん[sage]   投稿日:2016/05/17 00:24:35  ID:dHn9rgtk.net
工学にオカルトを持ち込むな

385
デフォルトの名無しさん[sage]   投稿日:2016/05/17 13:41:31  ID:hwMqt89i.net
オカルテック

386
デフォルトの名無しさん[sage]   投稿日:2016/05/18 13:07:37  ID:umgMkwtM.net
人の書いたライブラリ使っている時点でオカルトを認めていることになる

387
デフォルトの名無しさん[]   投稿日:2016/05/18 17:36:22  ID:gNA+uVOn.net
そんな事言ったら因果律が永続する保証も無いですし

388
デフォルトの名無しさん[sage]   投稿日:2016/05/18 21:22:36  ID:yDy1hpmH.net
納品前後のバグに対して >383 を言うのはよく聞く

389
デフォルトの名無しさん[sage]   投稿日:2016/05/19 04:46:05  ID:4D1NuyNI.net
Haskellで納品とかいう単語出てくる仕事してる人がいると思ってなかった
コメント1件

390
デフォルトの名無しさん[sage]   投稿日:2016/05/19 08:10:39  ID:wMatBPK5.net
Haskell でとは言ってない

391
デフォルトの名無しさん[sage]   投稿日:2016/05/19 08:32:15  ID:UIEjFqFy.net
掛持ちという発想がなかった原因はなにかね
正規分布のように中心が一つしかないという保証がなくなるからか

392
デフォルトの名無しさん[sage]   投稿日:2016/05/20 07:04:01  ID:SR6Xc90A.net
信じたかった

393
デフォルトの名無しさん[sage]   投稿日:2016/05/20 22:38:42  ID:1aQ4wkxX.net
>389
Haskellのプログラムを大学の研究室に納品したことがある

394
デフォルトの名無しさん[sage]   投稿日:2016/05/21 02:33:23  ID:DrfWRUfn.net
理系の研究者ならプログラミングくらい自力でしろよ

395
デフォルトの名無しさん[sage]   投稿日:2016/05/21 16:49:35  ID:l1JVtE5I.net
プログラムはコンピュータとの言語コミュニケーション行為だから文系だと思う

396
デフォルトの名無しさん[sage]   投稿日:2016/05/21 18:16:48  ID:/Psi2UIt.net

397
デフォルトの名無しさん[sage]   投稿日:2016/05/22 05:31:08  ID:ZAJLrv7i.net
もし文系だとしても食わず嫌いはよくない
闇米を食べないと生きのこれないなら食べればいい

398
デフォルトの名無しさん[sage]   投稿日:2016/05/22 09:41:44  ID:0H/7GBCM.net

399
デフォルトの名無しさん[sage]   投稿日:2016/05/22 18:33:10  ID:wU59/EOp.net(2)
誰か早くAndroid用Haskell開発環境出して
ソースコードはVimtouchで書くからコンパイル環境だけでいいよ

400
デフォルトの名無しさん[sage]   投稿日:2016/05/22 18:33:54  ID:wU59/EOp.net(2)
User-defined error messages for type errors
ぼくのかんがえたさいきょうのエラーメッセージ出せるの?

401
デフォルトの名無しさん[]   投稿日:2016/05/23 17:33:33  ID:2tbsk8rj.net
http://kenokabe-techwriting.blogspot.jp/2016/05/c.html

C言語は純粋関数型言語ってまじなの?

402
デフォルトの名無しさん[sage]   投稿日:2016/05/23 19:57:19  ID:eO7rd+do.net
kenokabeが言ってるんだから正しいだろ

403
デフォルトの名無しさん[sage]   投稿日:2016/05/23 20:04:56  ID:rPmJbVu7.net(2)
C言語という名前があるのにもう一個名前をつけたくなる理由は
主語を大きくしたいからだよな
C言語というと主語が小さいから

404
デフォルトの名無しさん[sage]   投稿日:2016/05/23 21:56:35  ID:1ZOe0erL.net
手続き型言語だと思います

405
デフォルトの名無しさん[sage]   投稿日:2016/05/23 22:36:53  ID:rPmJbVu7.net(2)
手続き型言語はオワコンというのはまあわかるんだけど
C言語は手続き型言語である、ゆえにC言語はオワコンといわれると何か違和感がある
コメント1件

406
デフォルトの名無しさん[sage]   投稿日:2016/05/24 00:05:33  ID:9rXEqh5f.net
linuxはこれからもCで書かれ続けるだろうしな
十年後にRustになってたら面白いのだが

407
デフォルトの名無しさん[sage]   投稿日:2016/05/24 15:51:07  ID:4otCrHFU.net
Rustの余命はあと2、3年でしょ、Mozillaと同時に死ぬ
その後またRustっぽいのが出て潰れてを繰り返して当分C(++)は安泰

408
デフォルトの名無しさん[]   投稿日:2016/05/24 16:52:41  ID:RDPSz39C.net(2)
C++は無くなるでしょ。

409
デフォルトの名無しさん[sage]   投稿日:2016/05/24 17:06:38  ID:EVeDeqwX.net(2)
Imagine there's no C++

410
デフォルトの名無しさん[]   投稿日:2016/05/24 17:30:07  ID:RDPSz39C.net(2)
メニーコア時代にはHaskell以外全部無くなるから。

411
デフォルトの名無しさん[sage]   投稿日:2016/05/24 18:50:13  ID:jjx2hd2q.net
>405
手続き型がオワコンと言うのは願望に過ぎんのじゃないか?
だから違和感がある。

412
デフォルトの名無しさん[sage]   投稿日:2016/05/24 19:19:21  ID:EVeDeqwX.net(2)
悪い願望はない
みんな良い願望

413
デフォルトの名無しさん[sage]   投稿日:2016/05/24 22:44:06  ID:G9TLp4kO.net
Cある限りC++は滅びぬ
あとObjCも

414
デフォルトの名無しさん[]   投稿日:2016/05/24 23:50:13  ID:80vE3gqA.net
Cは真っ先にHaskellに取って代わられるだろね。

415
デフォルトの名無しさん[sage]   投稿日:2016/05/25 22:15:27  ID:5tekMzBC.net
parsec
parsec1
parsec2
parsec3

同じ様な名前のパッケージがこんなにもあるのは何なの?
parsec3 が最強だが暴れ馬で素人には扱いづらい、みたいな?

416
デフォルトの名無しさん[sage]   投稿日:2016/05/26 07:32:42  ID:F8ZCE4kg.net
どこの言語でもパーサは難しい
それは構文木の型がuser-definedだから
user-definedより規約、という手もあるがそれをやるとLispのように型がなくなる

417
デフォルトの名無しさん[sage]   投稿日:2016/05/29 10:25:35  ID:cWnz6Nez.net(4)
ghciに於いて、ちょっと書き換えて、この書き方は文法的に合ってるかのみ確認したいとき、リロードは大袈裟な気がします
コンパイルはしないで文法的チェックのみ高速省メモリで済ます方法はありませんか?
コメント1件

418
デフォルトの名無しさん[sage]   投稿日:2016/05/29 10:52:46  ID:hkeRWX+0.net
>417
flymake とか?ちょっと違うかな
コメント1件

419
デフォルトの名無しさん[sage]   投稿日:2016/05/29 11:14:28  ID:3jHNsFdi.net(2)
Haskell でプログラミングしてて
「ちょっと書き換えてみたけど、これって文法的に正しいのか分からん。チェッカーが欲しいな」
という状況が想像できないんだが・・・

Haskell の「文法」ってそんなに難しいか?
モダンな言語の中でも比較的シンプルな方だと思うぞ。
(言語拡張によってはちょっとアレだが)

それに、結局最後にはロードするなりコンパイルするんだろ?
その時にちゃんと文法エラーが指摘されるんだから、
それまでは気にせずコーディングを続ければいいと思う。
型の間違いと違って、文法間違いの影響なんてごく局所的なものなんだし。
コメント1件

420
デフォルトの名無しさん[sage]   投稿日:2016/05/29 11:35:32  ID:cWnz6Nez.net(4)
>418
ちょっと違う気がします

>419
そうですか。。。

421
デフォルトの名無しさん[sage]   投稿日:2016/05/29 11:38:27  ID:cWnz6Nez.net(4)
()はファンクタですがfmapで右側にしか関数を適用できません
両側に適用したいときは自分で(汚く)書くしかありませんか? それともそういう時用の何かがあるのですか?
コメント1件

422
デフォルトの名無しさん[sage]   投稿日:2016/05/29 12:18:30  ID:MVe5mOf8.net
バグがあるわけでもないのに漠然と汚いというのはオカルトじゃないのか
コメント1件

423
デフォルトの名無しさん[sage]   投稿日:2016/05/29 12:25:45  ID:3jHNsFdi.net(2)
>421
自分で綺麗に書く方法もある。

綺麗に書く能力がなかったり、
そもそもこの程度でも再発名はしたくないとか、
みんなと一緒が良いとか思っているのなら
Data.Bifunctor.bimap 関数を使うのも手。

まぁ、これはあなたが望んでいる挙動とは違うかもしれんが。

424
デフォルトの名無しさん[sage]   投稿日:2016/05/29 13:04:59  ID:cWnz6Nez.net(4)
>422,423
自己解決しました

425
デフォルトの名無しさん[]   投稿日:2016/06/01 15:39:34  ID:HdKKv0pS.net
岡部健って何者?
コメント2件

426
デフォルトの名無しさん[]   投稿日:2016/06/01 16:57:59  ID:RDQRhO1c.net
>425
関数界のエースです。

427
デフォルトの名無しさん[sage]   投稿日:2016/06/01 17:43:05  ID:RnjmzRnq.net
炎上芸人

428
デフォルトの名無しさん[sage]   投稿日:2016/06/01 23:36:25  ID:VULwVLKo.net
触っちゃいけない系男子


429
デフォルトの名無しさん[]   投稿日:2016/06/02 13:27:58  ID:UczpuTGc.net
>425
グローバルスタンダードなナレッジを持った情報技術者(UCLA卒業)。本人曰わく。

430
デフォルトの名無しさん[sage]   投稿日:2016/06/02 14:15:52  ID:mrjBYZ6h.net
スタンダードどまりだと世界じゃ使い物にならないと思う
日本のへなちょこIT業界ならともかく

431
デフォルトの名無しさん[sage]   投稿日:2016/06/03 07:57:06  ID:gErWnzdr.net(3)
FRPは是非とも学ぶべき事項ですか?

432
デフォルトの名無しさん[sage]   投稿日:2016/06/03 08:33:08  ID:JXPKk4n6.net(2)
近くにいるなら是非とも
遠ければ使い物にならない

433
デフォルトの名無しさん[sage]   投稿日:2016/06/03 08:41:19  ID:gErWnzdr.net(3)
FRPは砂上の楼閣だったのですか?

434
デフォルトの名無しさん[sage]   投稿日:2016/06/03 09:02:04  ID:JXPKk4n6.net(2)
重力とかどこの田舎だよ
宇宙じゃ使い物にならない

435
デフォルトの名無しさん[sage]   投稿日:2016/06/03 09:20:50  ID:gErWnzdr.net(3)
FRPは銀の弾丸ではなかったのですか?

436
デフォルトの名無しさん[sage]   投稿日:2016/06/04 10:40:42  ID:IyXgOGn3.net
FRPなんて使う羽目になった時点で敗北だよ

437
デフォルトの名無しさん[]   投稿日:2016/06/04 13:17:17  ID:RcJdjklN.net
Kenokabeっての、日本の恥をさらす事になるので、SOに投稿するのはやめてほしい


http://stackoverflow.com/questions/37293422/a-true-frp-principle-and-r...
コメント1件

438
デフォルトの名無しさん[]   投稿日:2016/06/04 19:02:44  ID:D9CDDk1T.net
別にアメリカ人がstackoverflowでアホな事書いてもアメリカの恥にはならないだろう
どっかの団体を代表してるわけでもない唯の無職なんだから

439
デフォルトの名無しさん[sage]   投稿日:2016/06/04 19:33:19  ID:OVl98QFH.net
>437
StackOverflow に限った話ではないが、あの様なQ&A形式のサイトでは、
ある回答者が間違ったことを言っていると思ったなら、
あなたが正しい回答で質問者を導けばよい。

それができない、やりたくないなら無視しとけ。
全く関係ないこんな所でグチるな。

440
デフォルトの名無しさん[sage]   投稿日:2016/06/04 20:50:55  ID:qcMF66HN.net
Ceylon

441
デフォルトの名無しさん[sage]   投稿日:2016/06/04 21:02:39  ID:0F871G7+.net
実績を通報してアク禁に誘導しとけ
馬鹿正直に相手するなどそれこそ馬鹿のすること

442
デフォルトの名無しさん[sage]   投稿日:2016/06/05 09:33:55  ID:bEydbMY3.net(2)
ゼロリスクにはコストがかかるが、リスクを無視すればコストも無いという、いつもの話

443
デフォルトの名無しさん[sage]   投稿日:2016/06/05 10:24:17  ID:4/Mq9UHg.net
System.Environment.getArgs関数って、文字コードはどうなるのですか?

たとえば、

main :: ()
main = getArgs >>= return . (== "りす") . head >>= print

これをコンパイルして実行ファイル risu を作った場合、
どんな実行環境でも 「risu りす」 は True を標準出力に出力しますか?
コメント1件

444
デフォルトの名無しさん[sage]   投稿日:2016/06/05 12:01:28  ID:bEydbMY3.net(2)
言質を取ることと事実を知ることは一致しない
ノルマを課すことと達成することが一致しないように

445
デフォルトの名無しさん[sage]   投稿日:2016/06/05 13:23:43  ID:8WdagiWY.net
>443
GHCはUTF-8で書くと思うので、そのソースコードのりすはUTF-8のりすです。従いまして、例えばSJISコンソールなぞからいくらりすを送っても梨の礫でありましょう
コメント1件

446
デフォルトの名無しさん[]   投稿日:2016/06/06 12:31:09  ID:EqzbMvnJ.net
岡部 健

447
デフォルトの名無しさん[sage]   投稿日:2016/06/06 20:19:50  ID:vWa0r7As.net
>445
つまりコマンド引数から得た文字列は端末のエンコーディング設定と同じ文字コードになっている、
という解釈でよいのですね。
だからリテラル文字列と一緒に処理する時は注意が必要、と。


ところで梨の礫なんて言葉、最近はなかなかお目にかかれません。
おばあちゃんでしょうか。
なんかほっこりした気分になりました、ありがとうございます。

448
デフォルトの名無しさん[sage]   投稿日:2016/06/13 20:25:55  ID:s5cEFL5F.net
Text.ParserCombinators.Parsecについて質問です

letter `manyTill` try p


pは数文字食ってから失敗するかもしれないパーザです。これはpが成功しない間 letter を繰り返し食って、最後にpを成功させて、食ったpの部分を除いた文字列を返しますが
除かないで末尾にくっつけたまま返して欲しい場合はどうしますか?

449
デフォルトの名無しさん[sage]   投稿日:2016/06/13 22:43:48  ID:rcz/H1iF.net
lookAhead

450
デフォルトの名無しさん[]   投稿日:2016/06/14 21:28:34  ID:R0tjr5X3.net
すみませんIO関数の使い方で解らなくなったのですが

func1 :: Int -> IO (Int, Int)
func1 n = do
let n' = func2 n
return (n, n')

func2 :: Int -> Int
func2 n = n * 2

IO関数の結果を通常の名前に束縛しようとしたら
(v1, v2) = func1 エラーになりました。

IO関数の返値を取り出して通常の変数に束縛して、
通常の関数に引き渡し計算をしたいのですが
その方法をもし知ってましたら教えて下さい。
コメント3件

451
デフォルトの名無しさん[sage]   投稿日:2016/06/14 21:38:10  ID:Sm/6bUGx.net
unsafePerformIOしかないんじゃない?
コメント1件

452
デフォルトの名無しさん[sage]   投稿日:2016/06/14 22:27:07  ID:5Tpa+uD8.net
>450
日本語も意図もよくわからんが、そもそも

func1 n = (n, func2 n)

でいいと思うのだが。
コメント1件

453
デフォルトの名無しさん[sage]   投稿日:2016/06/14 22:44:08  ID:XZG+uE2j.net(2)
>450
俺も意図が分からんが、こういう事か?

func0 = do
 (x, y) <- func1
 func3 x
 func4 y
コメント2件

454
デフォルトの名無しさん[sage]   投稿日:2016/06/14 22:47:22  ID:XZG+uE2j.net(2)
>453
すまん、質問文につられて引数を忘れてた。

(x, y) <- func じゃなくて (x, y) <- func 1 な。
コメント1件

455
デフォルトの名無しさん[sage]   投稿日:2016/06/15 22:15:27  ID:vYYf6Ztk.net
>451 >452 >453 >454
どうもありがとうございます。

「unsafePerformIO」や「<-」での
バインド試してみます。

456
デフォルトの名無しさん[sage]   投稿日:2016/06/15 22:30:31  ID:6m5ApfU9.net
Haskellの型は弱いんですか!?

457
デフォルトの名無しさん[sage]   投稿日:2016/06/15 23:18:57  ID:bw2YOmBW.net
smtp認証がうまくできんなー
pythonなら余裕なんだが

458
デフォルトの名無しさん[sage]   投稿日:2016/06/16 02:04:27  ID:NRUgKoir.net(2)
smtps-gmail でいいなら何の問題もないのでは。
「安全性の低いアプリの許可」がウザいけど
コメント1件

459
デフォルトの名無しさん[sage]   投稿日:2016/06/16 17:01:17  ID:pAcx7t63.net
>458
ありがとう
普通に送れてる人がいるなら
やっぱりこっちの環境が悪いんやな~
コメント1件

460
デフォルトの名無しさん[sage]   投稿日:2016/06/16 22:02:58  ID:NRUgKoir.net(2)
>459
前バージョンでプルリク入ってたので
バージョンを1.3.2に上げれば大丈夫
コメント1件

461
デフォルトの名無しさん[sage]   投稿日:2016/06/17 11:33:07  ID:qUa7S6e8.net
>460
smtps-gmailを1.3.1から1.3.2にアップデートしたら解決しました
ありがとうございました

462
デフォルトの名無しさん[]   投稿日:2016/06/19 09:34:14  ID:U9gQeIb+.net(4)
>450
ghci上でletするのと違って、hsファイルではletしたらinしないとダメ。
returnの前にin入れるよろし。
コメント1件

463
デフォルトの名無しさん[]   投稿日:2016/06/19 10:02:38  ID:U9gQeIb+.net(4)
func1 :: Int -> IO (Int, Int)
func1 n = let
n' = func2 n
func2 n = n * 2 in
return (n, n')

letとか使い慣れてなかったからインデントエラーで手間取った^^;
returnは普通の関数(というか、do n <- getContentsもgetContents >>= n -> の構文糖衣なだけで、普通のモナド専用演算子だが)

464
デフォルトの名無しさん[]   投稿日:2016/06/19 10:08:35  ID:U9gQeIb+.net(4)
あれ、¥が消えてる?
>>= n ->は
>>= の後にnを引数に取るラムダ式に訂正ね。

465
デフォルトの名無しさん[]   投稿日:2016/06/19 10:16:10  ID:U9gQeIb+.net(4)
あと、文字コードを一旦Shift-JISにして、変なごみを取ってからghciに通すと良い。

466
デフォルトの名無しさん[sage]   投稿日:2016/06/19 14:09:22  ID:+Gq0sOtS.net
>462
doの中のletって、inいらないんじゃなかったっけ?

467
デフォルトの名無しさん[]   投稿日:2016/06/19 18:53:19  ID:pXg+pklT.net
haskellを始めたいのですが、得意分野は何ですか?
人工知能でしょうか?
有名ソフトには何がありますか?
c#のラムダ式は好きです

468
デフォルトの名無しさん[]   投稿日:2016/06/19 19:15:45  ID:Z3K3Aq0Z.net
得意分野は普通のプログラミング
速度や低レイヤーを触りたいとかなら他の言語にしとけ
人工知能はpythonとかライブラリの揃ってていいんじゃないだろうか 知らんけど

469
デフォルトの名無しさん[sage]   投稿日:2016/06/19 19:43:39  ID:KC3RPfxA.net
昔はよくHaskellコンパイラを作るのが得意と揶揄されました

470
デフォルトの名無しさん[]   投稿日:2016/06/19 21:06:24  ID:XxQWN3nU.net
極超低温下で動くソフトウェアはHaskell以外選択肢が無いと聞きました。

471
デフォルトの名無しさん[sage]   投稿日:2016/06/20 04:48:23  ID:SIt1WX2P.net
Algorithm Wが再帰な型を無視するのは何故?
C++では普通に使うのに未定義になる

472
デフォルトの名無しさん[sage]   投稿日:2016/06/21 12:29:55  ID:/zCyXUk+.net
得意分野は普通のデフォルト
デフォルトの振舞いを批判する暇があったら対案を出せ

473
デフォルトの名無しさん[sage]   投稿日:2016/06/23 06:48:52  ID:Yp4/uj8T.net
yコンビネータで y (\ f x -> ...) と書けばfはlet多相ではないことを明示できる

474
デフォルトの名無しさん[sage]   投稿日:2016/06/23 18:55:59  ID:05qDBgT1.net
ふぇぇ。。。難解用語連発で何喋ってるか判らないよぅ。。。

475
デフォルトの名無しさん[]   投稿日:2016/06/25 09:42:45  ID:VirkFiI/.net(5)
カリー化について質問があります。

add :: Int -> (Int -> Int)
add x y = x + y

今、ハットンの本を読んでいます。

add :: Int -> (Int -> Int)
のほうは意味がよくわかるのですが、

add x y = x + y
この表記法のがしっくりしません。

add : Z -> {f | f は Z から Z への写像}
add : x -> (f : Z ∋ y -> x + y ∈ Z)

なので、

(add(x))(y) = x + y

となるという意味かと思います。

476
デフォルトの名無しさん[]   投稿日:2016/06/25 09:48:52  ID:VirkFiI/.net(5)
というか関数の書き方についての正式な定義がハットンの本には
ありません。

引数は1つしか取らないということでいいのでしょうか?
たとえば、

f x = ...

と書いた場合、
「=」は写像の対応を表す記号で、
x -> ...
という意味なのでしょうか?
コメント1件

477
デフォルトの名無しさん[]   投稿日:2016/06/25 09:53:44  ID:VirkFiI/.net(5)
add x y = x + y

という表記法は普通の関数の表記法とは全く異なるかりー化された関数用
の全く新しい表記法という考えでOKでしょうか?

478
デフォルトの名無しさん[sage]   投稿日:2016/06/25 09:54:40  ID:mWRDlDK6.net(4)
>476

add x y = x + y



add = ¥x -> ( ¥y -> x + y )

の略記( ¥x -> … はラムダ式のリテラル)。
どうしても書きたきゃ1段階だけ略記して

add x = ¥y -> x + y

と書いても構わない(がそう書くのは見たことがない)。
コメント2件

479
デフォルトの名無しさん[sage]   投稿日:2016/06/25 09:58:23  ID:mWRDlDK6.net(4)
あ〜もしかして、

f x

で関数 f を x に適用するという表記が腑に落ちてないのかしら。
関数型言語で関数適用をいちいちf(x)みたいにカッコつけて書いてると煩雑なので
空白それじたいが(左結合の)関数適用演算子であるかのように表記する慣習。

480
デフォルトの名無しさん[sage]   投稿日:2016/06/25 09:59:48  ID:RoCVjm19.net
f = \x -> h (g x)
f x = h (g x)
f = h . g

がすべて等価だったはず

481
デフォルトの名無しさん[]   投稿日:2016/06/25 10:01:20  ID:VirkFiI/.net(5)
>478

ありがとうございました。略記法なんですね。

add = \x -> ( \y -> x + y )

の正確な意味はまだわかりませんが、こっちのほうは意味がはっきり
わかります。
コメント1件

482
デフォルトの名無しさん[sage]   投稿日:2016/06/25 10:05:25  ID:mWRDlDK6.net(4)
>481
普通にラムダ式

λx.λy. x+y

のリテラル(表記法)ってだけ。

483
デフォルトの名無しさん[]   投稿日:2016/06/25 10:06:47  ID:VirkFiI/.net(5)
>478-480

ありがとうございました。

add x y = x + y

ハットンの本を読んでいて、カリー化が出てくるまでは、
関数は一つの引数しか取らないものしか出てきませんでした。

カリー化のところでいきなり x y という表記が出てきたの
でこれは何なのかと混乱してしまいました。タプルに似た
何かの型の要素なのかと思ったり。

略記法ということで納得しました。
ありがとうございました。
コメント1件

484
デフォルトの名無しさん[sage]   投稿日:2016/06/25 10:09:33  ID:N25pDoND.net
ポイントフリースタイルはしっくりするが、難解と言われるのが面倒臭い

485
デフォルトの名無しさん[sage]   投稿日:2016/06/25 10:11:07  ID:mWRDlDK6.net(4)
>483
関数適用演算子としての空白は左結合なんで
add x y はカッコを入れてわかりやすく書けば (add x) y のこと。
Haskellの関数はご推察通り一つの引数しか取らない(最初からカリー化されている)。

486
デフォルトの名無しさん[sage]   投稿日:2016/06/26 17:11:33  ID:gNzZf9B4.net(3)
pred
subtract 1

Intの場合、両者は最適化でも効いて、全く同じコードになってくれますか?
後者は大袈裟なので前者を書きたい

487
デフォルトの名無しさん[sage]   投稿日:2016/06/26 17:20:23  ID:K7S4TdpP.net(2)
Enumのデフォルト実装は

pred = toEnum . (subtract 1) . fromEnum

あとは自分で考えろ

488
デフォルトの名無しさん[sage]   投稿日:2016/06/26 18:22:42  ID:gNzZf9B4.net(3)
むむむ…
id . subtract 1 . id

subtruct 1

では素人考えでは後者の方が速いように思えますが、もしかすると上が下に変換されるかも知れないので判んないです><

489
デフォルトの名無しさん[]   投稿日:2016/06/26 18:56:11  ID:fbaRfY1T.net(2)
foldr がなぜ以下のようになっているのか分かりません。

foldr :: (a -> b -> b) -> b -> [a] -> b

以下では間違いなのでしょうか?
foldr :: (a -> a -> a) -> a -> [a] -> a
コメント1件

490
デフォルトの名無しさん[]   投稿日:2016/06/26 18:58:18  ID:fbaRfY1T.net(2)
sum = foldr (+) 0
product = foldr (*) 1

などを考えると下でもいいような気がするんですが。

491
デフォルトの名無しさん[sage]   投稿日:2016/06/26 19:18:28  ID:K7S4TdpP.net(2)
そんなことしたら

(:) :: a -> [a] -> [a]

みたいな関数をfoldrに渡せなくなるだろ
foldr で map 書こうとしてみればわかるよ

492
デフォルトの名無しさん[sage]   投稿日:2016/06/26 19:23:57  ID:gNzZf9B4.net(3)
>489
二項演算が同じ型同士限定である必然性に乏しいから

493
デフォルトの名無しさん[sage]   投稿日:2016/06/29 07:04:16  ID:r25iBQLU.net
必然性に乏しいものを信じないだけで、間違っているという確信があるわけではないな

確信がないのに偉そうなことを言ってると必然的に反感を買う
無神論が許されないという必然性

494
デフォルトの名無しさん[sage]   投稿日:2016/06/29 08:38:27  ID:3aYMqn0k.net
お、そうだな

495
デフォルトの名無しさん[sage]   投稿日:2016/06/30 03:18:46  ID:u1Y0HI53.net
例 文字列を数回くりかえして「???」でくくる関数

<???> :: Int -> String -> String
3 <???> hello = "???hellohellohello???"

foldr <???> hello [2,2,3] = "???hellohellohello??????hellohellohello??????hellohellohello??????hellohellohello???"

適当に考えてみた 間違ってたらごめん

496
デフォルトの名無しさん[sage]   投稿日:2016/06/30 07:09:20  ID:MCZcDeJz.net
(a -> b -> b) -> b -> [a] -> b
[a] -> (a -> b -> b) -> b -> b

Monoid m => [a] -> (a -> m) -> m
二項演算である必要がなかったので単項演算にする例です

497
デフォルトの名無しさん[sage]   投稿日:2016/07/02 11:46:36  ID:dEZ6Zi3t.net
モナドの良さって未だに分からん。
do記法が使えるから嬉しいってこと?

498
デフォルトの名無しさん[sage]   投稿日:2016/07/02 15:29:55  ID:1toMA/Of.net
良いから使うわけじゃないし嬉しいわけでもないよね

499
デフォルトの名無しさん[sage]   投稿日:2016/07/02 15:30:33  ID:Dac+6Yzz.net
Maybe使ってもわからなかったら諦めろ

500
デフォルトの名無しさん[sage]   投稿日:2016/07/02 15:38:59  ID:RwQxrqCZ.net
リストモナド使えない言語とか窓から投げ捨てるレベル

501
デフォルトの名無しさん[sage]   投稿日:2016/07/02 20:47:59  ID:M4B9OnE7.net
モナドは文脈

演算中、今何の話してんの?ってことをはっきりさせて余計なこと話そうとする奴を黙らせる

うっかり余計なこと話して脱線しないようにするシステム

ADHD矯正システム
コメント1件

502
デフォルトの名無しさん[sage]   投稿日:2016/07/03 00:10:37  ID:g/2Vj7Kl.net
文脈云々はバズワードだから嬉しくないが
バズワードを回避してまともな言葉が使えたらそれだけで嬉しい

503
デフォルトの名無しさん[sage]   投稿日:2016/07/03 00:22:39  ID:q98BxS4G.net
ただのプログラム可能なセミコロンだろ
コメント1件

504
デフォルトの名無しさん[sage]   投稿日:2016/07/03 09:19:10  ID:EfkUt+fo.net
f '@' "abcde" = ["@abcde", "a@bcde", "ab@cde", "abc@de", "abcd@e", "abcde@"]

こんな f って小さく書けますかね?

505
デフォルトの名無しさん[sage]   投稿日:2016/07/03 09:44:07  ID:33tWiWdT.net(2)
f c str = f' c ("",str)
 where
  f' c (xs,[]) = [xs++[c]]
  f' c (xs,y:ys) = (xs++(c:y:ys)): f' c (xs++[y],ys)

これが小さいか大きいかは知らん

506
デフォルトの名無しさん[sage]   投稿日:2016/07/03 09:55:09  ID:kAyTm6a5.net
import Data.List (inits, tails)

f :: a -> [a] -> [[a]]
f v xs = zipWith ((++) . (++ [v])) (inits xs) (tails xs)

ただし f '@' "" = ["@"] となるが、これが望んだ結果なのかは知らん。

507
デフォルトの名無しさん[sage]   投稿日:2016/07/03 09:57:26  ID:33tWiWdT.net(2)
f c str = splits [] c [] str
 where
  splits acc c xs [] = reverse $ (reverse (c:xs)):acc
  splits acc c xs (y:ys) = splits ((reverse (c:xs)++(y:ys)):acc) c (y:xs) ys

main = print $ f '@' "abcde"

末尾再帰にしたった

508
デフォルトの名無しさん[]   投稿日:2016/07/05 23:11:56  ID:teB4RGPK.net
メソッドチェーンみたいなことをやりたいのですが、Haskellではどうやればよいのでしょうか?

509
デフォルトの名無しさん[sage]   投稿日:2016/07/05 23:26:50  ID:sg2Iayfh.net
|>

510
デフォルトの名無しさん[sage]   投稿日:2016/07/06 01:01:04  ID:SGI4C5kx.net
hayooで a -> (a -> b) -> b 探しても名前ぜんぶバラバラやん
なぜ統一できんかったんや

511
デフォルトの名無しさん[sage]   投稿日:2016/07/06 03:35:43  ID:3LtpfHJl.net(2)
import Data.Function ((&))

512
508[]   投稿日:2016/07/06 09:07:58  ID:e+6hT/7h.net
すみません、よくわからないのでメソッドチェーンの具体的なコードを教えて下さい。
コメント1件

513
デフォルトの名無しさん[sage]   投稿日:2016/07/06 11:03:34  ID:3LtpfHJl.net(2)
>512

http://ideone.com/IXEJ23

各行にそれぞれ複数の数字が書かれたデータを標準入力から読み取って
全部の行の合計を出力する例
コメント2件

514
508[]   投稿日:2016/07/07 00:39:56  ID:3l/TdPIo.net
>513
ありがとうございます。
メソッドチェーン専用の関数みたいなものは無いんですね。

d3.selectAll("p").style("color", "white");
のようにメソッドチェーンの途中で引数を取る関数がある場合はHaskellではどう書くのでしょうか?

515
デフォルトの名無しさん[sage]   投稿日:2016/07/07 07:24:10  ID:2aQfBH7H.net
メソッドチェーンを使う科学的根拠がない
二項演算なら無駄な括弧がなくなることは客観的にわかるが

516
デフォルトの名無しさん[sage]   投稿日:2016/07/07 07:35:43  ID:LeKCeFlK.net(2)
import Data.Function ((&))
d3 & selectAll “p” & style “color” “white”

他の言語で T1.method(T2,T3) (返値はR)みたいに書くものはHaskellだと
method :: T2 -> T3 -> T1 -> R という型を持つ普通の(カリー化)関数として書いて
関数適用や関数合成を連鎖させて書く

あと関数適用や関数合成は数学同様に右から左に連鎖させて書くのが普通で、
いわゆるメソッドチェーンのように左から右には書かない(モナドを除く)
>513のようなものは

getContents >>= print.sum.map read.concat.map words.lines

が普通の書き方

517
デフォルトの名無しさん[sage]   投稿日:2016/07/07 07:45:28  ID:LeKCeFlK.net(2)
あと、メソッドチェーンみたいな非本質的なもんは言語に組み込まずに
どうしてもやりたければライブラリでなんとかするのがHaskellでの普通の発想で、
実際に(関数合成演算子のドットを数学的からくりを駆使してメソッドチェーンの
ドットとして読めるようにしてしまうことで)それをしてるのが Lens パッケージ

518
デフォルトの名無しさん[sage]   投稿日:2016/07/08 07:50:05  ID:HHTq9Yfv.net(2)
http://codeforces.com/problemset/problem/689/C

僕はアルゴリズムに、再帰呼び出しによるマージソートを選択しました
solve::Int -> [Int]
solve j = (1 `tbl` j):(merge (map (`tbl` j) [2..]) $ solve (j+1))

tbl i j = i*(j+1)^3

(mainとmergeは本質でないので省略)このルーチンでのぞんだ所、答えは正しいのですが大きなmに対してMLEでした。原因はリストを使ってるせいで、評価済みの要素はもう不要にも関わらず保持し続けてしまっているせいだと思い、
sweep (a,b) c = (b,c) という関数を作り、
foldl' sweep (undefined,undefined) $ take (m+1) $ solve 1
することで最後の2つの要素のペア(求める値とその次の値)を得て、途中になぞっていったリストの要素はガベッジコレクション可能になると期待しました。
結果、前回より二つテストを前進しましたがそこでやはりMLEでした。次の一手を教えてください

519
デフォルトの名無しさん[sage]   投稿日:2016/07/08 08:51:31  ID:6Zixlsju.net
単なる二分探索の問題に見えるのでそもそものアルゴリズム選択がまちがってるのでは…

520
デフォルトの名無しさん[sage]   投稿日:2016/07/08 09:38:40  ID:HHTq9Yfv.net(2)
(´:ω;`)ウッ……有り難うございました

521
デフォルトの名無しさん[sage]   投稿日:2016/07/09 10:23:30  ID:6VbJAOZW.net
本質的なコードは4行くらいしか書いてないから捨てるというのも意外に良い手だよな

522
デフォルトの名無しさん[sage]   投稿日:2016/07/11 08:51:48  ID:/+kUKYFr.net
constについて教えてください。ghciで
const 'A' 'B'
->'A'

const 'A' undefined
->'A'
となりますが、例えば
const <$> Just 'A' <*> undefined
->*** Exception: Prelude.undefined

となります。この結果の違いが生じる理由は何なのでしょうか

523
デフォルトの名無しさん[sage]   投稿日:2016/07/11 11:19:44  ID:f8mQHfL+.net
fmapは中身に作用するからだろ

524
デフォルトの名無しさん[sage]   投稿日:2016/07/11 18:34:09  ID:AjHPC2UO.net(2)
undefined :: Maybe Char の中からパターンマッチで
値を取り出して処理しようとする時点で例外を投げてる
<*> の第1数のモナドに包まれた関数が const だろうがなんだろうが
その関数の評価の前に<*> の第2引数の評価が生じるのでそうなる

525
デフォルトの名無しさん[sage]   投稿日:2016/07/11 18:42:28  ID:AjHPC2UO.net(2)
あ、すまん undefined はChar 特化じゃなくて多相だわ
多相性を端折ってMaybeに特化して敢えて再発明すると

<*> :: Maybe (a->b) -> Maybe a -> Maybe b
mf <*> mv = case (mf,mv) of
 (Just f, Just v) -> Just (f v)
 (Nothing, _) -> Nothing
 (_, Nothing) -> Nothing

みたいになってて、undefined 値をパターンマッチしようとして例外投げてる(たぶん)

526
デフォルトの名無しさん[sage]   投稿日:2016/07/12 12:41:57  ID:eYeWW2L8.net
fmap constじゃなくてbimap id constと思えば、constの性質は半分しか残ってない

527
デフォルトの名無しさん[]   投稿日:2016/07/20 10:25:34  ID:VWk1kGFj.net(2)
>501
>モナドは文脈
>503
>ただのプログラム可能なセミコロンだろ

そんなのでモナドが分かるわけないだろ
自分でも分かってないだろ
そもそも受け売りじゃなく自分の言葉で言え

528
デフォルトの名無しさん[sage]   投稿日:2016/07/20 10:38:06  ID:oWJ56nOj.net
定義があるものに対して独自の言い回しに変更するのは数学的にはどちらかというと筋が悪い。
モナド則を満たせば何であれそれはモナドだし、それ以外に説明する言葉などない。
それがどのように便利なのかということと、モナドが何者であるかを混同するのはよくない。
コメント1件

529
デフォルトの名無しさん[sage]   投稿日:2016/07/20 11:46:05  ID:VWk1kGFj.net(2)
>528
誰に対して言ってるのか分からんが、
あんたは501,503にも及ばない単なる機械か石ころだな
定義を読んでるだけで、定義を理解したり、定義を作ったりしたことがないだろ

530
デフォルトの名無しさん[sage]   投稿日:2016/07/20 16:40:29  ID:HQM16vFt.net
最初はインスタンスの型だけを見ろ
モナドクラスとモナド則と数学は後で勉強しろ
この順序を間違えなければ理解できると思う

531
デフォルトの名無しさん[sage]   投稿日:2016/07/21 11:25:19  ID:jJzdCE8w.net
最近はARで見えない情報を可視化するのが正義
抽象化や情報隠蔽は時代に逆行している

532
デフォルトの名無しさん[sage]   投稿日:2016/07/23 05:36:08  ID:zdmgkc+M.net
言われてみると確かにポケモン流行ってるな

533
デフォルトの名無しさん[sage]   投稿日:2016/07/25 12:51:34  ID:IZp+OdY9.net(2)
stack で build コマンドや test コマンドを実行する際に、cabalファイルが参照され、
build-depends に列挙されたパッケージが未インストールなら自動手にインストールされますが、
このとき、コマンドのオプションとして --haddock オプションを付ければライブラリドキュメントも構築されます。

わたしの場合は、パッケージのインストールの際はいつでもドキュメントも作られてほしいのですが、
毎回このオプションをつけるのは煩わしいです。

stack ではなく cabal だけでインストールやビルドしていたときは、
$HOME/.cabal/config ファイルの documentation を True にしておけば動的にドキュメントが作られました。

stack でも同じように自動的にドキュメントが作られるようにするにはどうすれば良いでしょうか。

534
デフォルトの名無しさん[sage]   投稿日:2016/07/25 15:07:37  ID:0y8CzYDs.net(2)
~/.stack/config.yaml

build:
haddock: true
でできるように(我らがヒーロー)chrisdoneさんがしてくれたみたい。
コメント1件

535
デフォルトの名無しさん[sage]   投稿日:2016/07/25 20:43:22  ID:IZp+OdY9.net(2)
>534
ありがとうございます。
できました。


ところで、HsColour へのパスを通し忘れていたみたいで、
インストールされたライブラリドキュメントの各関数にソースへのリンクが張られていません。

stack でドキュメントを強制的に上書きで再インストールする方法はあるでしょうか。
コメント1件

536
デフォルトの名無しさん[sage]   投稿日:2016/07/25 22:52:02  ID:0y8CzYDs.net(2)
>535
調べたけど簡単な方法はわかんなかった。手で削除して一つ一つをリビルドするしかないのかも。
イマイチ自信がないから注意してほしいんだけど、例えばこんな風にやります...

まず、ドキュメントのインストール先を調べる。
$ stack path | grep "doc"
snapshot-doc-root: /path/to/snapshot/doc
local-doc-root: /path/to/local/doc

二つのディレクトリのどっちかに入ってるかわかったら、
例えばsnapshotの方なら、そのディレクトリの中身を削除する。
$ rm -rf `stack path --snapshot-doc-root`/*

その後でhaddockを再構築する。
$ stack exec -- ghc-pkg list --package-db=`stack path --snapshot-pkg-db` --simple-output | xargs -n 1 stack haddock
コメント1件

537
デフォルトの名無しさん[sage]   投稿日:2016/07/27 18:59:54  ID:p304Zd6v.net
>536
念のためバックアップをとってから試しましたが、うまくできました。
今のところ特に問題は見つかっていません。

ありがとうございました。

538
デフォルトの名無しさん[sage]   投稿日:2016/07/29 23:39:42  ID:MRKaDYWC.net
Data.Text.Arrayは廃止されたのですか? どこのモジュールに統合されたのですか?
Haskell Platform 2014.2.0.0で標準ライブラリだったのですが。
equal, new, unsafeWrite, run が使えなくて困っています
コメント1件

539
デフォルトの名無しさん[sage]   投稿日:2016/07/30 00:41:53  ID:FdhqaNGk.net

540
デフォルトの名無しさん[sage]   投稿日:2016/07/30 01:08:24  ID:e3eNfr/7.net
標準から外されたんですか…、競プロで使えないや〜残念

541
デフォルトの名無しさん[]   投稿日:2016/08/06 13:44:41  ID:AFiBfwTx.net
yesodで仕事したい人ってどれくらいいるのかしら

542
デフォルトの名無しさん[sage]   投稿日:2016/08/10 20:45:06  ID:8Ulk+XDX.net
おしえてジェネラル @oshiete_general

これか。日銀は9月会合のドラフトを作成しており、「総括」でも2%のインフレ目標は維持と。

http://www.reuters.com/article/us-japan-economy-boj-idUSKCN10L13A

543
デフォルトの名無しさん[sage]   投稿日:2016/08/11 18:25:10  ID:3hGYSwfG.net
今自サーバを立ててる人いるのかな

544
デフォルトの名無しさん[sage]   投稿日:2016/08/12 00:39:34  ID:XbNuNDlJ.net(2)
HaskellのBase PackageはライセンスがBSD3になってるけど

競プロでHaskell使う場合、競プロだとソースコード1ファイル提出が多いから
ソースコード内にBase Packageのライセンサーの名前を付記しておけばおk?

base: Basic libraries
http://hackage.haskell.org/package/base-4.9.0.0

http://hackage.haskell.org/package/base-4.9.0.0/src/LICENSE


545
デフォルトの名無しさん[sage]   投稿日:2016/08/12 00:43:24  ID:XbNuNDlJ.net(2)
あ、BSD3は宣伝条項(?)というのが無くて書かなくていい感じ?

546
デフォルトの名無しさん[sage]   投稿日:2016/08/12 09:31:52  ID:/Ub94szZ.net(4)
標準ライブラリのみ使って競プロする場合もそんなん気にしないといけないのかひええ

547
デフォルトの名無しさん[sage]   投稿日:2016/08/12 10:48:50  ID:qPG51vYe.net
初めて関数型言語に触れてモナドがあんまり理解しづらいんだがパイプラインで使える割り込みみたいなものとしてとらえておk?
コメント1件

548
デフォルトの名無しさん[sage]   投稿日:2016/08/12 13:29:05  ID:Oo9jKYZj.net
熱力学や力学を知らなくても教習所通えば車の運転ができるようになる

549
デフォルトの名無しさん[sage]   投稿日:2016/08/12 14:35:20  ID:iSmX+r7l.net
飛行機が飛ぶのが信じられない。
別板リンク(tech)kako/1005/10056/1005635787.dat

1 名前: デフォルトの名無しさん 投稿日: 01/11/13 16:16

物理的なことは、分かるんです。
ただ、それをコンピュータで制御して事故が少ないというのが信じられない。

飛行機は、変なアセンブリや、いきなり機械語を埋め込むような言語で複雑な
制御プログラムを実装していると思う。

僕が書いたら絶対落ちる。

墜落しなくても、技術者が青ざめるようなことはしょっちゅうあるのでは?

飛行機を飛ばすプログラムなどに使用する言語や開発環境を教えて下さい。
僕を安心させて下さい。

550
デフォルトの名無しさん[]   投稿日:2016/08/12 15:48:38  ID:1cmLpCrQ.net
>547
なんじゃそりゃ?
コメント1件

551
デフォルトの名無しさん[sage]   投稿日:2016/08/12 16:24:22  ID:paDve3zk.net
>550
いや、いろんなモナドがどういう動きをするのか見てたら処理の終わりや処理の途中になんかあった場合次の別の処理に移る所(パイプライン処理)で割り込んでるようなイメージになったからさ
その命令と命令の間で割り込めるような構造がモナドなのかと思ったんだ
コメント1件

552
デフォルトの名無しさん[sage]   投稿日:2016/08/12 19:09:27  ID:IYlYCot4.net(3)
チョコモナカジャンボ

553
デフォルトの名無しさん[sage]   投稿日:2016/08/12 19:45:45  ID:Dvu9s0yY.net(2)
まるで意味がわからんが、IO モナドだけを念頭において話をしてるのか?

554
デフォルトの名無しさん[sage]   投稿日:2016/08/12 20:36:30  ID:wGlcEeY2.net
>551
モナドのそういう雰囲気は、プログラマブルセミコロン、といわれてる。
リストモナドやMaybeモナドの定義も見てみると、もっと理解が深まるよ。

555
デフォルトの名無しさん[sage]   投稿日:2016/08/12 20:44:57  ID:/Ub94szZ.net(4)
モナドの印象は、Haskellは実行順序がコンパイラ依存ではっきりしないが、しかし例えばg . f はfを適用してからgに移ってくれるので、これは順序を指定していると言える。
これをもっと発展させて一般的に順序を指定するノウハウはないか? →だったらモナドというものがありますよ→『お、いいですね、これ採用しましょう』と決まっただけ

556
デフォルトの名無しさん[sage]   投稿日:2016/08/12 21:00:00  ID:Dvu9s0yY.net(2)
さほど害はないがよくある誤解

557
デフォルトの名無しさん[sage]   投稿日:2016/08/12 21:02:45  ID:IYlYCot4.net(3)
モナドから先の話に一向に進まないパターン

558
デフォルトの名無しさん[sage]   投稿日:2016/08/12 21:15:11  ID:/Ub94szZ.net(4)
但しこのノウハウには制限があって、テーマにしているモナドを製造ラインに例えると、その製造ラインの途中で別の製品を造ることはできません。テーマに集中せざるを得ません

それでは実用的ではないと思うのですが、だって途中で色々とその時点での成果物に依存した次の準備などで、別の製品を造りたいこともあるではないですか。あまりに不自由だ

そのためにはそれ専用の製造ラインを別モナドとして定義して、それをdoの途中に(オフサイドラインの)行頭letで呼び出して、テーマとなっている製造ラインの途中へと流し込みます。流し込めるのは『支流モナド』ではなく『支流モナドに因る成果物』のみです(それをテーマの製造ライン用に再パックし合流する)。このようにして、テーマとなっているモナドの型はテーマのまま変わらないようにします。

ちなみに、そのletでついでに一時定数を定義して便利に使うこともできます。別の行にオフサイドルールに則って(let hoge = 〜の次の行ならhの列に)書きましょう。毎行letを書く必要はありません。

テーマのモナドに戻る時はこれまでのテーマのモナドのオフサイドラインに則って復帰するだけです。この場合inは書きません

559
デフォルトの名無しさん[sage]   投稿日:2016/08/12 21:24:18  ID:/Ub94szZ.net(4)
SomeMonad a型の関数のdoブロックの途中で
  nanika <- 〜
と書くなら
右側はSomeMonad a型、左側はそのモナドを引っ剥がした 単なる a 型となるよう、右側を適宜returnを補って再パックしたり、SomeMonad a型関数ならそのまま書くだけなどして、型(帳尻)合わせをする。

nanikaは以降の行から関数の終わりまで便利に使える

こんだけ覚えておけば理解はともかく満足に使えるでしょ

以上、Haskell初日用モナド講座でした

560
デフォルトの名無しさん[sage]   投稿日:2016/08/12 21:51:32  ID:IYlYCot4.net(3)
F#「Haskell先生はモナドの周りをウロウロしててください。私は先に行きますんでw」

561
デフォルトの名無しさん[sage]   投稿日:2016/08/13 01:01:04  ID:PKPsUiHo.net
純粋関数でプログラム書くモナド以外のアプローチってあるの

562
デフォルトの名無しさん[sage]   投稿日:2016/08/13 04:07:58  ID:wqMXG7Q2.net
haskellのdoの糖衣構文やletやwhereや演算子中置記法とか全部初心者の混乱の元

全部関数ベタ書きで組め
コメント1件

563
デフォルトの名無しさん[sage]   投稿日:2016/08/13 06:04:58  ID:0So+hZJu.net
純粋じゃねえじゃん

564
デフォルトの名無しさん[sage]   投稿日:2016/08/14 23:39:04  ID:748AhGSv.net
無粋な奴だな

565
デフォルトの名無しさん[]   投稿日:2016/08/15 15:37:14  ID:PzfQQs3h.net(2)
型構成子とリストはどんな関係?
全部リストで実装できるの?
コメント3件

566
デフォルトの名無しさん[sage]   投稿日:2016/08/15 15:59:46  ID:HKYH1nb5.net(3)
>565
型構成子って type contructor のこと?

実装とは?
コメント1件

567
デフォルトの名無しさん[sage]   投稿日:2016/08/15 16:08:31  ID:HKYH1nb5.net(3)
>565
すまん、type constructor の事かと訊きたかった。

もしそうなら、リストとの関係は特に語ることもないよ。
type synonym において、type a のリストの type construcor を [a] と記述する構文規則になっている、ただそれだけ。

たぶん、こういう事が訊きたかったのでは無いんだらうなとは思うが、
>565 の質問文からはこれくらいしか読み取れなかった。
コメント1件

568
デフォルトの名無しさん[sage]   投稿日:2016/08/15 16:13:33  ID:HKYH1nb5.net(3)
>562
すまん、グダグダだな。
type synonym じゃなくて type signature ね。

あと、実装は何の実装の話か、具体例か何かあると、
もしかしたらもっと適切なレスができるかも。
コメント1件

569
デフォルトの名無しさん[sage]   投稿日:2016/08/15 18:31:50  ID:PzfQQs3h.net(2)
>566 >567 >568
こっちこそすまん。あんまり言葉を知らない初心者なもんで。
つまり、Lispのリストのような基本的データ構造さえ使えれば、
List Int やMaybe Intなどをはじめとするどんな型の値もそれで表せる?という質問だった。
たとえば、List Int は、(5 3 8)のようなリストそのものだし、
Maybe Intの場合も、Just 3は(1 3)、Nothingは(0 0)とでも表せばよい。
コメント1件

570
デフォルトの名無しさん[]   投稿日:2016/08/16 00:17:48  ID:iBBRIQ7/.net(2)
('Just 3) 'Nothing
× ('Nothing 0) Nothingに値は無い

('List 5 ('List 3 ('List 8 'ListEnd)))
× (5 . (3 . (8 . nil))) ではない

571
デフォルトの名無しさん[]   投稿日:2016/08/16 00:18:43  ID:iBBRIQ7/.net(2)
     *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *

572
デフォルトの名無しさん[sage]   投稿日:2016/08/16 00:19:43  ID:OAKxpV6Y.net
>569
ADTを拡張された列挙体だとみなせば(非効率的だが)それでもいいかもな
LispでHindley-Milnerシステムを再現できるのはそのとおりだけど
それやるとLisp特有の柔軟性は利用できなくなるんで嬉しくないだろう

573
デフォルトの名無しさん[sage]   投稿日:2016/08/17 01:21:33  ID:8bFWGPCI.net(2)
tanakhイケメンかと思ってたけど案外そうでもなかった

エラー処理を書いてはいけない | Preferred Research
https://research.preferred.jp/2011/12/do-not-write-error-handling/


このエラー処理のモナドの話よかった

574
デフォルトの名無しさん[sage]   投稿日:2016/08/17 01:25:29  ID:8bFWGPCI.net(2)
http://gihyo.jp/dev/serial/01/alpha-geek/0037
tanakhの顔アップはこれくらいか

575
デフォルトの名無しさん[sage]   投稿日:2016/08/17 05:51:08  ID:uZCC+Xy4.net
田中さんがイケメンだなんてそもそも誰が言ったんですかね…

576
デフォルトの名無しさん[sage]   投稿日:2016/08/17 07:04:18  ID:Hoxqu598.net
tanakhってユダヤ教の聖書って出るんですけど
その方はユダヤ教なんですか?

577
デフォルトの名無しさん[]   投稿日:2016/08/18 07:50:04  ID:9dlOey3K.net
Humble Book Bundle THE JOY OF CORDING
https://www.humblebundle.com/books/joy-of-coding-book-bundle

生のすごいHが1$ポッキリ!

578
デフォルトの名無しさん[]   投稿日:2016/08/18 22:48:38  ID:q+6z/vcz.net
CORDING ?

579
デフォルトの名無しさん[]   投稿日:2016/08/20 18:59:40  ID:M5pz0luK.net
え?

580
デフォルトの名無しさん[sage]   投稿日:2016/08/24 20:17:15  ID:3ozWkhy2.net
Haskellの関数名を考えるとき、どう計算するかを表す動詞ではなく、
何が返ってくるかを表す名詞にするよう、できるだけ心掛けましょう。

sine(sin)やcosine(cos)、integral(∫)もみんな名詞でしょ。
コメント1件

581
デフォルトの名無しさん[sage]   投稿日:2016/08/24 22:57:48  ID:ZIV2jGBM.net
つーか、英語に名詞と動詞を兼ねる単語が多すぎるってだけでは?

582
デフォルトの名無しさん[sage]   投稿日:2016/08/24 23:07:00  ID:nZ9rDf/L.net
アメリカ英語に特にその傾向があるっていうのは聞くなあ。
そもそもそんなクソダサ言語を使うのが誤りなのかもしれない。

583
デフォルトの名無しさん[sage]   投稿日:2016/08/25 01:36:22  ID:qf1gHttb.net
microwave (レンジでチンする)
x-ray (レントゲンを撮る)

584
デフォルトの名無しさん[sage]   投稿日:2016/08/25 02:59:55  ID:B4Y+gpAp.net
>580
どうして動詞より名詞の方がいいの? 純粋に理由が知りたい。
コメント2件

585
デフォルトの名無しさん[sage]   投稿日:2016/08/25 07:18:14  ID:HhsagtWk.net
日本語の「〜する」だって万能動詞化語だけど
英語は「文法上動詞と解釈するしかない位置にある(名詞っぽい)単語」は
形を全く変えずに動詞として振る舞えるからなあ
…書いてて気づいたけど、逆に英語の動詞を日本語に輸入するときに
「ゲットする」みたいに「"get"を名詞化してしまう」から
その辺ごちゃごちゃにしてしまいやすいのかもしれん

>584
手続き型やオブジェクト指向では規約として動詞で命名するようにしてたりするから
その癖に引きずられないで宣言的に書けってことじゃないかな
HaskellでもIOモナドの中ではgetArgsとか使うけど

586
デフォルトの名無しさん[sage]   投稿日:2016/08/25 07:32:10  ID:DDCLwde4.net
心掛けましょうとかいう類の微妙な命令は人間には許されるが機械には通じない
機械に命令するのは難しい
動詞をなくせば命令もなくなる

587
デフォルトの名無しさん[sage]   投稿日:2016/08/25 08:51:48  ID:Odt+sGM4.net
名詞にしろとか、まったく意味のないクソのような思いつきだなw
Data.List の中見てみればいいのにw

588
デフォルトの名無しさん[sage]   投稿日:2016/08/25 12:27:25  ID:43//jAtH.net
>584
英語の文章を書くときには主語が必要
すると、文書が I とか特定の主語で始まる文章ばっかりになって気持ち悪くなる
小学生がはじめて書く作文みたいに、同じ形の文章をならべるような感じで幼稚な印象をかもしだす

ゆえに、文章にバリエーションを持たせるために主語に使えるような名詞化が必須となった

589
デフォルトの名無しさん[sage]   投稿日:2016/08/26 18:04:25  ID:Rls1Ch1+.net
コンパイル時に分かっているのは計算のやり方
計算結果は分からない
停止性問題も分からない
分からないが停止するものとして名詞化するべきか?

590
デフォルトの名無しさん[sage]   投稿日:2016/08/26 18:57:07  ID:6PjBnIB5.net
関数名を決めるのに停止性問題を気にする人がいるとは
難儀な性格だね

591
デフォルトの名無しさん[sage]   投稿日:2016/08/27 03:17:26  ID:D0iquWDS.net
https://wiki.haskell.org/HaskellWiki:Copyrights
↑これって日本語訳ありますか?(機械翻訳だとわけ分からないので)

https://wiki.haskell.org/99_questions
↑ここにあったいくつかのコード例が便利そうだったのでコピペして使いたいなと思ったんですけど
wikiの利用許諾がよく分からなかったので
コメント1件

592
デフォルトの名無しさん[sage]   投稿日:2016/08/27 10:45:30  ID:1nMCeYUK.net
>591
A simple permissive lisenceってあるけどそのものズバリなのは見つけられないな…
MITライセンス(X11 License)から著作権表示義務を取っ払った文面に読める

MIT License - Wikipedia
https://ja.wikipedia.org/wiki/MIT_License
コメント1件

593
デフォルトの名無しさん[sage]   投稿日:2016/08/27 13:40:00  ID:I3O+iqpo.net
複数の値構築子を持つ型があるとします。

data T = D1 | D2 | ・・・

ここで、この型の定義時に deriving Show とすると Show 型クラスのインスタンタンスとなり、
show 関数の定義が自動的になされます。

しかし、一部の値構築子に対する show 関数のみ独自の定義を行いたいです。
(他の値構築子に対する show 関数の定義は deriving で行われるもので良い)

このような場合、deriving Show の宣言を止めて明示的に Show 型クラスのインスタンスを宣言し、
全ての値構築子に対する show 関数の定義を自身で行わなければならないのでしょうか。
コメント1件

594
デフォルトの名無しさん[sage]   投稿日:2016/08/28 00:19:57  ID:b0M2+B18.net
まだ売られていないものを買い叩いてはいけない
高くても買う気概を見せるべき

595
デフォルトの名無しさん[sage]   投稿日:2016/08/28 21:12:57  ID:GgbWiPIx.net
>593
あまり綺麗な解決策はないっぽいです
http://stackoverflow.com/questions/28665917/accessing-the-default-show...

あとは、deriving Show したものをEither で取り込む、って手もありますが、パターンマッチも合わせなくちゃならない面倒臭さがあります。
コメント1件

596
デフォルトの名無しさん[sage]   投稿日:2016/08/28 21:51:38  ID:dFRMemTF.net
>595
ありがとうございます。
理解できました。

597
デフォルトの名無しさん[sage]   投稿日:2016/08/31 22:45:44  ID:Rs0xiE9q.net
HaskellはBSDやlispに似た香りがする
盛り上がるのは日本だけ

598
デフォルトの名無しさん[sage]   投稿日:2016/08/31 23:10:06  ID:7+q3lg65.net
ちょっと何言ってるのか分かんない

599
デフォルトの名無しさん[sage]   投稿日:2016/09/01 02:28:23  ID:egT8bscR.net(2)
HaskellはLispに似てない
ErlangやSQLがLispに似てないのと同じ

600
デフォルトの名無しさん[sage]   投稿日:2016/09/01 03:05:36  ID:CJsgpLVH.net(2)
原理主義っぽい感じ

601
デフォルトの名無しさん[sage]   投稿日:2016/09/01 05:41:39  ID:egT8bscR.net(2)
原理主義には二種類ある
梃子でも動かないこと
逆に行動力がありすぎて過激化すること

602
デフォルトの名無しさん[sage]   投稿日:2016/09/01 06:09:39  ID:RBx6umGo.net
「Haskellと共に4年間を歩んだ起業家の視点」
http://postd.cc/haskell-in-a-startup/

603
デフォルトの名無しさん[sage]   投稿日:2016/09/01 13:23:13  ID:CJsgpLVH.net(2)
NTTデータがごり押ししてる時点で危うい

604
デフォルトの名無しさん[sage]   投稿日:2016/09/01 19:30:56  ID:mPgGDrHC.net
そもそも原理主義に悪いイメージはない
コメント1件

605
デフォルトの名無しさん[sage]   投稿日:2016/09/01 21:18:32  ID:VCwOTBrD.net
コマンドラインを解析するのに optparse-applicative パッケージを使ってるんだけど、
subparser で「コマンド名を何も指定していない場合には実行するパーサー」を指定することはできないのかな?

subparser (command "" あるParserInfo <> command "cmd1" 別のParserInfo)

として、シェルで

$ アプリ名 オプション 引数

って実行しようとしてもエラー扱いされる。
(当然、アプリ名 cmd1 オプション 引数 ってやると別のParserInfoが実行される)

これができれば、今のところコマンドラインパーサーとしては最高なんだが・・・

606
デフォルトの名無しさん[sage]   投稿日:2016/09/02 07:35:27  ID:D4RF+Hn1.net
>604
福音派

607
デフォルトの名無しさん[sage]   投稿日:2016/09/02 20:10:33  ID:rbAQHi/g.net
そういえば f x を単項演算という人がいるけど f $ x と同じだから二項演算だよな
演算子を何も指定していない場合の二項演算
コメント1件

608
デフォルトの名無しさん[sage]   投稿日:2016/09/02 21:56:11  ID:tVbN57IV.net
審議中

609
デフォルトの名無しさん[sage]   投稿日:2016/09/03 21:14:38  ID:b3XfDx+y.net
f x は f $ x に展開してるのだろうか
$ が単項演算子を左側の引数に持つ二項演算子で、f x と結果が同じになるように f $ x を計算しているのではなかろうか

610
デフォルトの名無しさん[sage]   投稿日:2016/09/03 21:20:32  ID:I4+juosu.net
>607がアホだってだけの話をそこまでひっぱらんでもええやろ

611
デフォルトの名無しさん[sage]   投稿日:2016/09/04 08:23:55  ID:hJ0oY1hg.net
アホのふりをした陰謀だったらどうする
いずれにしても人格や心理を知ればあらゆる現象を解明できるという風潮がある

シンギュラリティに到達すれば機械も心を持つようになるんだろう

612
デフォルトの名無しさん[sage]   投稿日:2016/09/06 05:47:19  ID:B6IsI2Pu.net
期待を操作すれば物価を操作できるとかね

でも機械には心がないから操作できない
とんでもない機械音痴の香りがする

613
デフォルトの名無しさん[sage]   投稿日:2016/09/06 06:43:44  ID:hM0tgfmY.net
毛の壁みたいなことを書き込むな

614
591[]   投稿日:2016/09/07 00:30:17  ID:9tlIzaE9.net
>592
ありがとうございます
diffを取ったらたしかにそのようでした

615
デフォルトの名無しさん[sage]   投稿日:2016/09/09 17:59:57  ID:fugQoxX/.net
Lispで考えると関数と演算子の違いがわからない
スタックマシンで考えると関数は一旦スタックに置いてから呼び出すから演算子と違う
コメント1件

616
デフォルトの名無しさん[sage]   投稿日:2016/09/09 20:07:49  ID:EXJ63xav.net
>615
lispの場合、例えば+なら、+という名前の関数って解釈になると思うんだけど

原則
(関数名 引数1 引数2…)
っていう規則だし

617
デフォルトの名無しさん[sage]   投稿日:2016/09/10 12:57:03  ID:0lecj7oS.net
Haskellでいうなら中置記法で使えるかどうかの違いじゃね?
単項演算子(前置または後置記法)も欲しいけど

618
デフォルトの名無しさん[sage]   投稿日:2016/09/10 22:31:13  ID:kdc6/nN6.net
foldr 関数 0 == (foldr 関数) 0
foldr 前置 0 == foldr ((前置) 0)
foldr 中置 0 == ((中置) foldr) 0
foldr 後置 0 == ((後置) foldr) 0

619
デフォルトの名無しさん[sage]   投稿日:2016/09/17 01:19:31  ID:TryWX1hA.net
leksahっていうIDE使ってる人いる?
標準入出力の実装とか、実行ファイルの場所について知ってたら情報教えてください

620
デフォルトの名無しさん[sage]   投稿日:2016/09/17 18:11:26  ID:/utKPaV2.net
やっとArrayの使い方解ってきて楽しさが増してきた
ライブラリドキュメントの初心者突き放し感凄い

621
デフォルトの名無しさん[sage]   投稿日:2016/09/17 22:30:13  ID:xGaWkelz.net
Haskellのライブラリドキュメントというものは読み手に初心者もいることを念頭に書かれてはいない。
そんな事より、関数の性質を過不足なくシンプルに記述されていることの方が遥かに重要。

使い方を調べるものではなく、性質を調べるもの。

初心者かどうかに関わらず、使い方を学ぶなら別途解説記事などを当たる方が効率的。

(そもそも、初心者に優しいライブラリドキュメントは、圧倒的多数の非初心者にとっては使いにくい)

622
デフォルトの名無しさん[sage]   投稿日:2016/09/18 11:54:17  ID:+SKZ6S2R.net(2)
なんで初心者は type KeyValue k v = [(k,v)] では納得しないの?

623
デフォルトの名無しさん[sage]   投稿日:2016/09/18 13:03:29  ID:8TOAmXme.net
競プロでTLEしたからだよ

624
デフォルトの名無しさん[sage]   投稿日:2016/09/18 17:17:22  ID:+SKZ6S2R.net(2)
Ixクラスが難しいのはLispのnumerical towerが難しいのと同じかな
ただし型を明示する方がより難しく感じる

625
デフォルトの名無しさん[sage]   投稿日:2016/09/19 19:30:07  ID:80/BHnqI.net(3)
iterateM = forever?
(take n . iterate)M = replicateM?

626
デフォルトの名無しさん[sage]   投稿日:2016/09/19 19:38:52  ID:80/BHnqI.net(3)
今日はIOの上にWriterを積んでさらに上にStateを積む経験をしました
ロギングしながら内部状態を更新して計算するという、手続き型では当たり前にやっていたことでもHaskellでやるには色々と難儀するなあと思いました
最後に剥がして剥がさないとだしね

627
デフォルトの名無しさん[sage]   投稿日:2016/09/19 19:51:08  ID:80/BHnqI.net(3)
あと、exec○○Tとeval○○Tがどっちがどっちだったかごっちゃになって何度も:t しました。
Matzとmattnくらいごっちゃになる

628
デフォルトの名無しさん[sage]   投稿日:2016/09/21 10:03:06  ID:sEEtOe1C.net
Haskellのifは、実際にはcaseの糖衣構文として実装されている。

629
デフォルトの名無しさん[sage]   投稿日:2016/09/21 17:44:02  ID:4XZnLpLb.net
それはいくらなんでも常識だと思う
コードがコア言語に翻訳されたときにどうなるかくらい見たことあるだろ普通
コメント1件

630
デフォルトの名無しさん[sage]   投稿日:2016/09/21 19:50:55  ID:aYh3Hfox.net
>629
べつに反発する訳ではないが、見たことない人の方が圧倒的に多いと俺は思うよ。

core言語をネタにした記事や議論があまりに少ない。
入門書には載ってないし、core言語の存在に気づく機会なんてそうそう無いんじゃないかな。
知らなくても殆どのアプリケーションは問題なく作れるしね。

631
デフォルトの名無しさん[]   投稿日:2016/09/21 22:12:06  ID:MOB6yruj.net
stack new で作ったパッケージを削除するにはどうすればいいの?
最初にテストで作ったパッケージとかもういらないやつ

632
デフォルトの名無しさん[sage]   投稿日:2016/09/22 20:46:54  ID:qTs7iGpB.net
>> 631
rm -rf ~/.stack; stack setup; stack build

633
デフォルトの名無しさん[sage]   投稿日:2016/09/22 21:24:33  ID:AFCrOFUM.net
>632
ありがとう、設定全部消してやり直す感じかな
消すプロジェクト選べないのかな

ていうかWindowsの環境だと
C:\sr\
が ~/.stack に相当するのであってる?

634
デフォルトの名無しさん[sage]   投稿日:2016/09/22 23:46:45  ID:jxKSBn/V.net
ListTの用途ってどんなんですか?

635
デフォルトの名無しさん[sage]   投稿日:2016/09/23 00:10:47  ID:WXiot49w.net
あんまない
だからこそモナド則満たしてないとかいうバグが長いこと……

636
デフォルトの名無しさん[sage]   投稿日:2016/09/23 01:33:27  ID:z/oo94n5.net
そうなんですか。。。

637
デフォルトの名無しさん[]   投稿日:2016/10/05 23:54:20  ID:vyqM/RAH.net
自分でググって調べる気もソースコード読む気もない教えて君の僕からの疑問です

Haskellの遅延評価や遅延リストはどのようにしてスレッドセーフを担保しているのでしょうか
コメント1件

638
デフォルトの名無しさん[sage]   投稿日:2016/10/06 01:49:51  ID:4VyQcH0m.net
スレッドセーフって、複数のスレッドが同じ場所を参照しても安全かどうか?
ソース読む気ないけど、もし参照が危険でコピーが安全だったらコピーするよね普通

639
デフォルトの名無しさん[sage]   投稿日:2016/10/06 19:18:03  ID:q3HZYpQ2.net
>637
STMを使ってください

640
デフォルトの名無しさん[]   投稿日:2016/10/07 14:53:50  ID:35BCHO2E.net
STMを使えということは
つまりSTMを使わないと
b = 25
a = 100 + b
という感じで定義されてる未評価の関数aを2つのスレッドから同時に参照と評価があった場合、それぞれで100 + bが実行されるということですか?
コメント1件

641
デフォルトの名無しさん[sage]   投稿日:2016/10/07 18:24:20  ID:jSZrN4yw.net
>640
誰かが最初に遅延評価したときに演算され、二番手以降の方へは計算済みの値を格納したポインタを教えるイメージです

642
デフォルトの名無しさん[sage]   投稿日:2016/10/10 14:27:31  ID:Qm2ONX6I.net
パーザ書く練習問題と模範解答の組のドリルみたいなのないかな…。
Parsecとか使えはするようになってきたんだけど、もっとすっきり書けそうとか効率が悪そうとか色々あって

643
デフォルトの名無しさん[sage]   投稿日:2016/10/10 15:50:46  ID:HAEgy7t1.net
つRealWorldHaskell

644
デフォルトの名無しさん[sage]   投稿日:2016/10/10 19:52:56  ID:3rNLKIcD.net
Write Yourself a Scheme in 48 Hours - Wikibooks, open books for an open world
https://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours

645
デフォルトの名無しさん[sage]   投稿日:2016/10/10 21:35:10  ID:R1xgz6YK.net
Data.Graphの質問です。ノード間に費用を設定したいのですが、ラベルは違いますよね…どこを見ればいいのでしょうか?

646
デフォルトの名無しさん[sage]   投稿日:2016/10/11 16:18:02  ID:sSjTKHHD.net
Priority Queueって標準ライブラリにないのね

647
デフォルトの名無しさん[]   投稿日:2016/10/26 04:19:58  ID:bWo+/2EQ.net
otherwiseの定義ワロタ

648
デフォルトの名無しさん[sage]   投稿日:2016/10/27 08:06:57  ID:Nn5hsSbo.net
競プロって標準ライブラリのみだから、必要なアルゴリズム用ライブラリはアルゴリズム本読んで車輪の再発明しなきゃなんだよなぁ
勉強になっていいなぁ

649
デフォルトの名無しさん[sage]   投稿日:2016/10/28 00:12:41  ID:8f+wXH5p.net
それはよかったね

650
デフォルトの名無しさん[sage]   投稿日:2016/10/28 21:15:42  ID:ostPWI1A.net
大抵のアルゴリズムの本は手続き型前提で書いてるから
Haskellに乗せるにはまた一工夫必要だったりしてそこもまた勉強になるんだなあ

651
デフォルトの名無しさん[]   投稿日:2016/10/29 16:01:30  ID:U0STMpMq.net
一工夫ってほどの工夫いるのか?

652
デフォルトの名無しさん[sage]   投稿日:2016/10/29 18:54:57  ID:iE/CgPi0.net
手続き型か否かってよりイミュータブル関係だと思う

653
デフォルトの名無しさん[sage]   投稿日:2016/10/30 02:15:50  ID:jfOgw9BV.net
別にイミュータブルに直さんでも使えるやろ

654
デフォルトの名無しさん[]   投稿日:2016/11/01 15:38:33  ID:663+8MTa.net
最近参照透明性の概念が意味なくなっているという話を耳にしたがほんと?

655
デフォルトの名無しさん[sage]   投稿日:2016/11/01 17:13:14  ID:vtMJ+WVh.net
どこできいたんすかそんなん

656
デフォルトの名無しさん[sage]   投稿日:2016/11/02 08:25:24  ID:Hcp22mKX.net
電波に騙されちゃダメ(・ิω・ิ)

657
デフォルトの名無しさん[sage]   投稿日:2016/11/02 11:10:02  ID:9HnuVJln.net(2)
コンパイル時のメタプログラミングとかデータの初期化時とかでは意味がある
でもそれはC++のパラダイムと同じ
参照透明性の概念はなくならないが、C++に対抗するパラダイムはなくなっている

658
デフォルトの名無しさん[sage]   投稿日:2016/11/02 16:53:59  ID:Zl1DvHRz.net
C++03すらうろ覚えな俺にとって11以降は向こうの世界だお…

659
デフォルトの名無しさん[sage]   投稿日:2016/11/02 17:44:16  ID:9HnuVJln.net(2)
じゃあHaskellの話をすると
型クラスのせいでファーストクラスの関数にこだわらなくなった
Monadが異常に人気なのでArrowのような関数の合成はしないっていうかArrowって何?

660
デフォルトの名無しさん[sage]   投稿日:2016/11/03 18:35:59  ID:VYss1+Sd.net(2)
0を含まない整数の型を作るにはどうすればいいんですか?
コメント1件

661
デフォルトの名無しさん[sage]   投稿日:2016/11/03 21:25:05  ID:/bqrYTe/.net
>660
ゼロを含まないように扱えばいいのでは?

例えばそういう型を IntNZ として、減算 (-) :: IntNZ -> IntNZ -> IntNZ の定義において
ふたつの引数が等しければ例外を投げるとか。

そう言うことを訊いているのではない?

662
デフォルトの名無しさん[sage]   投稿日:2016/11/03 23:32:58  ID:VYss1+Sd.net(2)
引数にIntNZ型がある関数の中で毎回同じような例外処理を書きたくないのです。
コメント1件

663
デフォルトの名無しさん[sage]   投稿日:2016/11/03 23:40:49  ID:4HccfDPt.net
じゃあ0を含まない代わりに∞を含む
div x ∞ = 0
mod x ∞ = x

664
デフォルトの名無しさん[sage]   投稿日:2016/11/04 08:34:02  ID:kXeFO5vL.net
[1..]をやり取りする方法だと
パターンマッチで[0..]をいちいち取り除くのが面倒だから駄目か。。。
難しいな

665
デフォルトの名無しさん[sage]   投稿日:2016/11/04 09:50:12  ID:1tddSSBg.net
面倒だから駄目というのは難易度じゃなくて割高感かな
前者は客観的かもしれないが後者は個人の感想です

666
デフォルトの名無しさん[sage]   投稿日:2016/11/04 11:18:01  ID:XfkYN6aF.net
LiquidHaskell 使うか型レベル自然数使うか好きな方を選んだらいい

667
デフォルトの名無しさん[sage]   投稿日:2016/11/04 23:38:57  ID:6gj2sDdx.net
>662
そうじゃなくて、IntNZ 型を Num 型クラスのインスタンスにして、
その (-) 関数の定義の中で error 関数を使おうよ。

数値リテラルでの 0 の代入を構文的に防ぐのは(今はたぶん)無理だから、
せめて fromInteger 関数の定義で、0 が来たら error 関数を呼ぶ。
コメント1件

668
デフォルトの名無しさん[sage]   投稿日:2016/11/05 12:18:19  ID:e+VJvV43.net
>667
ありがとうございました。
よく分かりました。

669
デフォルトの名無しさん[sage]   投稿日:2016/11/06 12:37:50  ID:ii2PuHlB.net(2)
えー、静的に保証せずに実行時例外飛ばすのでいいわけ……
コメント1件

670
デフォルトの名無しさん[sage]   投稿日:2016/11/06 13:08:58  ID:73fM5cAV.net
呼び出される側で逐次バリデーションかけるって普通やらない

671
デフォルトの名無しさん[sage]   投稿日:2016/11/06 14:38:22  ID:9AHrFYuD.net(2)
>669
head なんかも普通に例外飛ばしてるじゃん。
コメント2件

672
デフォルトの名無しさん[sage]   投稿日:2016/11/06 16:45:16  ID:aqA72S6k.net(2)
今Haskellに定理証明機能が求められる

673
デフォルトの名無しさん[sage]   投稿日:2016/11/06 17:09:40  ID:0EN6rm+O.net
「パターンマッチで空リストが除外されてるからここは空じゃないはず」
「0が入力だとエラーだからここは非0の整数だ」
とか自動で推論してほしいのよ

674
デフォルトの名無しさん[sage]   投稿日:2016/11/06 17:57:14  ID:ii2PuHlB.net(2)
>671
だから head すごく嫌われてるじゃん
パターンマッチ使って exhaustiveness 検査できるように書くのが基本でしょ

675
デフォルトの名無しさん[sage]   投稿日:2016/11/06 20:13:26  ID:8krBF8e8.net
ねえ最近知って驚いたんだけどいつの間にか base に NonEmpty a が入ってる
head :: NonEmpty a -> a
https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List-NonEmpty....
コメント1件

676
デフォルトの名無しさん[sage]   投稿日:2016/11/06 21:06:27  ID:9AHrFYuD.net(2)
非ゼロ整数型にゼロが入らないようにするとか、
非空リスト型に空リストが入らないようにするとか、
そういうのを静的に保証することは無理でしょ。

NonEmpty a だって普通のリストからこの型に変換するときは、
空リストに対して例外を飛ばしたり、Nothing にしてるし。

677
デフォルトの名無しさん[sage]   投稿日:2016/11/06 22:55:12  ID:aqA72S6k.net(2)
無闇な場合分けはしたくない
前提条件のもとに安心してコーディングしたい
場合分けが増えるほど最適化への意欲が殺がれる

678
デフォルトの名無しさん[sage]   投稿日:2016/11/07 01:13:01  ID:MDpsc3Qw.net
非ゼロの整数って数学的に演算を定義できるの?

679
デフォルトの名無しさん[sage]   投稿日:2016/11/07 02:46:36  ID:5LzIlCQF.net
windowsの拡張子のように関連付けられた演算があるべきだという議論は数学的なのか?

680
デフォルトの名無しさん[sage]   投稿日:2016/11/07 04:57:48  ID:V9YWDh5g.net
先ずは『数学的』を定義してくれ

681
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:11:09  ID:vESUnDI+.net(3)
加法が非単位的半群、乗法が単位的半群、になるだけだと思うけど

682
デフォルトの名無しさん[sage]   投稿日:2016/11/07 09:29:48  ID:RQbqk0B/.net
Monoidさん出番ですよ

683
デフォルトの名無しさん[sage]   投稿日:2016/11/07 13:16:49  ID:sGTieyCj.net
「非ゼロの整数」って ZZ \ {0} = {…-2, -1, 1, 2 …} でいいんだよね?
普通の加法は定義できないな

684
デフォルトの名無しさん[sage]   投稿日:2016/11/07 15:30:07  ID:57Eo3JNh.net
みんな分数の足し算は覚えてるかな
分母は足し算しないよ

685
デフォルトの名無しさん[sage]   投稿日:2016/11/07 22:28:56  ID:mwzncyNq.net
Either の Left をエラー値として扱っている場合に、
いちいち return (Left ・・・) と書かずに failure ・・・ みたいに書ける関数が、
標準ライブラリに定義されていたような気がするんだが、なんて名前の関数だっけ?

こんなもん無きゃ自作すればいい話だが、あるもんは使いたい。

686
デフォルトの名無しさん[sage]   投稿日:2016/11/07 23:36:36  ID:R79oO133.net
そもそも私が非ゼロの型を欲しがった動機は、掛け算の群をHaskellで定義したかったからです。
ゼロを含めてしまうと、それの逆元は存在しないので、群とはなりません。
コメント1件

687
デフォルトの名無しさん[sage]   投稿日:2016/11/07 23:43:07  ID:vESUnDI+.net(3)
ゼロを除去してもZ-{0}には(1,-1)の対以外には逆元ないんですがそれは

688
デフォルトの名無しさん[sage]   投稿日:2016/11/07 23:47:00  ID:vESUnDI+.net(3)
あ、「対」ってのは変な表現ないし余計だった
1と-1は自分自身が乗法の逆元だけどほかは、って話ね

689
デフォルトの名無しさん[sage]   投稿日:2016/11/08 02:20:51  ID:bNPBs65+.net
>686
零元を除いたときに掛け算が群になるものは体と呼ばれる
有理数体とかあるいは有限体を持ってくる必要がある
整数環は体ではないのでゼロを除くだけでは不十分

元の話に戻ると、例えば整数が偶数か奇数かで場合分けするときに
「偶数整数の型」とか「奇数整数の型」とかを作らないように、
これも型でやるのは面倒なんじゃないかなやっぱり

690
デフォルトの名無しさん[sage]   投稿日:2016/11/08 05:23:36  ID:yAny1aGl.net
そうか、ゼロを含まない整数/ゼロを含まない整数 で分数の型を作ろうとしたのか。

691
デフォルトの名無しさん[sage]   投稿日:2016/11/08 08:59:08  ID:85Jh4l0o.net
Haskell以外の新興言語だとその辺うるさく議論できたりするの?

692
デフォルトの名無しさん[sage]   投稿日:2016/11/08 11:20:00  ID:V/aB9qVi.net
実行時でよければ普通にチェックする
コンパイル時の技術はその後から遅れて追いかける形

693
デフォルトの名無しさん[sage]   投稿日:2016/11/08 13:39:05  ID:rvD8rxF+.net
実行時チェックはコストがかかるので、できる限り静的にゼロオーバーヘッドで行って欲しい

694
デフォルトの名無しさん[sage]   投稿日:2016/11/08 14:42:51
Haskellに依存型を

695
デフォルトの名無しさん[]   投稿日:2016/11/08 17:55:13  ID:S8iuzxu8.net
>675
マジかよ
やべえ

696
デフォルトの名無しさん[sage]   投稿日:2016/11/09 01:44:56  ID:ybkPv5oA.net
なんちゃって自然数のNumeric.Naturalの方は前からあったな
https://hackage.haskell.org/package/base-4.8.0.0/docs/Numeric-Natural.htm...

697
デフォルトの名無しさん[sage]   投稿日:2016/11/09 17:39:29  ID:vRs11tEL.net
insertなんか、複数のコンテナに存在する関数ってなんで修飾しないとコンパイル弾かれるの?
引数型からどのコンテナのinsertか特定できそうな気がするけど…

698
デフォルトの名無しさん[sage]   投稿日:2016/11/09 19:09:09  ID:zLgA6zWO.net
Haskellのad hoc多相は型クラス経由でやることになってるからだよ

699
デフォルトの名無しさん[sage]   投稿日:2016/11/09 21:14:16  ID:xmqlrnlx.net(2)
関数型にもデザインパターンってあるの?
モナドがデザインパターン的な??
コメント1件

700
デフォルトの名無しさん[sage]   投稿日:2016/11/09 21:51:44  ID:oiz7Hd4L.net
Haskellにおけるたった一つのデザインパターン
http://fumieval.hatenablog.com/entry/2015/03/08/214505
>デザインパターンを作らないこと。型とクラスがあんたの武器だ。

701
デフォルトの名無しさん[sage]   投稿日:2016/11/09 22:06:42  ID:GQTXnFNK.net
デザインパターンはメソッドの名前と意味を細かく決めるから数が多い
関数型はざっくりしてる
モナド1個だけでデザインパターン20個分くらい

702
デフォルトの名無しさん[sage]   投稿日:2016/11/09 22:37:40  ID:xmqlrnlx.net(2)
まじか すげえ

703
デフォルトの名無しさん[sage]   投稿日:2016/11/09 23:09:37  ID:U1jagGrC.net
抽象力の違いだな

704
デフォルトの名無しさん[sage]   投稿日:2016/11/10 22:10:21  ID:95rHCbYq.net
5つほど例を挙げてみてくれないか

705
デフォルトの名無しさん[sage]   投稿日:2016/11/10 23:06:29  ID:iSDVog9L.net
↓でOOのデザインパターンと関数型プログラミングの対応について詳細に述べられているよ
https://www.youtube.com/watch?v=E8I19uA-wGY#t=3m40s
コメント1件

706
デフォルトの名無しさん[]   投稿日:2016/11/11 00:34:43  ID:5BtLg1Wc.net
もう面倒だしその疑問まるっとtanakhに丸投げしチャイナYO!
コメント1件

707
デフォルトの名無しさん[sage]   投稿日:2016/11/11 10:54:47  ID:dScdKx6p.net
>699
デザパタはパターンをライブラリに落とせない貧弱な言語に必要なバッドノウハウ。

708
デフォルトの名無しさん[sage]   投稿日:2016/11/11 15:35:23
C++は貧弱

709
デフォルトの名無しさん[sage]   投稿日:2016/11/11 17:31:31  ID:w3bRsN0z.net
強いとか弱いとかいう以前の問題
過激なtemplateで知られるC++を理解できるのは一部の超能力者だけ

710
デフォルトの名無しさん[sage]   投稿日:2016/11/11 21:09:46  ID:DJ7KM1aB.net
>705
早口で分からん

英会話教室に通おうかな

711
デフォルトの名無しさん[sage]   投稿日:2016/11/11 22:01:49  ID:vuUaX938.net
スロー再生すれば聞き取れるんじゃね

712
デフォルトの名無しさん[sage]   投稿日:2016/11/11 23:20:52  ID:dPj3pCz/.net
スライドあるんだが

713
デフォルトの名無しさん[sage]   投稿日:2016/11/12 00:08:16  ID:58llZ1kJ.net
スライドはあくまで要約やポイントじゃん。
それで十分理解できる人はいっぱい居るだろうけど、俺は無理。
やっぱり、人の話をちゃんと聞きたい。

714
699[sage]   投稿日:2016/11/12 00:28:18  ID:QPSpTCI6.net
>706
丸投げしました

715
デフォルトの名無しさん[sage]   投稿日:2016/11/12 01:09:21  ID:hHeNYjQy.net
Haskellでリーマン予想を証明してやるよ

716
デフォルトの名無しさん[sage]   投稿日:2016/11/12 02:30:50
tanakhは最近Rustにハマってるようだぞ

717
デフォルトの名無しさん[sage]   投稿日:2016/11/12 07:49:28  ID:TT9Tnb2q.net(2)
tanakhのASKfmじゃなくTwitterに投げたのか

718
デフォルトの名無しさん[sage]   投稿日:2016/11/12 07:50:00  ID:TT9Tnb2q.net(2)
Twitterはクオリティフィルターで表示されない可能性が微レ存

719
デフォルトの名無しさん[sage]   投稿日:2016/11/12 13:14:11  ID:1NFet2E2.net
Rustってどんなもんかなと思って見たら
{ という懐かしい記号が目に入ってそっ閉じ。{}だらけの言語を見ると目が腐る。

720
デフォルトの名無しさん[sage]   投稿日:2016/11/12 15:53:23  ID:YgVHUwqy.net
将棋ソフトの世界大会が開催されたらしく
今年は参加者が40チームを超えて大盛況だったと聞いたので
Haskell使ったソフトは何位くらいに入ってるのかなと調べてみたら...
http://i.imgur.com/0NCgWgU.jpg
コメント1件

721
デフォルトの名無しさん[sage]   投稿日:2016/11/13 00:36:31  ID:25DJAejC.net
>671
Haskellの恥とか言われてるぞ

722
デフォルトの名無しさん[sage]   投稿日:2016/11/13 00:39:45  ID:GDVX8Ikh.net
関数型プログラミング言語の国際カンファレンスのプログラミングコンテストですら関数型プログラミング言語以外での参加者が強いしな

723
デフォルトの名無しさん[sage]   投稿日:2016/11/13 02:02:28  ID:yW2Hc/df.net
平凡な人間が優秀な言語を扱うより
平凡な言語で優秀な人間のコードをコピペした方が機能するという現実。

更に言えばコピペ出来ないという事は比較も出来ないから
自分は優れたコードを書ける方だという勘違いも生まれやすい二重苦。

724
デフォルトの名無しさん[sage]   投稿日:2016/11/13 08:01:48  ID:NWcxEYYn.net
それをいうなら仕様書とかいうコピペも実行もできない文書もクズの勘違いだよな
Haskellはコンパイルと実行ができるから少しマシになったといえる

725
デフォルトの名無しさん[sage]   投稿日:2016/11/13 18:00:33  ID:9x+ozG+i.net
代数データ型のフィールドの定義で、フィールド名に代数データ型名の短縮形を接頭している場合、
Bool 型のフィールドの名前に is〜 って付けにくいよね。

たとえば
data Command = Command { cmdSpecial ::Bool, ・・・ }

本当は isSpecial と命名したいんだけど、他の代数データ型のフィールドと区別したいから、
何かしら接頭辞をつけたい。

isSpecialCmd だと英語的にピッタリだけど、このフィールドだけ cmd を接尾するのも統一感ない。
(他の Bool 型以外のフィールド名は cmd を接尾すると明らかにおかしい)

ホント悩ましいよね。
今は is を諦めて、代わりに switch(または略して swch)を接尾してるけど、
一般的じゃないし、なかなか慣れない。

726
デフォルトの名無しさん[sage]   投稿日:2016/11/13 18:26:24  ID:cTxZaG78.net(2)
>720
そうやって順位が低かったからって
一生懸命参加したHaskellerを嘲笑するのはやめようよ

727
デフォルトの名無しさん[sage]   投稿日:2016/11/13 18:32:14  ID:cTxZaG78.net(2)
脊髄反射で書き込んだけど参加すらしてなかったのか
こういうの見せられると
Haskellの勉強時間をC++に充てた方が良かったのではとか考えだして萎えるね

728
デフォルトの名無しさん[sage]   投稿日:2016/11/13 19:01:53  ID:ajsybu9G.net
両方やれよ

729
デフォルトの名無しさん[sage]   投稿日:2016/11/13 19:05:46  ID:lXuVu+Qu.net
打ち合わせしながらHaskell使って30分でプロトタイプ作って、そのあとC言語で3ヶ月かけて実装する
実装言語にこだわる理由が分からん
実装がHaskellじゃなきゃいけない理由はない

730
デフォルトの名無しさん[sage]   投稿日:2016/11/13 21:57:57  ID:ile6jKYv.net
よく使われる機能は名前と理論がついて既にライブラリ化されているので
我々が直接書く機会は少なく
どちらかといえば、開発中のソフト固有といえる部分を書いていくことになるわけだが
そのとき関数型が役に立つのかどうか、ってことだな

もしくは何かアルゴリズム的なことをガッツリ書かなければならない状況であれば
それはそれでハードウェア構成に最適化されたプログラミングが要求されるであろう場面なので
現状ではC/C++が妥当と言えるかもしれない
将棋プログラムが良い例で、早く動かす必要があるのでC/C++が最適なんだろうな

731
デフォルトの名無しさん[sage]   投稿日:2016/11/14 13:13:53  ID:WhzDU3qv.net
将棋の例を見るとまだまだ
関数型プログラミングの達人がいないのね
それか将棋などの下世話なものには興味を引かないのか

732
デフォルトの名無しさん[sage]   投稿日:2016/11/14 13:54:24  ID:v/crCO1Q.net
下世話かなぁ

733
デフォルトの名無しさん[sage]   投稿日:2016/11/14 14:55:08  ID:zPFRwjsR.net
周りを貶めてまで持ち上げるのはただの傲慢

734
デフォルトの名無しさん[sage]   投稿日:2016/11/14 15:04:55  ID:pQSv0pIq.net
手続き型の方が思いつきを直感的に実装しやすいからじゃないかと

735
デフォルトの名無しさん[sage]   投稿日:2016/11/14 15:14:45  ID:9+pPztYN.net
Haskellで将棋ソフトを作ったとしても
do記法だらけで何の為にHaskell使ってるのか分からなくなりそう

一見簡単そうに見えるけど
関数型の特徴を活かした書き方をしようとしたら
相当な知識と発想力が必要でしょ実際

736
デフォルトの名無しさん[sage]   投稿日:2016/11/14 19:30:04  ID:vwfd0FeE.net
選択肢でセーブして大量のセーブデータを処理するゲームだろ
セーブデータが言語非依存だった場合Haskellを選ぶ理由が特にない

737
デフォルトの名無しさん[sage]   投稿日:2016/11/15 00:21:14  ID:TrWdoi2+.net(2)
素朴な実装はむしろHaskellの方がやりやすいと思う
定義書けばいいんだから
ただそれだと大抵オーダーレベルで遅いからチューニングしてくんだけど
珠玉のアルゴリズムデサインとか眺めてると
関数型のパフォーマンス・チューニングは
とても素人が手を出せるものではないなと感じる

738
デフォルトの名無しさん[sage]   投稿日:2016/11/15 00:35:21  ID:zFHvDTCz.net
破壊的操作が選択肢にある命令形とない関数型ではそりゃな

739
デフォルトの名無しさん[sage]   投稿日:2016/11/15 01:04:34  ID:fGk3f/So.net(3)
玄人は「関数型ではないHaskell」や「OOではないC++」に手を出せる

740
デフォルトの名無しさん[sage]   投稿日:2016/11/15 08:56:11  ID:PldPJ2O3.net
プログラミングの本質がコンピュータの制御であるのだとしたら
副作用はむしろ自然であるといえるしね

741
デフォルトの名無しさん[sage]   投稿日:2016/11/15 12:12:21  ID:fGk3f/So.net(3)
美術だったら自然か不自然かという考え方でもいいけど言語だからな
本当か嘘かを第一に考えたい

742
デフォルトの名無しさん[sage]   投稿日:2016/11/15 14:19:44
しかし我々は社会という人工的組織で生きている。不自然で何が悪いのか

743
デフォルトの名無しさん[]   投稿日:2016/11/15 17:29:54  ID:rLEFKtBY.net
haskell platformオワコンとか言ってるけど
これのminimalにもstackあるからこれでいいの?
ユーザー\appdata\Roaming\local\binとか変なところにあるけど

tanakahとかstack紹介記事書いてるやつはわかりにくいから反省しろ
それかnewbieおことわり宣言しろ
知ってるやつだけ使えばええやろ

744
デフォルトの名無しさん[sage]   投稿日:2016/11/15 18:37:27  ID:zXTJ3mIv.net
stackの記事は
これ以上ないくらい分かりやすいでしょ。

とはいえ日本の熟練Haskellerって
ツールや開発環境の紹介といった布教行為には熱心だけど
具体的なコーディングテクニックの紹介記事を書いてくれる事って滅多にないよね。

この勧誘だけは熱心だけど
入信後にはアフターケアしない文化が
将棋ソフト作ったHaskellerゼロの遠因になってる気がする。

745
デフォルトの名無しさん[]   投稿日:2016/11/15 20:03:27  ID:DS7sAygo.net(2)
選ばれし者たちのためのプログラミング言語なのがHaskell
布教活動は選ばれし者を発掘するためなのだ

746
デフォルトの名無しさん[sage]   投稿日:2016/11/15 20:36:23  ID:Smv2PVR1.net
本物のプログラマは〜って記事もあったけど余計な反感買うだろと思った
言語そのものではなくて使いこなせる自分たちが凄いと言ってるみたいだし
コメント2件

747
デフォルトの名無しさん[sage]   投稿日:2016/11/15 21:12:04  ID:7+Tk3atX.net
みずほの地下でキュウリ1本で働かされているのが本物のプログラマだ

748
デフォルトの名無しさん[sage]   投稿日:2016/11/15 21:12:48  ID:Ul7hyJV8.net
遅延評価将棋に向いてそうだけど

749
デフォルトの名無しさん[sage]   投稿日:2016/11/15 22:32:33  ID:TrWdoi2+.net(2)
stack関係は、書かれた当時はHaskell Platformが7.xだったからstack入ってなかったけど
8.0になってstack入ったから今はplatformの方でいいと認識している(嘘言ってたらすまん)

750
デフォルトの名無しさん[sage]   投稿日:2016/11/15 22:49:14
>746
つまりRubyが悪いんじゃなくてRubyプログラマが鼻につくのがPythonに敗れた理由だと

751
デフォルトの名無しさん[sage]   投稿日:2016/11/15 22:52:19  ID:9/lrpTST.net
状態や物事を集合の要素と捉え、その集合に代数的構造を見いだせば、
Haskellで扱いやすくなる。

バージョンを要素とする集合に代数的構造を見いだしたから Darcs が生まれた。
構文解析の状態を要素とする集合に代数的構造を見いだしたから Parsec が生まれた。

将棋も何かしらの集合に代数的構造を見いだせば Haskell の利点が生かせる。

ただその利点の多くは、実行が速くなるというよりは、プログラムが分かり易くなるという類のもの。
だから競技なんかで期待されるような性質の利点ではないと思う。

752
デフォルトの名無しさん[sage]   投稿日:2016/11/15 22:55:05
但し元ネタは

・本物のプログラマは FORTRAN でリスト処理を'する(do)'。
・本物のプログラマは FORTRAN で文字列操作を'やる(do)'。
・本物のプログラマは FORTRAN で経理処理を(必要ならば)'する(do)'。
・本物のプログラマは人工知能プログラムを FORTRAN で'する(do)'。

 もし FORTRAN で出来なければ、アセンブリ言語でやる。アセンブリ言語で出来なきゃ、それはやる価値がないのだ。


だから

753
デフォルトの名無しさん[]   投稿日:2016/11/15 23:36:08  ID:DS7sAygo.net(2)
その元ネタってこれか

本物のプログラマはPascalを使わない - Wikipedia
https://ja.wikipedia.org/wiki/%E6%9C%AC%E7%89%A9%E3%81%AE%E3%83%97%E3%...

754
デフォルトの名無しさん[sage]   投稿日:2016/11/15 23:41:15  ID:fGk3f/So.net(3)
>746
言語そのものが凄くても知識に個人差があるし
今は常時デマが流れているので知識の格差は拡大する

755
デフォルトの名無しさん[sage]   投稿日:2016/11/16 00:11:34  ID:vodKK2vI.net
本物のプログラマは〜っつっても
本物のプログラマって言葉にそんなにステータスがあるものなのだろうか
世間一般的に、本物のプログラマ、のイメージは間違いなく変人だろう
だから本物のプログラマは〜を使うって言われても
変なのしか寄ってこないのでは

756
デフォルトの名無しさん[sage]   投稿日:2016/11/16 00:40:01  ID:r5MYZjSk.net(2)
嘘つかないだけで凄い希少価値がある時代なので、イメージを気に病むことはない

757
デフォルトの名無しさん[sage]   投稿日:2016/11/16 19:27:49
型シグネチャでもプログラミングするんだなぁ(小並感)

fromMap :: (Monad m, Ord a, Num score_t, Ord score_t)
    => Map a score_t -> StateT (PQueue a score_t) m ()
fromMap = ステートモナド上でMapから順位キューをコンストラクトする実装

として、後で、

fromCountMap::(Monad m, Ord a)
       => Map a Int -> StateT (PQueue a Int) m ()
fromCountMap = fromMap

なんてして制約を強くしてから実際に利用するの、一見無意味に見えて意味がある。そうでしょ?
コメント1件

758
デフォルトの名無しさん[sage]   投稿日:2016/11/16 22:31:04  ID:r5MYZjSk.net(2)
IOの代わりにわざわざ別のモナドを使う意味があるといいね
IOでできるなら大抵の言語でできるし、できないならHaskellしかできない可能性が高い

759
デフォルトの名無しさん[sage]   投稿日:2016/11/16 23:31:08
ステートモナド上でMapから順位キューをコンストラクトする実装ってなんか変だな
mモナド上でMapから順位キューを構築するステートモナドというべきか

>757のように書くと、実装型なんていうオレオレ用語ができて、『fromCountMapはfromMapと同じ実装型だが使用するscore_tとしてはIntでハードコーティングする』なんて、ある意味型シグネチャと実装の主従逆転みたいな気分がしてる

型シグネチャプログラミング
実際にはスーパークラスからサブクラスを選定してるだけに過ぎないのだが

電波カキコスマソ

760
デフォルトの名無しさん[sage]   投稿日:2016/11/17 11:47:37  ID:CyEwoRIt.net
>Comby McCombface &#8207;@_qwoc_
>nhkで東ロボくんの画面映ってたけど.hsだからhaskellらしい

あの東ロボくん
この時代に機械学習もせずに
ググって穴埋めとかして意味不明だったけど
Pythonで作ってなかったのかよ!!
そりゃライブラリ不足で頓挫しますわ・・・

761
デフォルトの名無しさん[sage]   投稿日:2016/11/17 12:51:10  ID:gAiIIDy+.net
研究でライブラリ使ってもなあ

762
デフォルトの名無しさん[sage]   投稿日:2016/11/17 13:57:20  ID:OdFzw3CC.net
脳細胞じゃなくてPythonの遺伝子が必要という現実

763
デフォルトの名無しさん[sage]   投稿日:2016/11/17 16:34:54
何で機械学習はPython下で発展したの?

764
デフォルトの名無しさん[sage]   投稿日:2016/11/17 16:35:45
というかHaskell下で発展する分野は何?

765
デフォルトの名無しさん[sage]   投稿日:2016/11/17 16:38:37
Haskellってなんか永遠に蛍雪時代って感じなんだけど、日の目はいつみるの?
金融業界でソフトウェア開発に云々とか小春日和が稀にあるだけじゃん

766
デフォルトの名無しさん[sage]   投稿日:2016/11/17 16:48:54  ID:cH0vE1/X.net
より自然的である物のほうが柔軟性が高いってことなんだよ

767
デフォルトの名無しさん[]   投稿日:2016/11/17 23:18:18  ID:uCMwWyH/.net
Haskellが出てきたのは東工大の教授のくだりだったので東ロボくんがHaskellで書かれているわけではないと思う

768
デフォルトの名無しさん[sage]   投稿日:2016/11/17 23:21:14  ID:UdEjGycY.net
IO型を拡張して、入出力をDBに限定することはできる?

769
デフォルトの名無しさん[sage]   投稿日:2016/11/18 04:59:31  ID:G5oHkwae.net
将棋といい東ロボくんといい
Haskellって実際には役に立たないのか?

770
デフォルトの名無しさん[sage]   投稿日:2016/11/18 05:47:19  ID:Arybz0NX.net
新しいアイデア組むの面白いよ

771
デフォルトの名無しさん[sage]   投稿日:2016/11/18 07:08:36  ID:8X6DMoza.net
どういうのに適しているかを見分ける、使い分ける能力がないと役に立たないよ

772
デフォルトの名無しさん[sage]   投稿日:2016/11/18 09:06:31  ID:eQ6+pXsk.net
ニルバーナはまだ完成してない?

773
デフォルトの名無しさん[sage]   投稿日:2016/11/18 22:33:01  ID:A97xHB6V.net
分かりやすい例としてファイルへのごく簡単なアクセスを使って質問しますが、
本質的にはファイルアクセスに限らないテクニック(パターン)に関する質問だと思います。

f n = do
 (a, b) <- withFile "example" ReadMode $ \h -> do
  x <- getLine
  y <- getLine
  return (x, y)
 case n of
  1 -> a のみを使って何かする
  2 -> b のみを使って何かする
  3 -> a と b の両方を使って何かする

このような関数 f を 3 に適用した時は 2 度の getLine には意味があるので問題ありません。
しかし 1 や 2 に適用した時、本来はそれぞれ 1 度の getLine で済むはずが、
どちらも 2 度 getLine を行ってしまいます。
この無駄を省き、1 度しか getLine を行わないようにしたいです。

ここで、下記のような解決方法は取りたくありません。

f n = withFile "example" ReadMode $ \h -> do case n of
  1 -> アクセスX して何かする
  2 -> アクセスY して何かする
  3 -> アクセス(X,Y) して何かする

初めの例はファイルアクセスと結果の利用が明確に分かれており、スッキリしていますが、
後の例はファイルアクセスと結果の利用が交互に書かれていて、ごちゃごちゃしているからです。

また、初めの例で a と b の両方を使って何かする際に、ファイルの開閉は一度で済ませたいです。

このような2つの条件を満たすような解決策を探しています。
何かアイデアはないでしょうか。
コメント3件

774
デフォルトの名無しさん[sage]   投稿日:2016/11/18 23:07:04  ID:otEwH2mo.net
ファイルはランダムアクセスできないので、二行目のデータを読むためには一行目を読むことは不可避です。
改行コードがあるまで走査しなければなりません。そうしないと二行目を取り出せないでしょう? その後の具体的処理は遅延されます
コメント1件

775
デフォルトの名無しさん[sage]   投稿日:2016/11/18 23:14:40  ID:PWErf1tR.net
>773
スッキリ書くテクニックはあまり多くない
スッキリ書けなかった人を批判するのは建設的ではないという考え方があるし

むしろ読む側がごちゃごちゃを読めるテクニックの方が建設的といえる
コメント1件

776
デフォルトの名無しさん[sage]   投稿日:2016/11/18 23:15:23  ID:lkZKNOe7.net
文脈という比喩だと、Maybe、List、Eitherモナドまではイメージできるんだけど
StateやIOモナドになると全然イメージできない。
コメント3件

777
デフォルトの名無しさん[sage]   投稿日:2016/11/19 00:24:37  ID:leXZmGhT.net(7)
「評価環境」が文脈だと思えばいいよ
つうか、モナドを文脈として理解しようとするのが最も向いてるのがIOやST

「文脈」じゃなくて「計算効果」つっとけばよかったのにね
コメント2件

778
デフォルトの名無しさん[sage]   投稿日:2016/11/19 01:21:02  ID:L++mh2K9.net(4)
StateやIOは戻り値がなくてもいいような気がするな
Maybeは時々Nothingだが戻り値そのものは必要
そこが違う
コメント1件

779
デフォルトの名無しさん[sage]   投稿日:2016/11/19 02:05:35  ID:hSh8+31t.net(4)
40GB、10億行のテキストファイルをunicodeの番号順にソートしたいんだけど
何か良いアイデアないかな?

Bashのsortコマンド使えば良い話ではあるんだけど
スレ住民のHaskell力を吸収して成長したい。
データは1行1データで記述されてる。
メモリは8GBです。

780
デフォルトの名無しさん[sage]   投稿日:2016/11/19 02:10:32  ID:hSh8+31t.net(4)
追記、ストレージの空き容量は17GB。
ファイルは圧縮したバックアップがあるので直接書き換えOK。

もはや何ソートを使えば良いかも想像つかない。
コメント1件

781
デフォルトの名無しさん[sage]   投稿日:2016/11/19 02:30:30  ID:+b3rIBPg.net(7)
>778
は? どうやって計算繋いでいくの?
途中で得た結果をどうやって後で利用するつもりさ

782
デフォルトの名無しさん[sage]   投稿日:2016/11/19 02:39:38  ID:+b3rIBPg.net(7)
ファイルの直接書換って論理的でなく物理的な意味で?
ウルトラCに思える。OSがそんなこと許さないと思う
コメント1件

783
デフォルトの名無しさん[sage]   投稿日:2016/11/19 02:47:23  ID:+b3rIBPg.net(7)
先ず現行のファイルを消去して、圧縮ファイルから解凍と読み出しを同時にして、少し読み出してソートして小さなファイルとして書き出す
事を終わるまで繰り返す。
2ファイル選びマージソートしてファイルに書き出し、元の2ファイルをすぐ消去する。
これを繰り返していけばいつかデッカい目的の1ファイルになる

784
デフォルトの名無しさん[sage]   投稿日:2016/11/19 02:50:36  ID:+b3rIBPg.net(7)
あ、ダメかww空き容量オーバーしちゃうなww

785
デフォルトの名無しさん[sage]   投稿日:2016/11/19 03:01:10  ID:+b3rIBPg.net(7)
こうしよう。マージソートを全部はしきらずにストレージ一杯になる前に止める。
n個のソート済みファイルが残されるが、読み出すときはこのn個のファイルを開いて、マージソートするかのように頭から比較して吐き出していけば一応一行目からの羅列がすぐに得られる
コメント2件

786
デフォルトの名無しさん[sage]   投稿日:2016/11/19 03:21:05  ID:hSh8+31t.net(4)
>785
巨大ファイルでそれするとメモリ不足になりません?

787
デフォルトの名無しさん[sage]   投稿日:2016/11/19 03:35:10  ID:hSh8+31t.net(4)
個人的にはマージの際に
ある程度マージした後に元ファイルからマージが終わった部分だけを削り取って
・・・と書いておいて気付いたけども
メモリや一時ファイルを使わずにファイルを直接書き換えるなんて許可されてないのかな?
>782の書き込みの意図をようやく理解。

せめてストレージだけでも増設するしかないのだろうか。

788
デフォルトの名無しさん[sage]   投稿日:2016/11/19 04:25:07  ID:+b3rIBPg.net(7)
OSに詳しくないけども、ファイルの更新ってのは空き領域探して新ファイルを書き込んで、元ファイルを消去してファイルディスクリプタに物理的位置情報の登録変更手続きをする手順だと思うよ。
メモリのようにデータを直接ピンポイントに書換なんてことはできない。SSDはともかく、HDDの磁気ヘッドが高速回転するディスクの書き換えたいファイルの一部だけにピンポイントでバチバチッとできるとは思えない。(失敗したらどうすんの)

巨大ファイルでも遅延読み書きすれば、実際に用がある部分が少ない場合なら、必要な部分読んで、不要になったらガベコレをするので定数空間量で行けるはず

そりゃあ何とかして空き増やすかストレージ増設が第一に決まってんでしょ。それができない状況でさあどうするっていう思考実験の話をしてるんでしょ

789
デフォルトの名無しさん[sage]   投稿日:2016/11/19 04:40:21  ID:+b3rIBPg.net(7)
ピンポイント(物理)にデータを変更しようとした磁気ヘッドは、高速移動の疲れからか不幸にも黒塗りの磁性体に衝突してしまう。 磁気ヘッドをかばいすべての責任を負った>780に対し、HDDの主、オペレーティングシステムWindowsに言い渡された回復の条件とは…。

790
デフォルトの名無しさん[sage]   投稿日:2016/11/19 08:58:20  ID:leXZmGhT.net(7)
普通にマージソートでしょ
アルゴリズムの本を読み返してこようね

791
デフォルトの名無しさん[sage]   投稿日:2016/11/19 08:59:29  ID:leXZmGhT.net(7)
>785が正しい解決策だしHaskellなら遅延読み込みなんで普通にできるはず

792
デフォルトの名無しさん[sage]   投稿日:2016/11/19 09:25:14  ID:nvUvA6H6.net(3)
>773です。要はこういう事です。

純粋な計算ならば必要になるまで遅延されます。
IOアクションそれ単体も、必要になるまでアクションさせず、かつソース内の見た目は、
アクションと結果の利用がそれぞれ塊になって分かれるようにするのも簡単です。

しかし、そのIOアクション群に open/close (あるいは前処理/後処理)が必要になると、
両者を分ける方法が思いつきません。
各IOアクションに open/close を付けると、今度は複数のアクションの結果が必要な場合に、
無駄な open/close が行われてしまいます。


>774 人によっては例が悪かったと思います。
データベースへのアクセスで考えてみてください。
1回の open/close の間にテーブルAとテーブルBから一つずつ何かデータを取り出します。
その取り出したデータを使って何かをしたいが、テーブルA由来のデータのみ必要な場合もあれば、
両方のテーブルからのデータが必要な場合もあります。
前者の場合、テーブルBへのアクセスは必要ないが、>773 の初めの例の方法だとそちらにもアクセスしてしまいます。

そんな一瞬で終わるアクセスが無駄だとかグダクダ言うなとおっしゃるのなら、
インターネット越しのアクセスなど時間のかかるIOアクションで考えてみてください。


>775
ひとつの意見として受け止めますが、私個人は書き手と読み手の両方の努力、精進が欠かせないと思っています。


>776 >777
すいません、評価環境という文脈がよく分かりません。
私の例で言うと、アクションの結果を利用している部分が評価環境の文脈ということでしょうか。
それとも、IOアクションしている部分が評価環境の文脈なのでしょうか。

793
デフォルトの名無しさん[sage]   投稿日:2016/11/19 09:41:28  ID:leXZmGhT.net(7)
a 型の返り値をアクション IO a の正体は理念的には

WorldState -> (a, WorldState)

という関数なわけ。do記法内部の各ステップは裏で
WorldState(=評価環境)を変換しつつ次へ受け渡してる
隠蔽されてるがaの計算に影響を与える評価環境、これが文脈
コメント2件

794
デフォルトの名無しさん[sage]   投稿日:2016/11/19 09:59:56  ID:nvUvA6H6.net(3)
>793
評価環境の文脈の意味は分かりました。

しかし、すいません。
その評価環境の文脈という考え方をどのように利用すれば
私の問題が解決するのかがまだ分かりません。

あるいは、解決不可能ということを仰っているのでしょうか。

795
デフォルトの名無しさん[sage]   投稿日:2016/11/19 10:09:10  ID:leXZmGhT.net(7)

>777>776へのレスだろうし>776は別に誰に対してのレスでもなかろ
コメント1件

796
デフォルトの名無しさん[sage]   投稿日:2016/11/19 10:10:41  ID:leXZmGhT.net(7)
ありゃなんか途中で打ち直したら変な風になっちゃったな
「だろうし」は「だし」ね

797
デフォルトの名無しさん[sage]   投稿日:2016/11/19 10:14:39  ID:nvUvA6H6.net(3)
>795
ごめんなさい。
次からは、私へアンカーが打たれているレスにのみご返事します。

798
デフォルトの名無しさん[sage]   投稿日:2016/11/19 10:38:45  ID:9ou0Tz/L.net
40GBのデータを遅延読み込みしたら
即スタックオーバーフローでしょ

799
デフォルトの名無しさん[sage]   投稿日:2016/11/19 11:42:51  ID:L++mh2K9.net(4)
>793
aがWorldStateの外にあるから面倒なんだよな
全てがWorldStateの内部にあったらいいのに

800
デフォルトの名無しさん[sage]   投稿日:2016/11/19 12:08:17  ID:ygHmZoSw.net(3)
HDBCなどのライブラリのいわゆるデータベースへのconnectをする関数はモナド上でそこに出くわした時点で本当にアクセスするのだろうか?
後の行で本当にそれに関わった値が評価された場合だけ実際に通信するのではないだろうか

つまりテーブルBのデータを必要な値が評価されるのみのケースでは、その上にテーブルAへのアクセスの指示が書いてあったとしても、テーブルAへのアクセスが発動することはない

モナドでプログラマが把握できるのは(必要とされた場合の)実行順序だけであり、本当にその一行が実行されるかは判らない。
ランタイムシステムが、それを評価しないと答えが出せないときのみ、答を出すのに最低限必要な部分までだけ評価を進める。その行(の値)が要らないで終わるならスルーされる

しかし基本は実測だ。事件は会議室で起きているのではない。現場百篇。データベースへのアクセスログと睨めっこだよワトソン君

801
デフォルトの名無しさん[sage]   投稿日:2016/11/19 13:01:13  ID:L++mh2K9.net(4)
静的型としては実測ではなくコンパイル時に知ってた方が圧倒的有利と思われたが
そういうのをスルーして成功したのがPythonだった

802
デフォルトの名無しさん[sage]   投稿日:2016/11/19 13:12:21  ID:57c4ddvC.net
関数型は間違いは少なくなるかもしれないが性能見積もりが困難という解釈でいいのかな
性能低下も間違いのうちに入るのじゃなかろうか
コメント1件

803
デフォルトの名無しさん[sage]   投稿日:2016/11/19 13:19:12  ID:leXZmGhT.net(7)
>802
>関数型は間違いは少なくなるかもしれないが性能見積もりが困難という解釈でいいのかな

性能で問題になるのは時間より空間でそれはHaskellの遅延評価のせい
OCamlで性能見積もりが困難だという話はおよそ聞いたことがない

804
デフォルトの名無しさん[sage]   投稿日:2016/11/19 13:30:47  ID:ygHmZoSw.net(3)
込み入った話はHaskellマスターのtanakhさんに訊くべきだ。私は到底Haskellをマスターしたとはいえない糞雑魚なのでね…

805
デフォルトの名無しさん[sage]   投稿日:2016/11/19 15:23:51  ID:GLukN6SU.net
Haskellマスターのtanakhさんが
AtCoderでC++を使ったのが全ての答え。

806
デフォルトの名無しさん[sage]   投稿日:2016/11/19 16:42:56  ID:WZW0gWLh.net
IOモナドはStateモナドの状態を実行環境に置き換えたものという理解でよろしいか?

807
デフォルトの名無しさん[sage]   投稿日:2016/11/19 17:13:35  ID:B0NaVLvy.net
HDD直接アクセスってシステムコールでも呼ぶの?
普通OSがファイルの一部あるいは全部をメモリ上にロードして
それを読み書き終わったものをOSがHDDに必要に応じて書き出すんじゃないの

808
デフォルトの名無しさん[sage]   投稿日:2016/11/19 17:32:00  ID:ygHmZoSw.net(3)
State Threadモナド(ST for short)の、(安全には)モナドを脱出して純粋なHaskellコードへ帰って来れない版がIOモナドです。Stateモナドとは区別してください

809
デフォルトの名無しさん[sage]   投稿日:2016/11/19 19:59:58  ID:L++mh2K9.net(4)
魔法マスターがなぜか銃を乱射するのはよくある話

810
デフォルトの名無しさん[sage]   投稿日:2016/11/20 04:03:02  ID:e66ZIrIv.net
型シグニチャに現れる ~ ってどういう意味?

811
デフォルトの名無しさん[sage]   投稿日:2016/11/20 04:34:12  ID:y28VMjGS.net
コンパイラのエラーメッセージか、TypeFamilies拡張で使う
両辺に現れる型の等価性(equality)を主張する記法

812
デフォルトの名無しさん[sage]   投稿日:2016/11/20 16:55:46  ID:bc5Pq5Dx.net
pythonの機械学習ライブラリであるtensorflowを
Haskellで書き直したものがgithubに上がってるけど
コーディングの美しさが溜め息の出るレベルだ。
https://github.com/tensorflow/haskell
読むだけでHaskell力が高まりそうだからみんな見た方がいい。

調べたらgoogle社員のHaskellerが作ったみたい。

813
デフォルトの名無しさん[sage]   投稿日:2016/11/20 17:17:48  ID:FAU7VgEK.net
コードが美しいとか言われてもimportやプラグマが多いと萎える

814
デフォルトの名無しさん[sage]   投稿日:2016/11/23 19:35:05  ID:8RkzW8R2.net
三ヶ月後のメンテナンス時のストレスの低さを美しさと定義します

815
デフォルトの名無しさん[sage]   投稿日:2016/11/23 19:53:04  ID:bzle2eVB.net
stack new sample コマンドで作られたプロジェクトの
sample.cabal ファイルにある library の項をコメントアウトしたら、
stack build コマンドが通らなくなりました。

stack build -v コマンドで詳細を表示させても、
ビルドが通らなくなった原因は分かりませんでした。

cabal ファイルに library の項が必要だという情報が、
どこかのファイルに書かれているのでしょうか。
コメント1件

816
デフォルトの名無しさん[sage]   投稿日:2016/11/23 21:04:08  ID:6lcDdPCf.net
コードを読む前に仕様を知ってたら簡単に読める
読めない奴はおそらく読みながら仕様を把握しようとするから読めない

817
デフォルトの名無しさん[sage]   投稿日:2016/11/24 01:48:40  ID:uCqvKhkZ.net
>815
エラーメッセージくらい載せては?
executableの項のbuild-dependsにエントリされてる"sample"は
このsampleパッケージ自身が提供するライブラリ=コメントアウトしたlibrary項
を意味してるから、少なくともこれはエラーの原因になるはず。
コメント1件

818
デフォルトの名無しさん[sage]   投稿日:2016/11/24 20:13:03  ID:NKA7Qvmd.net(2)
>817
ありがさうございます。
なるほど、自分自身のパッケージ名というのは、library の項で記述されるライブラリを指しているのですね。
勉強になりました。


ちなみに、エラーメッセージというものは出力されなかったのですが、
stack build コマンドで次のメッセージが出力されました。
(パスの一部は伏せ字にしてあります)


sample-0.1.0.0: unregistering (local file changes: sample.cabal src/Lib.hs)
sample-0.1.0.0: configure
Configuring sample-0.1.0.0...
sample-0.1.0.0: build
Preprocessing executable 'sample' for sample-0.1.0.0...
<command line>: cannot satisfy -package-id sample-0.1.0.0-D0Za6tWWy4BLT1YZ9OrRCu
(use -v for more information)

-- While building package sample-0.1.0.0 using:
/home/????/.stack/setup-exe-cache/x86_64-linux/setup-Simple-Cabal-1.24.0.0-ghc-8.0.1 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.24.0.0 build exe:sample --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1


stack build -v コマンドを使うと長々とメッセージが出力されますが、
どの部分がエラーを示しているのか分かりませんでした。
コメント1件

819
デフォルトの名無しさん[sage]   投稿日:2016/11/24 20:15:05  ID:NKA7Qvmd.net(2)
>818
もしかして、メッセージに一部文字化けしている部分があるかもしれません。
そこは本来はただの空白文字なので気にしないでください。

820
デフォルトの名無しさん[sage]   投稿日:2016/11/28 21:15:44  ID:/+1ypXpu.net
Text.Printf.printf の結果を Just で包む関数 f は作れるのだろうか?

気持ちとしては、次のようなことがしたい。

let f msg = Just . printf msg
let a = f "ok"
let b = f "[%d]" (17 :: Int)
putStrLn a
putStrLn b

とすると、

Just "ok"
Just "[17]"

と印字される。

もちろんこれは構文エラーだが、こんなことを実現する方法はある?

821
デフォルトの名無しさん[sage]   投稿日:2016/12/01 01:26:47  ID:dPmAOjzF.net
単発失礼します。
stackでtypoして変なパッケージをインストールしてしまった時に
削除するのってどうするんですか?

822
デフォルトの名無しさん[sage]   投稿日:2016/12/01 02:22:05  ID:RWGHokMu.net(4)
ディスク容量をどうしても節約したいとかじゃなきゃ削除する必要なんかそもそもないだろ
設定ファイルのtypo直せばそれでいい

823
デフォルトの名無しさん[sage]   投稿日:2016/12/01 03:17:49  ID:mD//1kpz.net
で、ディスク容量どうしても節約したいんですけど、削除するのってどうするんですか?

824
デフォルトの名無しさん[sage]   投稿日:2016/12/01 03:35:09  ID:RWGHokMu.net(4)

825
デフォルトの名無しさん[sage]   投稿日:2016/12/01 14:26:03  ID:L5XSy+iF.net
丁寧にありがとうございます
実は練習がてらネットに落ちてる軽めの問題を解くために
プロジェクトを作らず、libraryが必要になる度に
「stack install 〇〇」してコンパイルせずにrunghcで回答していたのですが
「stack install numbers」と間違えて「stack install primes」と打ち込んだところ
悲劇的な事に「Data.Numbers.Primes」がダブったようで
とあるコードでrunghcが動かなくなってしまいました。
・・・と書いている途中にもう一度「stack install numbers」をしたら
何故かもう一度libraryのダウンロード&インストールが始まってrunghcも通りました。
結局アンインストールは出来ていなさそうですが解決してしまったようです。
お騒がせしました。
コメント1件

826
デフォルトの名無しさん[sage]   投稿日:2016/12/01 16:00:05
なんか知らんけどゴニョゴニョしてうまいことやってくれるのがstackなんでしょ

827
デフォルトの名無しさん[sage]   投稿日:2016/12/01 19:42:05  ID:RWGHokMu.net(4)
>825
解決したんならもういいと思うけど、
パッケージ名を指定してモジュールをimportできるよ

828
デフォルトの名無しさん[sage]   投稿日:2016/12/01 19:48:00  ID:RWGHokMu.net(4)
{-# LANGUAGE PackageImports #-}

import “numbers” Data.Numbers.Primes

特定ヴァージョンをインポートしたい時は
パッケージ名をヴァージョン付きにすればいい

import “packagename-x.y.z” Some.Module

とかな。

829
デフォルトの名無しさん[sage]   投稿日:2016/12/03 18:31:40  ID:LlRr0ykU.net
accumArrayの存在意義がわからん・・・

830
デフォルトの名無しさん[sage]   投稿日:2016/12/04 00:08:43  ID:VB8xM7ox.net
漏れはData.Sequenceの存在意義がわからん

831
デフォルトの名無しさん[sage]   投稿日:2016/12/04 01:39:44  ID:ylt2eQeo.net
C++のpush_back()できるようにしたリストでないの

832
デフォルトの名無しさん[sage]   投稿日:2016/12/04 10:47:47  ID:iPD09Yju.net
リストの前後に同じようにappendしてかなきゃいけないときがあるだろ

小さいものなら(前半リスト、後半逆順リスト)みたいな風にして管理できるが
まあ素直に両端キュー使ったほうがいい

833
デフォルトの名無しさん[sage]   投稿日:2016/12/04 13:27:17  ID:V6IaL/Kz.net
ファイルにたとえるとfseekの存在意義と同じ

834
デフォルトの名無しさん[sage]   投稿日:2016/12/05 23:29:18  ID:6vkhaohh.net
写経向けのコード集のようなサイトはありますか?
ProjectEulerのような競技ブログラミング的なコードではなく
入出力を扱う簡易アプリケーション的なプログラムでお願いします。
コメント1件

835
デフォルトの名無しさん[sage]   投稿日:2016/12/06 00:04:44  ID:YoH2PHvZ.net
>834
なんで、そんなの求めてるの?

836
デフォルトの名無しさん[sage]   投稿日:2016/12/06 00:07:50  ID:z2yWW9Nx.net
悟りを開くためです。

837
デフォルトの名無しさん[sage]   投稿日:2016/12/06 00:11:16  ID:bK/cN5Vq.net

838
デフォルトの名無しさん[sage]   投稿日:2016/12/06 00:53:14  ID:/K6LEbiX.net
>837
出来ればデータ型を使ってじゃんけんゲームを作ったり
動かして遊べるような簡単なプログラムを
Haskellに精通した人が書くとこうなる。
みたいなコード集が理想です。
コメント1件

839
デフォルトの名無しさん[sage]   投稿日:2016/12/06 07:58:32  ID:ej7InLr+.net
パクリ屋か

840
デフォルトの名無しさん[sage]   投稿日:2016/12/06 10:06:02  ID:RLRg255J.net
まずは自分で書くべきだと思う
書いてここにURL晒せば勝手にレビューされるよ

841
デフォルトの名無しさん[sage]   投稿日:2016/12/07 02:00:07  ID:0WE5r4ET.net
そうします。

842
デフォルトの名無しさん[]   投稿日:2016/12/07 09:27:55  ID:t44ep7+e.net
WindowsでHaskellするなら、IDEは何を使うのがいいでしょうか?

843
デフォルトの名無しさん[sage]   投稿日:2016/12/07 09:34:35  ID:DclcCWLN.net
geany

844
デフォルトの名無しさん[sage]   投稿日:2016/12/07 10:10:25  ID:aotafFF2.net
Atomでghc-mod関連プラグイン入れるのがそれなりに快適

845
デフォルトの名無しさん[sage]   投稿日:2016/12/07 14:30:59  ID:h31NqZEM.net
>838
じぶんはAOJが好き
語学の勉強と同じで、中学生程度の言い回しでいいから、とにかく書いてみる。
それから名人たちのコードを鑑賞して、あまりの格差に愕然とする。
気を取り直していいところをパクって次へ、以下ループ。
コメント1件

846
デフォルトの名無しさん[]   投稿日:2016/12/07 19:51:01  ID:9owFdVES.net
IntelliJはもうだめか?

847
デフォルトの名無しさん[sage]   投稿日:2016/12/07 21:18:26  ID:VZ50/vQU.net
>845
おおっ!!
面白そう!!

そして"Hello World"で即詰んだw

848
デフォルトの名無しさん[sage]   投稿日:2016/12/08 02:30:35  ID:u2dNiCpn.net
AOJを勧めてだんだんと競プロerに仕上げていくのですね

849
デフォルトの名無しさん[sage]   投稿日:2016/12/08 05:48:28  ID:Sb9Sgrh7.net
Haskellで競プロ、苦しくないですかね…
手を後ろに縛られて十徳ナイフを括り付けられて闘わされるみたいな気分

850
デフォルトの名無しさん[sage]   投稿日:2016/12/08 08:36:13  ID:5QNwH8zE.net
他言語では例題2くらいに出る入力の処理が
Haskellの入門書だと
第8章でやっと出る中級者テクニックみたいな扱いだからな。
コメント1件

851
デフォルトの名無しさん[sage]   投稿日:2016/12/08 09:06:17  ID:WWhHiD/9.net
第1章でdoを使わない縛りは強制性があるのかそれとも単なる自主規制か

852
デフォルトの名無しさん[sage]   投稿日:2016/12/08 10:14:41  ID:QjRH9I62.net(2)
AOJの問題
「"0 0"が入力されるまで与えられた2つの数字を小さい順に並べ替え続ける」
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_C
に下記のコードを提出したところWrong Answerになったのですが
outputはdiffコマンドで調べても正解者と同じですし
手元で動かしたところ"0 0"でも終了で正解な気がするので修正箇所の目処も立ちません。
自力での解決はギブアップなのでアドバイスお願いします。

import Data.List (sort)
exchange :: IO ()
exchange = do
 s <- getLine
 if s == "0 0" then return ()
 else do
  putStrLn $ (unwords . sort . words) s
  exchange

main = exchange
コメント1件

853
デフォルトの名無しさん[sage]   投稿日:2016/12/08 11:43:51  ID:7PHkchZ4.net
>852
テストデータが

3 2
2 2
5 3
10 2
0 0

だと...
コメント1件

854
デフォルトの名無しさん[sage]   投稿日:2016/12/08 12:13:29  ID:QjRH9I62.net(2)
>853
返答ありがとうございます。
outputは自分の出力ではく正解例だったと理解しました。
地道に書き直したいと思います。

855
デフォルトの名無しさん[sage]   投稿日:2016/12/08 16:07:18  ID:va2iI+cZ.net
{-# LANGUAGE IncoherentInstances, FlexibleInstances #-}

class C c where
dummy :: c a -> Bool

instance (C c) => Eq (c a) where
t == u = undefined

foo :: C c => c a -> c a -> Bool
foo t u = t==u

最初の行でIncoherentInstancesを拡張として指定してるのに
このソースをghciで:lするとIncoherentInstances拡張使えよと怒られます
ご教示お願いします

856
デフォルトの名無しさん[sage]   投稿日:2016/12/09 13:47:36  ID:tvJsjzEB.net(2)
>61
遅レス
別言語だけど、そういうのがエラーにならないから
苦しんだりする。

857
デフォルトの名無しさん[sage]   投稿日:2016/12/09 13:49:42  ID:tvJsjzEB.net(2)
>850
完結(閉じる)させよう完結させようとしてるからじゃね?
あと遅延評価。

858
デフォルトの名無しさん[sage]   投稿日:2016/12/09 13:51:17  ID:K0qlOadl.net
文字列としてソートして済ませようと横着したせいなのだからきちんとreadすりゃいい

main = solve . map (map read.words).lines =<< getContents

solve :: [[Int]] -> IO ()
solve ([a,b]:xs) = let output x y = putStrLn (show x ++ " " ++ show y) in
if [a,b] == [0,0] then return () else (if a<=b then output a b else output b a) >> solve xs

くらいで充分では。

859
デフォルトの名無しさん[sage]   投稿日:2016/12/09 18:22:07  ID:2XG9ELCp.net
先輩助けてください><
stack install pandocやっても全然インストールが終わりません
6時間ぐらいやってやっと最後のpandocのビルドに入ってるんですがこれも2時間ぐらい放置しても終わりません
もう面倒くさいのでインストールしたパッケージを削除したいんですが
~/.stack/indices/Hackage/packages/の中のディレクトリを全部rmで削除しちゃっても問題ないですか?
インストール済みのパッケージ一覧ってどうやって確認するんでしょうか?
ちなみにstack setup;stack install pandocしかコマンドは打ってません

860
デフォルトの名無しさん[sage]   投稿日:2016/12/09 18:22:53  ID:s+wOeJ/3.net
モナド変換子の順番ってどういう考え方をして決めればいいの
例えば Reader, State, Writer の3つを使いたい場合は?
さらに複雑にError, Cont, IO なども組み合わせるとしたら?
いまいちイメージがつかめない

861
デフォルトの名無しさん[sage]   投稿日:2016/12/09 19:12:53  ID:p8RNi3Am.net
多重継承に似てるね
同じ考え方でいいならごちゃごちゃ考えるより禁止した方が早いというイメージ

862
デフォルトの名無しさん[sage]   投稿日:2016/12/09 20:29:18  ID:EUMrXHYZ.net
モナド変換子は銀の弾丸ではなかった

863
デフォルトの名無しさん[]   投稿日:2016/12/09 21:31:32  ID:jpcAk/L4.net
Windowsにhmatrixインストールできん……
https://github.com/albertoruiz/hmatrix/blob/master/INSTALL.md
に従ってgslで入れようとしているのですが、うまくいきません。blasもlapackもdllファイルがあればいいのか、それともdll.aが必要なのか教えてください
コメント1件

864
デフォルトの名無しさん[sage]   投稿日:2016/12/10 13:21:36  ID:Wk3rTOSj.net
WindowsでgccとかghcとかやりたくないからPythonの需要があるんだな

865
デフォルトの名無しさん[sage]   投稿日:2016/12/10 13:52:08  ID:FMtwqCBj.net

866
デフォルトの名無しさん[sage]   投稿日:2016/12/10 21:09:59  ID:XdnKR7fM.net
明示的に並列・平行処理をプログラムしていなくても、
ghc にコンパイルオプション -threaded や -with-trtsopts=-N を渡す意味ってある?
(parallel や repa などのパッケージを一切使っていないとして)

こうすればメインプログラムはシングルコアでも、GC がマルチコアで走るとか。

867
デフォルトの名無しさん[]   投稿日:2016/12/10 22:03:47  ID:TvX35Fp0.net
>863
自己解決しました。cabalで最新のhmatrixを入れるとlibgfortranを読み込んでくれませんが、一つバージョンの低いものならマニュアル通りで上手くいきました。

868
デフォルトの名無しさん[sage]   投稿日:2016/12/11 20:56:56  ID:UUDzf3sv.net
Template-Haskellなどを使って
2,000,000までのフィボナッチ数のリストを
コンパイル時に生成しておく方法ってあります?
メタプログラミングを楽しく学びたいなと思っても情報が少なくて

869
デフォルトの名無しさん[]   投稿日:2016/12/14 23:24:27  ID:orbg+kS2.net
teratailのおじさんに聞いてみれば

870
デフォルトの名無しさん[sage]   投稿日:2016/12/15 12:26:23  ID:7KRIzock.net

871
デフォルトの名無しさん[sage]   投稿日:2016/12/16 00:23:50  ID:cnzBJNV1.net
fay使っている人いる?

872
デフォルトの名無しさん[sage]   投稿日:2016/12/17 20:09:38  ID:WuIMYiWl.net
Haskell High Performance Programming
https://www.packtpub.com/application-development/haskell-high-performa...
今は忙しくて時間がないが、正月休みにでも読んでみたい。
コメント1件

873
デフォルトの名無しさん[sage]   投稿日:2016/12/17 20:35:28  ID:yLbp/UkZ.net
>872
fib_mem :: Int -> Integer
fib_mem = (map fib [0..] !!)
 where
  fib 0 = 1
  fib 1 = 1
  fib n = fib_mem (n-2) + fib_mem (n-1)
https://www.packtpub.com/mapt/book/Application%20Development/978178646...

そ の 発 想 は な か っ た !
英語わからずコード眺めるだけでも目から鱗だなこれ。
コメント2件

874
デフォルトの名無しさん[sage]   投稿日:2016/12/17 21:15:04  ID:+cQgdhZ9.net(2)
で、何やってるのよ?
フィボナッチ数列の第k項を計算している?

875
デフォルトの名無しさん[sage]   投稿日:2016/12/17 21:33:00  ID:OM5N9qzB.net
定数的な未計算リストの要素取得として実装してるのか
理解するのに30分くらいかかった
コメント1件

876
デフォルトの名無しさん[sage]   投稿日:2016/12/17 22:54:27  ID:X2n4kSym.net
え、ただのメモ化だと思うんですけど(名推理)

877
デフォルトの名無しさん[]   投稿日:2016/12/17 23:36:22  ID:AzKtkJ0Q.net

878
デフォルトの名無しさん[sage]   投稿日:2016/12/17 23:38:55  ID:+cQgdhZ9.net(2)
C#とどっちが速いの?

879
デフォルトの名無しさん[]   投稿日:2016/12/18 00:14:05  ID:KFsMSIdd.net(3)
C#

880
デフォルトの名無しさん[sage]   投稿日:2016/12/18 02:59:30  ID:F22674nM.net
フィボナッチ数列の定義をほぼ変えずにメモ化してるところがかっこいい

ただfib 0 = 0 であって欲しいと思うんだけどな
コメント1件

881
デフォルトの名無しさん[sage]   投稿日:2016/12/18 04:13:03  ID:5HKYrKlu.net
速さと可読性の両立が美しいね
こういうコードを書きたくてHaskellを始めた事を思い出したよ

882
デフォルトの名無しさん[sage]   投稿日:2016/12/18 06:34:09  ID:KFsMSIdd.net(3)
理解するのに30分かかる人がいたので可読性に優れるかは不明
コメント2件

883
デフォルトの名無しさん[sage]   投稿日:2016/12/18 08:36:34  ID:hTsk1Lv9.net
>882
プログラムソースの可読性というのは、
いつでも万人に容易に理解できるということではありません。
メインとなる読者を想定した上で問題にすべきものです。
そして想定されるソースの読者は状況によって変わります。

たとえば、>873 のコードは(出典元の本を読めばわかりますが)、
メモ化の仕組みや方法が理解できた暁には容易に読めるようになっています。
>880 がその一つの証拠です。
本を読み終えた者にとっては十分に可読性が高いと言えるでしょう。

もし >882 の理由で可読性が乏しいと言うのなら、
たとえば Hackage のライブラリのコードは、そのほとんどについて
可読性が乏しいことになってしまいます。

884
デフォルトの名無しさん[sage]   投稿日:2016/12/18 09:44:11  ID:tEwqUsZ4.net
>875
おまい優秀だな
おれは1時間かかった
orz

885
デフォルトの名無しさん[sage]   投稿日:2016/12/18 13:37:45  ID:L9+Ra1Z5.net
これがゲームなら100時間超えた方がコスパ優秀、1時間で終わったらクソゲーになる

886
デフォルトの名無しさん[sage]   投稿日:2016/12/18 14:48:05  ID:2kBZC6Xk.net

887
デフォルトの名無しさん[sage]   投稿日:2016/12/18 17:01:21  ID:UVlvUqtT.net
いいか
1時間で終わるものでも何回でもしたくなるものが神ゲーなのだ
100時間かかろうがもう二度としたくないと思われたら負けなのだ

888
デフォルトの名無しさん[sage]   投稿日:2016/12/18 20:26:11  ID:KFsMSIdd.net(3)
ファミコンのマインドシーカーとかな

889
デフォルトの名無しさん[sage]   投稿日:2016/12/20 03:50:03  ID:MHiDziMA.net
頭を取り出して、とある判断に依って残りの部分から一つだけ要素を削って、今取った頭を尻につけて再帰するとします

f (c:cs) = f $ (nanikaDrop c cs)++[c]

この場合、リストだと計算量膨れ上がってしまいます(長いリストの末尾に追加は不適)

うまい解決策はありませんか?(Sequenceなど大袈裟なもの持ち出さずとも済むやつ)
コメント1件

890
デフォルトの名無しさん[sage]   投稿日:2016/12/20 04:09:51  ID:+ciV1zGy.net(2)
((cs:) . (c:) )[]

891
デフォルトの名無しさん[sage]   投稿日:2016/12/20 04:34:56  ID:+ciV1zGy.net(2)
上の書き込みは撤回。
foldr (:) [c] cs で試してみて。

892
デフォルトの名無しさん[sage]   投稿日:2016/12/20 11:31:59  ID:M7yybZ5b.net(2)
f [c]
= f $ (nanikaDrop c []) ++ [c]
= f [c]
計算量を有限にする解決策がない

893
デフォルトの名無しさん[sage]   投稿日:2016/12/20 16:23:54  ID:/9zIrQ23.net
既存のリストの末尾に追加するんじゃなくて
ストックするリストをもう一つ設ける感じの定跡があったような

f cs = f' cs []
where f' [] ds = hoge
f' (c:cs) ds = f' (nanikaDrop' (c:cs) ds) (c:ds)

894
デフォルトの名無しさん[sage]   投稿日:2016/12/20 16:59:59  ID:M7yybZ5b.net(2)
どれをdropするか判断するため、nanikaDrop'はdsの中身も調べる
dsは逆順だから、元のバージョンと (計算量だけでなく) 計算結果が異なる可能性がある

895
デフォルトの名無しさん[sage]   投稿日:2016/12/20 21:02:32  ID:CJ2gtWfF.net
http://codeforces.com/contest/749/problem/C
この問題に似てる(だけどちょっと違うか)
sssp://o.8ch.net/ktqx.png

896
デフォルトの名無しさん[sage]   投稿日:2016/12/21 01:23:38  ID:PxT7y6eE.net
>889
データ列の並び自体には変更がなくて、参照開始位置だけが変わるんだから
配列とインデックスのペアを渡すようにすればいいんじゃね
呼び出しのときにwhere節でインデックス+1と範囲チェックして

897
デフォルトの名無しさん[sage]   投稿日:2016/12/22 02:04:03  ID:8qaRbIfF.net
GHCのコードを眺めると
Haskellって変に関数型っぽさを意識しなくても
元々の言語の力が強力だから
フリーダムに破壊的代入しまくっても結構大丈夫そうだな。

書き手の自主規制は
「unsafe○○を使わない」くらいで良さそう。
コメント1件

898
デフォルトの名無しさん[sage]   投稿日:2016/12/22 02:45:33  ID:6SQ/7lyG.net
>897
>フリーダムに破壊的代入
これって具体的にはIORefとかIOArrayとかのこと?

899
デフォルトの名無しさん[sage]   投稿日:2016/12/22 19:40:41  ID:mj10TB7n.net
コピーと参照の違いを教えるのも教わるのも面倒臭い
IORefを非公式な存在にしておけば説明を省略できる

900
デフォルトの名無しさん[sage]   投稿日:2016/12/23 12:25:30  ID:WPc1DkhL.net
IORefどころかIO自体が非公式に近いせいで
クイックソートやフィボナッチ数列は書けるけど
入力の受け取りは分かりませんという初心者が大量発生してるのも問題だよね。

901
デフォルトの名無しさん[sage]   投稿日:2016/12/23 13:09:51  ID:KuQ5z2Nq.net(2)
副作用あるけどリファレンスがない言語といえばBASICを思い出す
初心者には良いかもしれない

902
デフォルトの名無しさん[]   投稿日:2016/12/23 14:15:24  ID:Tuuf9WFQ.net(2)
添字が文字列(String)での配列を作りたいんですが

903
デフォルトの名無しさん[sage]   投稿日:2016/12/23 14:18:31  ID:kNavPx7f.net
まず、それは配列とは言わないのだが
Data.Mapでもハッシュ表でも使ったらよい

904
デフォルトの名無しさん[]   投稿日:2016/12/23 15:21:28  ID:Tuuf9WFQ.net(2)
実は既にData.Mapで作ったけど
O(logN)では速度不足で困ってるんよ。
配列は無理となると八方塞がりだな全く。

905
デフォルトの名無しさん[sage]   投稿日:2016/12/23 15:53:25  ID:KuQ5z2Nq.net(2)
でもGCはO(N)だから
O(log N)でも遅いならGCが不要な言語が必要なのでは

906
デフォルトの名無しさん[sage]   投稿日:2016/12/23 15:57:41  ID:CW+qY3ex.net
ないなら自分で作ればいいのよ
文字列に規則性を要請してハッシュ化したものを剰余で制限して固定長配列に詰め込むみたいな
任意の文字列なら原理的に無理だ

907
デフォルトの名無しさん[sage]   投稿日:2016/12/23 17:43:33  ID:wkM1H3Zq.net
速度が出ないのはString = [Char]を使ってるからという可能性は

908
デフォルトの名無しさん[sage]   投稿日:2016/12/23 18:31:05  ID:XiISUE9C.net
Text と ByteString って計算量的にどっちが強いの?

909
904[sage]   投稿日:2016/12/24 03:16:30  ID:mtrCHwqX.net
結局、Data.Map.Strictではなく
Data.HashMap.Strictに変更したら高速化出来たわ。
どちらもO(log N)なのに実行速度が10倍違うという謎。

910
デフォルトの名無しさん[]   投稿日:2016/12/24 07:05:16  ID:Y/bvEAMg.net
謎ですね

Data.Map.Strict
https://hackage.haskell.org/package/containers-0.5.9.1/docs/Data-Map-Stri...
> The implementation of Map is based on size balanced binary trees (or trees of bounded balance)

Data.HashMap.Strict
https://hackage.haskell.org/package/unordered-containers-0.2.7.1/docs/Dat...
> The implementation is based on hash array mapped tries. A HashMap is often faster than other tree-based set types, especially when key comparison is expensive, as in the case of strings.
コメント2件

911
デフォルトの名無しさん[sage]   投稿日:2016/12/24 11:02:55  ID:uh1BkFoy.net(2)
10倍遅いのは客観的事実だとしても、O(log N)だから遅いというのは主観でしょ

912
デフォルトの名無しさん[sage]   投稿日:2016/12/24 11:07:27  ID:I8duN72O.net
おもしれー

913
デフォルトの名無しさん[sage]   投稿日:2016/12/24 12:15:27  ID:jPmKUoCt.net
>910

そういう嫌味は通じないと思うよ。

914
デフォルトの名無しさん[sage]   投稿日:2016/12/24 19:02:03  ID:hxBGGNm6.net
本当だよな
この程度で質問とかされるとレベル下がる
(HashMapなんて知らなかったとは言えない・・・)

915
デフォルトの名無しさん[sage]   投稿日:2016/12/24 22:11:20  ID:uh1BkFoy.net(2)
レベルって本当に存在するのか
存在しないものを数値化してもニセ科学にしかならない

916
デフォルトの名無しさん[sage]   投稿日:2016/12/25 00:08:15  ID:ZRKIJIGh.net
>910
HashMapはarrayがあるから挿入や削除のコスト高そう

917
デフォルトの名無しさん[sage]   投稿日:2016/12/25 08:52:13  ID:WFXIwNvn.net
stack のパッケージの lts のバージョンがけっこう頻繁にアップしています。

わたしはちょっとした実験にも stack new でプロジェクトを作って行っているのですが、
そうすると、~/.stack/snapshots にいつくものバージョンのライブラリが作られます。

昔作ったバージョンの分はもう不要なのですが、これはシェルで削除しても問題ないでしょうか。
他にいっしょに削除、または書き換えるべきファイルはあるでしょうか。
それとも、このような場合は stack のコマンドを使うべきでしょうか。
コメント1件

918
デフォルトの名無しさん[sage]   投稿日:2016/12/26 01:52:03  ID:JnmwQ0pE.net
AOJのHaskellのメモリ緩和が2.0倍なのはイジメですか?
「遅延評価なんかさせねぇぞ」という
緩やかな圧力を受けている気がしますが気のせいなのですか?

919
デフォルトの名無しさん[sage]   投稿日:2016/12/26 04:26:12  ID:zGEIM/Ml.net
AOJはUIがスマホに冷たいのでやってない

920
デフォルトの名無しさん[sage]   投稿日:2016/12/26 08:33:06  ID:t1RDiD7h.net
AOJでHaskell提出がゼロ件の問題にでもブチ当たったのか?

921
デフォルトの名無しさん[sage]   投稿日:2016/12/27 20:27:17  ID:AVwpVaHj.net
解けないと思った問題はだいたい提出ゼロ件だから困る

922
デフォルトの名無しさん[sage]   投稿日:2016/12/28 06:15:45  ID:WV6f4N8v.net
HaskellでCodinGameっていうのやってきたけど
プログラミング言語ってのは適切に選択すべきだな

923
デフォルトの名無しさん[sage]   投稿日:2016/12/28 06:31:11  ID:gfblSjYR.net
Haskellは不適切だったのか?

924
デフォルトの名無しさん[sage]   投稿日:2016/12/28 14:45:45  ID:eesspTrt.net
型安全よりメモリや時間の制約の方が大事という本音が出た
型安全は建前にすぎない
C++やJavaScriptの弱点を探して偶々見つけた建前
その建前で一番得をしたのがHaskellだったが

925
デフォルトの名無しさん[sage]   投稿日:2016/12/28 16:53:59  ID://kCk9pj.net
型安全の恩恵にあずかってる時は気付かないもの

926
デフォルトの名無しさん[sage]   投稿日:2016/12/28 17:42:32  ID:mX+MonYx.net
走り出してからエラー起こすくらいならコンパイルで止めてほしい

その意味でheadは苛々する

927
デフォルトの名無しさん[sage]   投稿日:2016/12/28 18:07:16  ID:dxHkwKr/.net
getterを使うなというデザインパターン
getterはエラー値を返すか例外を投げる
コールバックはエラー値を渡して呼び出すくらいなら何も呼び出さない

928
デフォルトの名無しさん[sage]   投稿日:2016/12/28 22:02:33  ID:+yS2yZq8.net
Haskellらしさなんて望まないし
do記法の乱発でも構わないから
色々なコードをHaskellで書きたいのが本音だけど
そういうコードって公開を恥と思っているのか
参考になるコードが表に出ないのよね。

929
デフォルトの名無しさん[sage]   投稿日:2016/12/28 22:13:57  ID:QsQB820n.net
マニュアル関数リファレンス見るだけで書ける天才しか関わってないんだよ

930
デフォルトの名無しさん[sage]   投稿日:2016/12/28 23:25:32  ID:g7cKfXNx.net
参考にならないHaskellらしくないコードは大量に晒されてるのにな
競プロ系でヘボコードの量産と公開は大量になされてるし
GitHubなどでの個人リポジトリはゴミ溜めと化しててショッボイコードいっぱい公開されてるし

931
デフォルトの名無しさん[sage]   投稿日:2016/12/29 01:04:41  ID:CZgr2A6D.net
Project Eulerを
オリジナリティ皆無のコードで解いて悦に浸ってる人ばかりだもんな。

授業のノートみたいな記事が乱立していて
実際に身につけたHaskell技術で何かしてる雰囲気が一切感じ取れない。

将棋ソフトの大会でHaskellの参加者0名なのも納得だよ全く。

932
デフォルトの名無しさん[sage]   投稿日:2016/12/29 01:41:49  ID:958/OC8Q.net
Search ・ tetris ・ GitHub
https://github.com/search?utf8=%E2%9C%93&;q=tetris&l=Haskell

たしかに参考にならんな

933
デフォルトの名無しさん[sage]   投稿日:2016/12/29 12:34:13  ID:j7+IUMHV.net(2)
非公開なのはコードだけじゃないんだろ
母国語も知られたくない場合に世界標準語Haskellを使う

934
デフォルトの名無しさん[sage]   投稿日:2016/12/29 13:50:05  ID:j7+IUMHV.net(2)
属人性排除は何も生み出さないが人格攻撃の回避等の意味はある

935
デフォルトの名無しさん[]   投稿日:2016/12/29 16:51:08  ID:LQ9PzYon.net
1週間かければ洗練されるコードよりも、今動くゴミ

936
デフォルトの名無しさん[sage]   投稿日:2016/12/29 18:10:51  ID:AiXb9Xql.net
ワードサラダボットが稼動中かな?

937
デフォルトの名無しさん[sage]   投稿日:2016/12/29 19:13:20  ID:zRLSWr5O.net
嫌いな言葉は未来って言われたらどうする
A 矛盾を指摘する
B あだ名をつける

938
デフォルトの名無しさん[sage]   投稿日:2016/12/29 20:01:04  ID:vDsL3Xsf.net
俺は日常の計画をIO型で記述している

939
デフォルトの名無しさん[sage]   投稿日:2016/12/29 22:02:36  ID:kSKj0BmQ.net
ワードサラダボット稼動中かな?

940
デフォルトの名無しさん[sage]   投稿日:2016/12/31 05:44:27  ID:UcNaXnZh.net
HaskellでAndroidアプリでも作ろうかと思ったけど
どの記事もGUI周りに触れてないから難しいな。
Hello Worldを表示する簡単なアプリの作り方だけ
サクッと解説してるような記事があれば教えて欲しいね。

941
デフォルトの名無しさん[sage]   投稿日:2016/12/31 11:08:57  ID:kRv/DXPo.net
stack で最新の LTS のバージョン番号を
シェルの中から簡単に調べる方法はありますか?
目的はそのバージョン番号を別のコマンドに入力することです。

たとえばデフォルトでは新たに stack new すれば、
その際に LTS のバージョン番号を知ることができますが、
バージョン番号を知ることだけが目的ならば大げさです。

また、stackage のサイトのトップページに載っていますが、
これはシェルの中に居ながら知るという目的には合いません。

942
デフォルトの名無しさん[sage]   投稿日:2016/12/31 19:24:54  ID:EfF4/AjA.net(3)
>> 941
単に最新のltsでプロジェクト作りたいなら、lts-7 のようにマイナーバージョンを省略するのがオススメ。
$ stack new Test --resolver=lts-7

質問の直接の答えは… たとえばこういうのはどう? stackageのサイトはマイナーバージョンを省略すると最新のにリダイレクトするので、その先のURLを取得して解析する。
$ curl -s -D - https://www.stackage.org/lts-3 | grep Location | sed -E
コメント2件

943
942[sage]   投稿日:2016/12/31 19:30:45  ID:EfF4/AjA.net(3)
ごめんコマンド途中で千切れた。
http://lpaste.net/2827629961710403584

944
デフォルトの名無しさん[sage]   投稿日:2016/12/31 19:31:23  ID:EfF4/AjA.net(3)
>917
シェルで削除してよいと思う。

945
デフォルトの名無しさん[sage]   投稿日:2017/01/03 23:00:57  ID:8FCGUjqy.net
今年もコンピュータ将棋選手権が始まるけど
Haskell使いは0人なんだろうなぁ・・・
俺に技術力があれば参加するのに悔しい

946
デフォルトの名無しさん[sage]   投稿日:2017/01/03 23:26:08  ID:4YoTfy16.net
>942
メジャーアップデートされていた場合に把握できないので、実用的とは言い難いです。

せっかくのアドバイスでしたがすみません。
ありがとうございました。

バージョン番号だけを確実に得る方法は無さそうなので諦めます。

947
デフォルトの名無しさん[sage]   投稿日:2017/01/04 01:27:11  ID:sXyRenYZ.net
>942 のlts-3からさらにメジャーバージョンを削ってltsにすれば
例えば今だと Location: /lts-7.14 が出力されるけどそれじゃいかんの?

948
デフォルトの名無しさん[sage]   投稿日:2017/01/04 04:17:15  ID:6ooS73gi.net
HaskellはAndroidアプリが作れたら化けそうだよね
上手いこと対応してくれれば良いんだけど
コメント1件

949
デフォルトの名無しさん[sage]   投稿日:2017/01/04 08:13:28  ID:WVq2nDsH.net
ほぼHaskellの文法でJavaが書けるFregeって言語があるらしいけど
まだ評判みたいのは聞こえてこないな

950
デフォルトの名無しさん[sage]   投稿日:2017/01/04 15:37:13  ID:5EwwSdU6.net
>948
GCを明示的に行わないと携帯自身が死ぬと思う

951
デフォルトの名無しさん[sage]   投稿日:2017/01/05 15:25:10  ID:MABferfQ.net(2)
プロファイリングや最適化の話でよく const center (centre) という単語が出てくるけど、どういう意味?
const center を集める、とかいう使い方も見た。

Web で調べても経済学用語としてしか出てこないんだけど、同じ意味で捉えていいの?
コメント2件

952
デフォルトの名無しさん[sage]   投稿日:2017/01/05 15:57:44  ID:qnGCBE0G.net
cost centreではなく?
コメント1件

953
デフォルトの名無しさん[sage]   投稿日:2017/01/05 16:40:24  ID:MABferfQ.net(2)
>952
ごめん、単に書き間違えただけ。

cost ね

954
デフォルトの名無しさん[sage]   投稿日:2017/01/05 22:58:18  ID:XwpChIXW.net
Haskell界隈だとコスト集約点という訳語がよく用いられている模様
意味はGHCのマニュアルなどを参照

第5章 プロファイルを取る
http://www.kotha.net/ghcguide_ja/latest/profiling.html
コメント3件

955
デフォルトの名無しさん[sage]   投稿日:2017/01/06 05:48:29  ID:x6C/Cft1.net
>954
これ日本haskell界では有名なサイトなの?

http://www.kotha.net/

956
デフォルトの名無しさん[sage]   投稿日:2017/01/06 15:16:05  ID:5l30YHWE.net
>951
同じ意味で使われているのではない?
時間や計算機資源はコストという考えを前提に

957
デフォルトの名無しさん[sage]   投稿日:2017/01/07 05:10:29  ID:JXrYQtFJ.net
>951
テクニカルタームというより、会計で使う原価部門の概念を流用しているのでは?
Haskellでのテクニカルタームとしての定義は>954に書いてあるが、もとの意味はコストがどこで発生したかを管理把握するための会計上の区分。

958
デフォルトの名無しさん[sage]   投稿日:2017/01/07 12:31:58  ID:S46XE+Ca.net(2)
なぜ語源と定義は同じではないのか

モナドの語源はライプニッツと関係ありそう
だがモナドの定義はライプニッツと全く関係ない

959
デフォルトの名無しさん[sage]   投稿日:2017/01/07 14:43:46  ID:QuS23fJI.net
Data.Sequence 食べず嫌いしてたけど、これ慣れたら便利そうだな

960
デフォルトの名無しさん[sage]   投稿日:2017/01/07 15:38:35  ID:7iPw9gWV.net
リストは初めからData.Sequenceっぽい挙動にしてくれれば良いのにな。
細かいチューニングが利用者任せなのも普及しない原因だと思うわ。

961
デフォルトの名無しさん[sage]   投稿日:2017/01/07 21:53:37  ID:S46XE+Ca.net(2)
これ有限の長さしか扱えないから
無限の長さを遅延評価で処理するリストと同じではない

962
デフォルトの名無しさん[sage]   投稿日:2017/01/08 09:07:59  ID:HXGQkJ06.net
951 だけど、>954 のリンク先で理解できた。
みんなの言うとおり、ぴったり合うということで用語を流用してるんだね。
シャノンがエントロピーを流用したのと似た感じか。


ありがと。

963
デフォルトの名無しさん[sage]   投稿日:2017/01/08 13:41:38  ID:s45iu22l.net
<$>、>>、>>= 等より強い$が欲しいから

infixr 5 $+
($+) = ($)

を使ってるんだけど、邪道かな?
コメント1件

964
デフォルトの名無しさん[sage]   投稿日:2017/01/09 21:52:35  ID:Gy5eZLLr.net
>963
個人的にはなんでそんなのが欲しいのか知りたい

965
デフォルトの名無しさん[sage]   投稿日:2017/01/10 19:00:40  ID:f/pmyPVx.net
それらの演算子の右辺に使いたいって話なら (.) で関数合成すりゃ済むような

966
デフォルトの名無しさん[sage]   投稿日:2017/01/11 00:32:30  ID:4yaLCJvM.net(2)
ごちゃごちゃ右に続けるより、let か where で一行加えた方が良いマナーでなかろうか
命名に英語の知識が若干必要だけど

967
デフォルトの名無しさん[sage]   投稿日:2017/01/11 01:56:24  ID:4yaLCJvM.net(2)
>去年知ったけど、いつの間にか普通の再帰が自動で末尾再帰最適化(ループへ変換)されて

これマジ!?

968
デフォルトの名無しさん[sage]   投稿日:2017/01/11 04:35:07  ID:qB6hV9pT.net
マジ。
久しぶりに触ったらなってた。
理屈で言えば単純な再帰は末尾再帰に変換するパターンは決まってるから、変形してコンパイルしてくれてるんじゃないかな。

969
デフォルトの名無しさん[sage]   投稿日:2017/01/12 21:38:21  ID:i0JKcY5G.net(2)
retainerとは何でしょうか
コメント1件

970
デフォルトの名無しさん[sage]   投稿日:2017/01/12 21:44:41  ID:i0JKcY5G.net(2)
すいません、>969 は解決しました。

971
デフォルトの名無しさん[sage]   投稿日:2017/01/13 16:27:32  ID:spW6LWtW.net(6)
"AAABCC" `combi` 3
(ターン!
["AAA","AAB","AAC","ABC","ACC"]

ってやりたいんですがどうやりますか? 但し一杯生成してから余計なの省くのはナシで
コメント1件

972
デフォルトの名無しさん[sage]   投稿日:2017/01/13 16:43:30  ID:sdnCdlet.net
combi "AAABCC" 3 = ["AAA","AAB","AAC","ABC","ACC"]

973
デフォルトの名無しさん[sage]   投稿日:2017/01/13 17:11:30  ID:Y/PhWwOJ.net(3)
>971
例だけじゃなくて、関数の仕様もできるだけ詳しく教えて
コメント1件

974
デフォルトの名無しさん[sage]   投稿日:2017/01/13 17:13:03  ID:spW6LWtW.net(6)
けちんぼ!

975
デフォルトの名無しさん[sage]   投稿日:2017/01/13 17:20:14  ID:spW6LWtW.net(6)
>973
組合せです。
入力は重複を含む要素のリストで
出力はそのリストからn個選んだリストのリストです
しかし出力に重複は許されません

例えば "AAAAAAA" `combi` 3 == ["AAA"] です

実装に関して、一杯生成してからnubはダメです

例えば "AAAABBB" `combi` 3 == ["AAA","AAB","ABB","BBB"] です
コメント1件

976
デフォルトの名無しさん[sage]   投稿日:2017/01/13 17:26:32  ID:Y/PhWwOJ.net(3)
>975
後から重複を取り除く方法全般がダメなの?

それとも、たとえばソートしてからグルーピングして
先頭要素だけ取る方法はOK?
コメント1件

977
デフォルトの名無しさん[sage]   投稿日:2017/01/13 17:37:44  ID:spW6LWtW.net(6)
出力される各リストは、例えば "AAB" と "ABA" は同じとみなされます(Aが2つ、Bが1つ選ばれているという意味で同じとみなすのです)

978
デフォルトの名無しさん[sage]   投稿日:2017/01/13 17:39:24  ID:spW6LWtW.net(6)
>976
それはいいです
コメント1件

979
デフォルトの名無しさん[sage]   投稿日:2017/01/13 18:09:13  ID:KeMBxxc7.net
できた?

runlen [] = []
runlen (x:xs) = rl x 1 xs
rl x k [] = [(x,k)]
rl x k (y:ys) = if x == y then rl x (k+1) ys else (x,k) : rl y 1 ys
combi' [] _ = []
combi' [x] y = if x >= y then [[y]] else []
combi' (x:xs) y = [ h : t | h <- reverse [0..min x y], t <- combi' xs (y-h) ]

combi str n =
let xs = runlen str in
let str' = map fst xs in
[ concat (zipWith replicate y str') | y <- combi' (map snd xs) n ]
コメント2件

980
デフォルトの名無しさん[sage]   投稿日:2017/01/13 19:00:59  ID:spW6LWtW.net(6)
>979
ありがとうございます

981
デフォルトの名無しさん[sage]   投稿日:2017/01/13 19:14:20  ID:Y/PhWwOJ.net(3)
>978
それなら、組み合わせを計算してから、ソート・グルーピング・map head すればいいだけなのでは?
コメント1件

982
デフォルトの名無しさん[sage]   投稿日:2017/01/14 01:09:18  ID:qkQ2nYQV.net
Elmって面白いね。初めて関数型言語が実戦で使えた感じ。

983
デフォルトの名無しさん[sage]   投稿日:2017/01/14 01:50:04  ID:qj8F+4RU.net
>981
ああ、やっぱそれだとソートしてグルーピングの計算オーダーがnubするのと変わらない事態を招く気がしますのでダメになっちゃいますね


要は愚直実装より速いものが欲しかったのです。重複を含む巨大なリストから数個取り出す組合せをリストアップしようとすれば、愚直実装ではフリーズしてしまいまして
コメント1件

984
デフォルトの名無しさん[sage]   投稿日:2017/01/14 07:24:46  ID:mdG3n9u6.net
>983
ソート済みリストに対する重複削除はちゃんと定義すればO(n)で動くから
ソートがO(n log n) で動けば全体もO(n log n) になるので
Haskellの一般のリストに対するnub のO( n^2) より速いはず

985
デフォルトの名無しさん[]   投稿日:2017/01/14 08:37:41  ID:z+PGQfym.net(2)
import Data.List

comb :: String -> Int -> [String]
comb xs = comb' ((group . sort) xs)
where
comb' ys n
| n == 0 = [[]]
| (null . head) ys = comb' (tail ys) n
| (length . concat . tail) ys < n = map ((head . head) ys :) (comb' ((tail . head) ys : tail ys) (n - 1))
| otherwise = map ((head . head) ys :) (comb' ((tail . head) ys : tail ys) (n - 1)) ++ comb' (tail ys) n

こんな感じで組み合わせを求めることはできると思うんだけど速度的には難ありってことなんでしょうか
そのあたりのことを知りたい
コメント2件

986
デフォルトの名無しさん[]   投稿日:2017/01/14 09:46:02  ID:z+PGQfym.net(2)
import Data.List

comb :: String -> Int -> [String]
comb xs = comb' ((group . sort) xs)
where
comb' ys n
| n == 0 = [[]]
| (null . head) ys = rs
| (length . concat . tail) ys < n = ls
| otherwise = ls ++ rs
where
ls = ((head . head) ys :) <$> comb' ((tail . head) ys : tail ys) (n - 1)
rs = comb' (tail ys) n

汚かったので整えた

987
デフォルトの名無しさん[]   投稿日:2017/01/14 13:45:42  ID:BE8dMuIV.net
comb :: String -> Int -> [String]
comb xs n
| n == 0 || null xs = [[]]
| otherwise = do
l <- [0..m]
zs <- comb ys (n - l)
if length ys >= n - l then
return $ replicate l x ++ zs
else
[]
where
x = head xs
ys = filter (x /=) xs
m = min n $ (length xs - length ys)


>985だけど多分こういうやり方のほうがいいのかな

988
デフォルトの名無しさん[sage]   投稿日:2017/01/14 14:38:17  ID:eAnfzjs/.net
みんな両極端だよな
平気で嘘、誤答を書く時もあるし、速度的に?最も正しい答えを書きたがる時もある

989
デフォルトの名無しさん[]   投稿日:2017/01/14 23:05:47  ID:ARUXoNoj.net
最強のアルゴリズマーさんに聞くしかないな

990
デフォルトの名無しさん[sage]   投稿日:2017/01/15 10:11:21  ID:wEixuQp0.net
書いてる方もよくわかってないんだよ

991
デフォルトの名無しさん[]   投稿日:2017/01/15 10:47:54  ID:Lz2CPGKK.net(2)
プログラミング自体趣味でやってるだけで教養のようなものがなく
具体的な指摘はとても勉強になるのでお願いしたいです

Haskellって日曜プログラマには最適な言語なんじゃないかな。アイデアを形にする過程がすごく楽しい
コメント1件

992
デフォルトの名無しさん[sage]   投稿日:2017/01/15 13:07:09  ID:SnguMZvf.net(2)
教養ってそんな綺麗なものではなく非科学的なものが一杯入ってる
かといって科学をただ否定すりゃいいってものでもない
コメント1件

993
デフォルトの名無しさん[]   投稿日:2017/01/15 13:30:05  ID:Lz2CPGKK.net(2)
>992
科学と実用性の駆け引きというのか協力というのか、そういう絶妙な連携は魅力的ですね


ところで組み合わせの問題グルーピングよりも[("A",3),("C",2),...]みたくはじめに個数を数えたほうが少し速くなりました

994
デフォルトの名無しさん[sage]   投稿日:2017/01/15 16:16:50  ID:40h2fwNv.net
Haskellは数学で科学はPythonでは

995
デフォルトの名無しさん[]   投稿日:2017/01/15 16:26:11  ID:nEHh2xZn.net
数学を名乗るには線形代数が弱い

996
デフォルトの名無しさん[sage]   投稿日:2017/01/15 18:02:21  ID:Vh4eztBk.net
15万文字のソート済み文字列で >979で48秒で終わる処理が、>985から最初のソートを抜いた版だと2000秒かかりました
コメント1件

997
デフォルトの名無しさん[sage]   投稿日:2017/01/15 21:36:53  ID:VKnf+7zn.net
>991
スマホ対応が終わってるのがなぁ・・・
今時自分のスマホでも自作アプリ動かしたいですやん

998
デフォルトの名無しさん[]   投稿日:2017/01/15 21:52:48  ID:KJfp/lQK.net
>996
文字をそのまま足すんじゃなくて個数として抽象化した方が良いってことですね。言われてみれば当然ですが勉強になりました

999
デフォルトの名無しさん[sage]   投稿日:2017/01/15 22:08:25  ID:SnguMZvf.net(2)
スマホの良いところは一人一台
発電所みたいに一箇所で大規模にやった方が安いという考えは古いのかも

1000
デフォルトの名無しさん[]   投稿日:2017/01/15 22:08:43  ID:zF8FuE9b.net
aojの問題でわからないところがあるので質問します.
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0033
二股にわかれた容器に1から10まで番号のついたボールを番号の大小関係の制約を守って並べていけるかを判定する問題なんですが,自分のコードを提出するとruntime errorになってしまいます.
理由も考えたんですがよくわからないので,何がダメなのかアドバイスをお願いしたいです.


main :: IO ()
main = getContents >>= mapM_ (putStrLn . (\arr -> solve (tail arr) 0 (head arr, 0)) . map (read :: String -> Int) . words) . tail . lines

solve :: [Int] -> Int -> (Int, Int) -> String
solve arr index (box1, box2)
| index == length arr =
更新情報
・スレッド一覧ページで過去ログのタイトル検索・一覧表示ができるようになりました(2016/1/20)
NGワード登録
登録する
スレッド内検索

プログラム板 タイトル検索

このスレッドが人気です(実況系)
実況 ◆ テレビ朝日 48921 スーパーJちゃん (661)テレ朝実況
実況 ◆ フジテレビ 84177 (338)フジ実況
ニュース (246)フジ実況
実況 ◆ TBSテレビ 28300 (748)TBS実況
[再]ガリレオ #01「燃える」 (824)フジ実況
実況 ◆ 日本テレビ 56178 菊地亜美 (1001)NTV実況
NHK総合を常に実況し続けるスレ 137041 クローバー (393)NHK実況
実況 ◆ 日本テレビ 56179 (48)NTV実況
このスレッドが人気です(ニュース系)
【話題】「一戸建て」と「マンション」のメリットとデメリット 「マンションは一軒家を買えなかった人が買うもの」ではない★2 (901)ニュー速+
【話題】世の中にあふれる「萌え絵」に生理的嫌悪感を持つ人たち…ポルノまがいのイラスト乱発に「頭が痛くなる」★12 (780)ニュー速+
【話題】クルマ離れどころか免許離れする若者 「大きな買い物は宅配で。車は維持費が大変。使わないものにお金をかけたくない」★12 (1001)ニュー速+
【映画】日本文化を消し去るハリウッド版『デスノート』がなぜ差別と批判されるのか、制作陣は何も理解していない (450)音楽・芸能ニュース
【話題】「一戸建て」と「マンション」のメリットとデメリット 「マンションは一軒家を買えなかった人が買うもの」ではない (1001)ニュー速+
【高校野球】仙台育英・渡部の“足蹴り”が炎上…監督の指示でSNS閉鎖、準決勝スタメン外れる チームメイト擁護「わざとじゃない」 ★16 (1003)音楽・芸能ニュース
【芸能】ウーマン村本「芸人はテレビの家畜。自分は知名度と目先の金のために出ている。将来はアメリカ進出へ」 (536)音楽・芸能ニュース
【野球】甲子園大会から「タオル回し」がなくなればいいのに 高校野球の世界に、「タオル回し」はそぐわない。 (288)音楽・芸能ニュース
プログラム板の人気スレ
ふらっと C#,C♯,C#(初心者用) Part130 (634)
【統計分析】機械学習・データマイニング17 (240)
Excel VBA 質問スレ Part49 (892)
オブジェクト指向システムの設計 173 (199)
Visual Studio 2017 Part3 (94)
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 (503)
次世代言語議論スレ[Go Rust Scala Haskell]第5世代 (904)
スレ立てるまでもない質問はここで 148匹目 (983)
Ruby 初心者スレッド Part 60 (942)
C言語なら俺に聞け 142 (99)
Pythonのお勉強 Part53 (870)
C++相談室 part131 (204)
Xamarin Part5 (440)
本当に必要ものは人工知能ではなくて検索エンジン (365)
プログラミング言語 Rust 3 (633)
Java入門・初心者質問スレ Part.4 (345)
ねねっちと一緒にプログラムを勉強するスレ第2話 (921)
C#, C♯, C#相談室 Part94 (718)
Git 15 (1003)
関数型プログラミング言語Haskell Part30 (903)
C# vs Java どっちが好き? その3 (617)
☆★Java質問・相談スレッド180★★ (515)
推薦図書/必読書のためのスレッド 81 (905)
Androidプログラミング質問スレ revision53 (776)
Swift part11 (246)
「メソッド名」分ける必要なくね?【オーバーロード】 (68)
このサイトについて
このサイトは2ちゃんねるからデータを取得し、表示するサービスです。
画像のインライン表示機能について
画像のURLの後ろにある[画像をインライン表示]をクリックすると、URLの下に表示します。
表示される画像は横幅100pxに縮小されていて、クリックすると原寸で表示します。
このサイトの特徴
1)スレッド内検索ができます
2)レス(「>>1」など)のポップアップができます
3)不適切な言葉を含む投稿を表示しません
4)ページ内で画像を直接表示できます
5)2ch他スレッドへのリンクはタイトル・板名つきでリンクします
6)すっきりとしたデザインで表示します
7)最新スレや前スレをチェック・一覧表示します
8)NGワード機能の搭載でイヤな言葉が目に入りません
9)荒らしを自動チェックします
10)スレッド内・同一IDの書き込みだけ表示できます
11)レスの返事をレスされた発言の下に表示する「まとめビュー」が利用できます
12)シリーズ化したスレッドの一覧を表示します
13)最新のスレッドがある場合はお知らせします
削除について
こちらをご覧ください
機能要望について
現在機能要望受付中です。
問い合わせについて
こちらのページからどうぞ
広告


首都圏の方、ソフトバンク光オススメですよ


このサイトは2ch.scからデータを取得・表示しています。削除などについてはこちらをご覧ください。 アクセスモード:差分取得 - 新着書き込みなし(304)