トップページtech
1002コメント312KB

関数型プログラミング言語Haskell Part28 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2015/04/10(金) 01:30:32.61ID:KZNYLMbm
関数型プログラミング言語 Haskell について語るスレです。

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

前スレ
関数型プログラミング言語Haskell Part27
http://peace.2ch.net/test/read.cgi/tech/1420718555/
0002デフォルトの名無しさん2015/04/10(金) 01:36:19.62ID:KZNYLMbm
関連サイト
(英語)
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%E3%83%83%E3%83%97

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
0003デフォルトの名無しさん2015/04/10(金) 01:39:03.48ID:KZNYLMbm
過去スレ一覧
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/
0004デフォルトの名無しさん2015/04/10(金) 01:41:33.49ID:KZNYLMbm
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) ttp://pc.2ch.net/tech/kako/996/996131288.html 👀
Rock54: Caution(BBR-MD5:e2e65a1aac6dd9c8b5655464158bdac3)
0005デフォルトの名無しさん2015/04/10(金) 09:33:29.65ID:xXBTN+Xq
どちらが正統か?
0006デフォルトの名無しさん2015/04/11(土) 10:52:03.73ID:PPihF5HG
銀河帝国正統政府()
0007デフォルトの名無しさん2015/07/14(火) 07:57:08.65ID:dR+Nasf+
このスレを実質「関数型プログラミング言語Haskell Part29」として活用します。
前スレ(Part28)のレス数が1000になってから利用してください。
以下、テンプレ。
0008デフォルトの名無しさん2015/07/14(火) 07:57:56.76ID:dR+Nasf+
関数型プログラミング言語 Haskell について語るスレです。

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

前スレ
関数型プログラミング言語Haskell Part28
http://peace.2ch.net/test/read.cgi/tech/1428535861/
0009デフォルトの名無しさん2015/07/14(火) 08:00:30.32ID:dR+Nasf+
過去スレ一覧
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/
0010デフォルトの名無しさん2015/07/14(火) 08:00:59.14ID:dR+Nasf+
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
0011関連サイト2015/07/14(火) 08:02:02.95ID:dR+Nasf+
(英語)
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
0012デフォルトの名無しさん 転載ダメ©2ch.net2015/07/14(火) 19:51:26.71ID:V8pOZFXs
関連書籍検索一覧 (「米」は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

----
テンプレは以上です。
0013デフォルトの名無しさん2015/07/15(水) 20:55:40.05ID:70iQnSqB
新たなるオライリー本か?
http://www.amazon.co.jp/dp/B00TN97BE2
0014デフォルトの名無しさん2015/07/16(木) 18:27:15.12ID:gee943jx
>>13
どさくさ宣伝乙。 帰って、どうぞ
0015デフォルトの名無しさん2015/07/18(土) 01:57:00.72ID:wQVOOXnd
変なAAが貼ってある方のスレは隔離スレなのか?
こっちよりレス伸びてるけども
0016デフォルトの名無しさん2015/07/18(土) 20:49:05.37ID:8uXNBMZf
>>15 本来の意図は違うと思うが、隔離スレにしたほうが良いからそうしようぜ
0017デフォルトの名無しさん2015/11/10(火) 07:03:48.22ID:RJS+i6XX
foo 0 = 〜
foo 1 = 〜
foo x = 〜
って書くのと

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

オススメな記述ってどっち?
使い分け方のヒントみたいなのあったりする?
それとも完全に好みの問題?
0018デフォルトの名無しさん2015/11/10(火) 07:24:21.46ID:tbHGFOTY
範囲で分けるとき下使ってる
0019デフォルトの名無しさん2015/11/10(火) 15:09:26.37ID:+Ply0ARe
パターンマッチはガード条件よりも出来ることが狭い。
なるべく狭い意味の機能を使った方が意図を特定しやすい。
よって、可能ならば前者の方が望ましいと思う。

でもまあ、そんなに厳密なもんじゃないよ。
それを原則としつつも見易いと思う方を柔軟に選ぶしかないんじゃないか。
0020デフォルトの名無しさん2015/11/10(火) 19:45:40.64ID:RJS+i6XX
>>18-19
d
0021デフォルトの名無しさん2015/11/13(金) 21:46:49.64ID:wOHg++fH
       自民党 対 国民!  死者数、戦時なみに!


川崎病の年間患者数、史上最高に 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
0022デフォルトの名無しさん2015/11/30(月) 04:16:13.25ID:3yHpaj1I
data Foo = Foo {}

で{}の中身がない場合ってどういう時に使うものなのでしょうか
0023デフォルトの名無しさん2015/11/30(月) 08:16:05.14ID:yyLLqUKU
【 オンラインTCGエディター 】 >>1

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

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

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

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

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

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

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

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

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

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1448404407/-13
0024デフォルトの名無しさん2015/12/22(火) 00:36:50.33ID:JyKdzAuM
この記事の宣伝か何か?


本物のプログラマはHaskellを使う 日経ソフトウエア
第58回 Cの配列をHaskellで利用する 2013/08/07
http://itpro.nikkeibp.co.jp/article/COLUMN/20130806/496825/
0025デフォルトの名無しさん2015/12/27(日) 20:26:50.91ID:Uc9cUKER
coqに比べたらhaskellなんかオモチャだわ。
0026デフォルトの名無しさん2016/01/12(火) 20:04:56.64ID:uxklQDbX
構文解釈にバグがあったらコンパイル通るんじゃねえの
0027デフォルトの名無しさん2016/01/12(火) 20:25:39.88ID:3+klCnXk
こういうのも誤爆って言うのかね
0028デフォルトの名無しさん2016/01/31(日) 13:36:39.77ID:AKL8QDPC
すごいH 批判されてるときあるけど
具体的な話は聞いたことがない
どのへんがどうダメなのか解る人いますか?

俺は擁護も批判もできないレベルなんでなんも言えないw
0029デフォルトの名無しさん2016/01/31(日) 16:19:13.20ID:gaE4MpDR
自動的に処理を並列化してくれるというところに俺は魅力を感じますね。
メニーコア時代には32Kコアプロセッサが普通になる。
そうなるとHaskell以外の選択肢が無いんですよ。
0030デフォルトの名無しさん2016/01/31(日) 18:20:42.41ID:d3QvGQc6
>>29
メニーコア,メニーコア,っていうけど haskell の実装がメニーコアにすでに適用している事例はあるの?
個人的には clojure の STM のような,具体的なカラクリのアイディアがない haskell が並列化に対応できるようになるとは思えない

haskell のこの方面での将来性は,ない
0031デフォルトの名無しさん2016/01/31(日) 18:32:52.82ID:4aqfDNg2
ただのキチガイだから相手にするな
0032デフォルトの名無しさん2016/01/31(日) 19:23:48.50ID:F9NTpP4r
>>30
キチガイのせいで馬鹿まで寄ってきたな haskellにもある物持ち出して、優位だと語るなんて笑える
haskellが遅延評価なのも忘れたのか?
どうせその調子だとclojureもまともに触ってないんだろ?
0033デフォルトの名無しさん2016/01/31(日) 21:23:02.45ID:9irTPz61
>>30
>個人的には clojure の STM のような

STMとか普通にあるんだけど……
0034デフォルトの名無しさん2016/01/31(日) 21:25:39.77ID:9irTPz61
>>30
>haskell の実装がメニーコアにすでに適用している事例はあるの?

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

それはともかく、並列性のボトルネックがないソフトェアならGHCでわりと
素直にスケールするのも知らんのかしら
0035デフォルトの名無しさん2016/01/31(日) 21:45:08.39ID:zyH0pBzu
メニーコア時代にはHaskell以外すべて淘汰されるんですよ。
0036デフォルトの名無しさん2016/02/04(木) 13:53:14.89ID:UJ/Pq+8G
ここが実質Part 30でいいんだろうか

>>1
■前スレ
関数型プログラミング言語Haskell Part29
http://peace.2ch.net/test/read.cgi/tech/1436869629/
0037デフォルトの名無しさん2016/02/05(金) 05:19:19.84ID:xfnoaCBb
関数型言語の話題って素人の衒学家が多いのは何でなんだろうな
とりあえず触ってみりゃ欠点もそれなりに多い事に気づくと思うが
0038デフォルトの名無しさん2016/02/05(金) 08:38:32.73ID:19bi+l7A
そりゃ関数型言語の話題で玄人ってのはCSの一部にしかいないからだw
0039デフォルトの名無しさん2016/02/05(金) 20:24:20.78ID:xfnoaCBb
玄人がいないって意味じゃねえよ…
極端だな
0040デフォルトの名無しさん2016/02/05(金) 20:24:21.22ID:/MC0YSt9
tanakhがHaskellで仕事してない時点で察しろ
0041デフォルトの名無しさん2016/02/05(金) 21:00:17.25ID:CS7E051N
>>37
欠点と言っても、本質とは関係ないからな。
Haskellに討ち滅ぼされた雑魚言語に絡まれるとかその程度。
唯一完成された言語だし、Haskell以外はすべて淘汰される。
0042デフォルトの名無しさん2016/02/06(土) 00:34:56.96ID:AtWB76qi
また胡乱な方向付けに
0043デフォルトの名無しさん2016/02/06(土) 00:55:24.18ID:bnndf23C
Haskellがすでに淘汰済みの残照な気が。
0044デフォルトの名無しさん2016/02/06(土) 06:38:48.88ID:qHjkJ1/w
前スレからわざと混乱するようなこと書いてるアホがいんだよ、無視しろ無視
0045デフォルトの名無しさん2016/02/06(土) 12:06:40.45ID:wrmjFiB3
そういえば無視というのは「見ない」ではなく「だんまり」って意味なんだよな
逆に「だんまり」といって相手を煽るのは「無視するな」ということ
0046デフォルトの名無しさん2016/02/06(土) 14:20:26.67ID:wrmjFiB3
ignore m = m >> return () -- 戻り値を無視するが副作用を無視しない

ignore' _ = return () -- 全て無視
0047デフォルトの名無しさん2016/02/06(土) 18:58:32.08ID:4z0/BkxB
アスペか糖質か
0048デフォルトの名無しさん2016/02/07(日) 08:09:04.81ID:cU6bDpiy
荒らしに反応するとき、荒らしもまたこちらに反応するのだ。byニーチェ
0049デフォルトの名無しさん2016/02/07(日) 09:44:32.12ID:fEVoSTHz
荒らしだと気付いてない奴がいるんだからしゃーなし
0050デフォルトの名無しさん2016/02/07(日) 10:09:33.89ID:/7Z+PXON
俺は個人的にはキャメル形式よりスネーク形式の方が断然好きなんだが、
Haskell のライブラリってなぜか知らんがキャメル形式で統一されてるよね。

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

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


もちろん、グループで組むときはみんなに合わせるし、
hackage に公開するライブラリはキャメル形式にするつもりだ。
0051デフォルトの名無しさん2016/02/07(日) 11:22:18.65ID:fu54F6yL
どっちでも気にならないようにすればいい
>吐き気を催す人
これはキチガイだから放置
0052デフォルトの名無しさん2016/02/07(日) 11:47:12.24ID:yu9AA7dR
正解が一つだから統一すべきって奴はキモイ
どれでも同じだから統一を手伝ってやるから金払えって奴は有能
0053デフォルトの名無しさん2016/02/07(日) 15:08:08.04ID:/PqCUlOY
OCamlは駱駝のくせにスネークなんだよな
個人的にはキャメルの方が好きだが
そもそも簡素でわかりやすい一語の識別子を使えばどっちもいらない
0054デフォルトの名無しさん2016/02/07(日) 18:19:17.65ID:yu9AA7dR
filenameがcase-sensitiveじゃなかったりするから大文字を使わない方が安全だとか
もともとOS依存に否定的だった場合は面子を保つために敢えて大文字を使うとか
0055デフォルトの名無しさん2016/02/07(日) 23:08:45.47ID:fEVoSTHz
hlintはスネークケースを叱るよね
0056デフォルトの名無しさん2016/02/08(月) 00:14:06.12ID:K7vwFuB3
>>54
その理屈はおかしい
ファイル名が case-insensitive だったところで
その言語(の識別子)が case-sensitive なら関係がない
0057デフォルトの名無しさん2016/02/08(月) 11:56:14.99ID:+KLQd2tl
>>56
ファイル名と直接関係あるのはモジュール
ただしモジュールと型が癒着していたり型と関数が癒着していたりすると影響が広がる
0058デフォルトの名無しさん2016/02/09(火) 20:08:55.36ID:T+WeLdAU
Haskellコンパイラをメイクするには前バージョンのHaskellコンパイラが要るんですよね?
じゃあ前バージョンのHaskellコンパイラをメイクするには前々バージョンのHaskellコンパイラが要るんですよね?
ということは、GCCからArmで動くHaskellコンパイラをメイクするには、C/C++で書かれた最後のバージョンのソースコードを探してきてそこから順番にメイクで辿って行かなきゃならないんですか?
0059デフォルトの名無しさん2016/02/09(火) 21:07:41.59ID:p2mta7H7
うるせえ死ね
0060デフォルトの名無しさん2016/02/09(火) 22:01:01.78ID:T+WeLdAU
ひぇ
0061デフォルトの名無しさん2016/02/09(火) 22:06:42.84ID:T/GcQe87
代数データ型のレコード名に困る。

data Common = Cmn Int String

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

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

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

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

どうしたものか。
何かいい案はない?
0062デフォルトの名無しさん2016/02/09(火) 23:37:31.63ID:bzuQoNTa
冗談だよね? クロスコンパイラ知らない奴がいるわけ?

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

GHC 7.12 でOverloadedRecordFields拡張が入って
お望みのことができるようになるが、それまで待てないなら
http://nikita-volkov.github.io/record/
というライブラリを検討してもいいかもしれない
0063デフォルトの名無しさん2016/02/10(水) 01:32:51.20ID:v+PYUzVT
Type1とType2の型は同じなんだけどなぁ

data Type0 a = T0 {uncmn :: a, cmn :: Common}
num t1 = uncmn t1 :: Int
name t2 = uncmn t2 :: String
0064デフォルトの名無しさん2016/02/10(水) 01:41:32.12ID:Jpj0GH1T
なんだこいつ
0065デフォルトの名無しさん2016/02/10(水) 16:17:31.06ID:v+PYUzVT
型の宣言には属人性があって、2種類の型を宣言する人もいれば1種類で済ます人もいる
0066デフォルトの名無しさん2016/02/10(水) 20:32:03.58ID:wJ3QdPqe
みんなありがと。

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


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

あと、それって

type Type1 = Type0 Int
type Type2 = Type0 String

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


>>65
ごめん、もう少し噛み砕いて説明してくれると助かる。
どういこと?
0067デフォルトの名無しさん2016/02/10(水) 20:55:10.35ID:Jpj0GH1T
>>66
7.12は8.0になったんだった。すまん。
つい数日前にRC2まできたんで、もうすぐリリースされる。
ただ、OverloadedRecordFieldsが完全に入るわけじゃないようだ

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

8.0ではこれがまだ入らない。
当面はおとなしくrecordsライブラリを使うのがいいかもな
0068デフォルトの名無しさん2016/02/10(水) 22:27:56.35ID:v+PYUzVT
よく考えたら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
}
0069デフォルトの名無しさん2016/02/11(木) 00:56:05.49ID:Nd3tdnXb
モナドが理解できなくて10年近く悩んでいる。
理解できれば死んでもいい。
0070デフォルトの名無しさん2016/02/11(木) 01:23:45.78ID:WmGIDCmu
これからはHaskellの時代だから頑張って理解したほうが良いよ。
0071デフォルトの名無しさん2016/02/11(木) 01:55:29.55ID:s0UUbhTE
IO、Maybe、Listをそれぞれ具体的に理解したら、それらに共通する
抽象的構造が漠然と理解できるようになる。話はそれからだ。

Functorを理解してApplicativeを理解すればMonadはすぐそこ。
MonadにできてApplicativeに出来ない事例をIOやListで書いてみれば、
Monadの意味もわかる。
0072デフォルトの名無しさん2016/02/11(木) 05:05:08.71ID:UHi7AMAe
何を以てモナドを理解したことになるのか
0073デフォルトの名無しさん2016/02/11(木) 09:54:22.24ID:mcDetqD3
>>72
入門書や解説書のモナドの章を「自分の言葉で書ける」ようになり、
なおかつ、読者が「なるほど」と言ってくれれば、自分は理解できてるなと安心できる。
0074デフォルトの名無しさん2016/02/11(木) 10:39:05.18ID:2qMTPVuS
Monadが理解できないならプログラミングやめちまえよ。
迷惑だわ。
0075デフォルトの名無しさん2016/02/11(木) 10:41:07.97ID:RWcQtaIC
サンクは二回以上評価しても同じなので必要なら一回だけ評価してメモ化するよね
IOは毎回結果が異なるので一回で終わらないがそれ以外はサンクと同じ物だよね
モナドは何の変哲もない型クラスだね
0076デフォルトの名無しさん2016/02/11(木) 10:48:22.39ID:4PPMlVIJ
モナドは窓を持たず
ただ表象するのみ
0077デフォルトの名無しさん2016/02/11(木) 15:22:54.23ID:Ijn2TjOB
また胡乱な方向へ
0078デフォルトの名無しさん2016/02/11(木) 15:33:12.95ID:g2tgmyMx
>>75
違う
0079デフォルトの名無しさん2016/02/11(木) 18:41:59.24ID:RWcQtaIC
いずれにせよ教える側に悪い奴がいるのは事実だよ
この状況でみんな善人ということはありえない
0080デフォルトの名無しさん2016/02/11(木) 19:33:58.12ID:s0UUbhTE
この人、統合失調かなんかなの?
0081デフォルトの名無しさん2016/02/11(木) 20:01:48.02ID:ZGIjujTB
ただのバ
0082デフォルトの名無しさん2016/02/11(木) 20:19:46.17ID:g2tgmyMx
いやキ
0083デフォルトの名無しさん2016/02/11(木) 22:32:37.77ID:h5Y5qyZF
いやケ
0084デフォルトの名無しさん2016/02/12(金) 22:34:57.40ID:Az+dNpcd
いやロー
0085デフォルトの名無しさん2016/02/13(土) 18:30:17.93ID:zeyk14CL
暗いと不平を言う前に進んで火を付けましょう。
0086デフォルトの名無しさん2016/02/13(土) 19:25:49.95ID:tYDOUXsU
ボワッ!

カジダー! ワー
0087デフォルトの名無しさん2016/02/13(土) 19:50:06.18ID:/Hz5ypwN
そして胡乱な方向へ(言ってみたかっただけ
0088デフォルトの名無しさん2016/02/14(日) 12:00:16.26ID:iEUC0Mwt
不平には問題提起の意味があります
問題提起する前に解決しましょうって言われたらどう思いますか
0089デフォルトの名無しさん2016/02/14(日) 12:50:37.93ID:T34rz49+
>>88
だったら、本人たちには適切に問題提起をする能力がないのだから、
あんたが代わりに翻訳して、普通の人に分かるように問題提起してくれよ。

でなきゃ、ただのノイズとして見逃される。
0090デフォルトの名無しさん2016/02/14(日) 13:37:03.55ID:iEUC0Mwt
>>89
それを誰に言いたいですか
言いたい相手はもう見つかっていますね
見逃されるというのは嘘ですね
0091デフォルトの名無しさん2016/02/14(日) 13:46:14.55ID:vmByG/Xl
そしてうどんな昼食へ
0092デフォルトの名無しさん2016/02/14(日) 15:13:51.42ID:cqB0Nh3J
そうか。
0093デフォルトの名無しさん2016/02/14(日) 15:22:10.99ID:cCh+B9qI
糖質さんに付きまとわれてるHaskellかわいそう
0094デフォルトの名無しさん2016/02/14(日) 16:04:41.95ID:XEWxVYXa
2ちゃんはオワコンだとしてお前ら普段どこでHaskellの話してるの
0095デフォルトの名無しさん2016/02/14(日) 16:06:28.06ID:XEWxVYXa
英語でいいとこ教えて
0096デフォルトの名無しさん2016/02/14(日) 17:35:47.39ID:cqB0Nh3J
Google+
0097デフォルトの名無しさん2016/02/14(日) 22:21:56.57ID:zI7ECB9O
data Hoge = Hoge {
a :: {
b :: Int
}
}
こんな感じで宣言する方法はないのでしょうか?
用途はネストしたJSONへの変換です。
0098デフォルトの名無しさん2016/02/16(火) 22:19:56.49ID:sJ0P3nVA
data A t = A {a :: t}
data B t = B {b :: t}
data Hoge = Hoge {
hoge :: A (
B Int
)
}
0099デフォルトの名無しさん2016/02/17(水) 03:41:21.57ID:1UNcQaMi
誰かが坂道発進は難しいと言うと苦手意識が形成され苦手になってしまう
誰かがS字・クランクは難しいと言うと苦手意識が形成され苦手になってしまう
誰かがポインタは難しいというと苦手意識が形成され苦手になってしまう
誰かがモナドは難しいというと苦手意識が形成され苦手になってしまう
0100972016/02/17(水) 10:06:32.54ID:quIHvTl+
>>98
別で定義してあげる必要があるんですね。
ありがとうございます。
0101デフォルトの名無しさん2016/02/17(水) 10:47:00.22ID:N32mDm+m
モナドって名前を意識する前から色々知ってた奴らは
九合目辺りまで無意識というか意識低いから簡単なんだよ
0102デフォルトの名無しさん2016/02/17(水) 14:43:49.52ID:xZS1HXec
九割知っても目標に届かなければ何も知らないのと同じとかいって
ゴールしか見ないからスタートラインを弄ることを思いつかない
0103デフォルトの名無しさん2016/02/17(水) 16:37:41.55ID:+oxsYRhZ
胡乱トーク
0104デフォルトの名無しさん2016/02/17(水) 20:02:43.23ID:qMJfKGhR
f :: Int -> String
定義域 Int の元と終域 String の元とを対応づける関数

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

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

では、

h :: String
定義域は空集合と考えても問題ないだろうか。
0105デフォルトの名無しさん2016/02/17(水) 20:04:22.89ID:qMJfKGhR
>>99
訂正

g :: Int -> Int -> [Int]
定義域 Int の元と終域 Int -> [Int] の元とを対応づける関数
0106デフォルトの名無しさん2016/02/17(水) 21:43:32.27ID:qMJfKGhR
いや、定義域が空集合だなんて馬鹿げたことがあるわけがない。

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

みんなのおかげで自己解決できた。
ありがとう、感謝する。
0107デフォルトの名無しさん2016/02/17(水) 22:00:25.26ID:/+olwn0P
よし、今日も布教活動頑張るぞ!
0108デフォルトの名無しさん2016/02/18(木) 00:15:24.71ID:NoBWmHQb
なぜ定義域が欲しいのか、胡乱だ
それがわからないとKleisliやArrowも胡乱になる
0109デフォルトの名無しさん2016/02/19(金) 22:07:21.69ID:LvuG0cXK
よし、今日も布教活動頑張るぞ!
0110デフォルトの名無しさん2016/02/20(土) 20:10:48.47ID:hxPxeUMY
布教活動がんばるぞい!
0111デフォルトの名無しさん2016/02/20(土) 20:45:29.97ID:pvUNCsFm
布教したら逆布教されて、今ではすっかりJavaScripterです。
0112デフォルトの名無しさん2016/02/20(土) 21:02:23.09ID:kXmEjnOB
haskellは原理主義すぎてelixirに逃げ出しました。
0113デフォルトの名無しさん2016/02/20(土) 21:17:04.18ID:Xi17WzDF
よし、今日も布教活動頑張るぞ!
0114デフォルトの名無しさん2016/02/20(土) 21:50:09.69ID:JIrwRLWR
Haskell と JavaScript と Erlang は競合しないと思う
どれかを使うと別のモノを使わなくなるという仕事をしてる人は、どれをやらなくても困らないからプログラミングやめればいいとおもう
0115デフォルトの名無しさん2016/02/20(土) 22:06:23.94ID:5dzdENdK
>>114
JavaScriptは応用範囲はHaskellと競合はしないけど、こんなクソ言語が書けるかぁっ!
となってマトモなaltJSを探しに旅立ってしまうのでわりとHaskellと排他的な気がする

HaskellからElixirに逃げ出したと称する>>112がまったく意味不明なのはその通り
0116デフォルトの名無しさん2016/02/20(土) 22:59:49.53ID:WjN+AF9T
確かにクソ言語なんだが、慣れてくるとこれでいいやと思えてくる
それがjs
0117デフォルトの名無しさん2016/02/20(土) 23:57:13.09ID:Xi17WzDF
神々の言語と糞言語を比べるのが間違い。
0118デフォルトの名無しさん2016/02/20(土) 23:58:28.64ID:Xi17WzDF
>>114
それは素人考え。
Haskellさえあれば他は要らない。
玄人ならこう考える。
0119デフォルトの名無しさん2016/02/21(日) 00:36:20.13ID:60OzU5Vm
https://github.com/i-tu/Hasklig
haskell使ってる人はfontもこだわりが?
0120デフォルトの名無しさん2016/02/21(日) 01:20:54.41ID:UfOP8/7O
Hasklig いいよね
0121デフォルトの名無しさん2016/02/21(日) 03:44:54.50ID:Ppx8wqFy
たまにこういうのが来るから、スレから離れられない
0122デフォルトの名無しさん2016/02/21(日) 16:03:45.58ID:nQxbvp7F
たのしい
0123デフォルトの名無しさん2016/02/23(火) 22:59:37.57ID:IWj7+wz0
すみません質問なのですが、文献で
[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してまた再帰呼出など
初心者の自分には仕組みが今一つ掴めないです。
もっと簡単に理解できて同様の事ができる関数は
ありえますでしょうか?
0124デフォルトの名無しさん2016/02/24(水) 01:18:41.86ID:eE6/28/I
>>123
これでどうでしょう

(\y -> map (\x -> take x y ) [1..(length y)]) [0,1,2,3]
0125デフォルトの名無しさん2016/02/24(水) 01:37:17.19ID:b4ze5Byr
>>124
ありがとうございます。
試してみます。
0126デフォルトの名無しさん2016/02/24(水) 02:03:00.26ID:TK8B6JFM
>>123

fn :: [a] -> [[a]]
fn xs = scanl1 (++) $ map cons xs
where cons x = [x]
0127デフォルトの名無しさん2016/02/24(水) 02:04:52.29ID:+WgOrOxz
>>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行めになる。
0128デフォルトの名無しさん2016/02/24(水) 02:15:22.42ID:+WgOrOxz
>>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] ]

を得ている。それを一般的に書いただけ。
0129デフォルトの名無しさん2016/02/24(水) 04:35:56.62ID:dFLtbL+c
import Data.List (inits)

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

[[0],[0,1],[0,1,2],[0,1,2,3]]
0130デフォルトの名無しさん2016/02/24(水) 09:33:53.57ID:6CE9DY8K
やった! Emacs でも Haskligできた!
http://lpaste.net/153250
01311232016/02/24(水) 21:51:07.63ID:b4ze5Byr
>>124
>>126
>>127
>>128
>>129
どうもありがとうございます。
学習の参考にさせて頂きます。
0132デフォルトの名無しさん2016/02/25(木) 16:51:57.95ID:Tf/tuDHy
>>94 亀だけど英語でいいなら irc (freenode #haskell) は結構盛んみたいですよ
0133デフォルトの名無しさん2016/02/26(金) 03:11:34.56ID:xtcDhLHf
>>132
ありがとうございます
0134デフォルトの名無しさん2016/02/28(日) 14:49:27.01ID:VpGcPiMB
ghciでputStrLn
0135デフォルトの名無しさん2016/02/28(日) 15:08:47.78ID:VpGcPiMB
上の書き込み失礼。2chに文字列リテラル打てなくなったのですかね
codepad.org/K6saiwGy
parsecで日本語文字列を出力したいのですがコードを実行すると
index \12411\12370\12405\12364
のように数値で日本語文字列が出力されてしまいます
これはどういう風にすればうまくいくのでしょうか
グーグルと格闘していますがなかなか解決できません
0136デフォルトの名無しさん2016/02/28(日) 21:42:18.79ID:wqm/iHx2
>>135
show val の show を削除する

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

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



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

は違うということ
0137デフォルトの名無しさん2016/02/29(月) 20:32:33.21ID:KkDNedMO
esqueleto の groupBy 関数について質問です。

persist で Day 型のカラムを作ったのですが、
esqueleto の groupBy 関数を使って月ごとにグループ分けすることは可能でしょぅか。
単純に groupBy に Day 型のカラムを渡すと日ごとにグループ分けされてしまいます。
0138デフォルトの名無しさん2016/02/29(月) 23:26:11.62ID:q7VWC7Ji
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
0139デフォルトの名無しさん2016/02/29(月) 23:28:09.56ID:q7VWC7Ji
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)) } }

このような場合どのように書くのが適切なのでしょうか?
よろしくお願いします。
0140デフォルトの名無しさん2016/02/29(月) 23:28:12.35ID:q7VWC7Ji
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)) } }

このような場合どのように書くのが適切なのでしょうか?
よろしくお願いします。
0141デフォルトの名無しさん2016/03/01(火) 12:55:17.23ID:HGgkTTuu
>>136 ありがとうございました!これで先に進めます
0142デフォルトの名無しさん2016/03/03(木) 13:06:37.65ID:b3dAQAyk
>>69
Monadが理解できないってのは健全で冷静な感覚だ。
単なる型構成子の一つなのになぜあんなに誇大宣伝されるのかというのが理解できないんだろう。
Monadってそんなに大したものじゃないので、Functorと同じくらいに分かるんならそれで正しいよ
0143デフォルトの名無しさん2016/03/03(木) 20:02:18.60ID:4mtdR8td
いやいや、モナドは第三次産業革命とすら言われる大発明ですよ。
そんな軽々しく語れるものじゃない。
0144デフォルトの名無しさん2016/03/03(木) 21:05:52.96ID:hbEIqzuI
>>142
Haskellの重要な型は a -> b と IO a なんだけど
こいつらデータコンストラクタを宣伝できないから
型コンストラクタを誇大宣伝するしかない
0145デフォルトの名無しさん2016/03/03(木) 21:45:05.55ID:b3dAQAyk
>>143
誇大広告の域を超えてるな
君も詐欺に引っかかるタイプだな。早く目を覚ませ
0146デフォルトの名無しさん2016/03/04(金) 00:47:47.59ID:O42fAfhp
ネタにマジレス?
0147デフォルトの名無しさん2016/03/04(金) 08:26:12.96ID:/J2AWB0A
革命の大半は失敗に終わる
0148デフォルトの名無しさん2016/03/04(金) 18:01:54.91ID:8KmO5X/u
そいつネタじゃなくて例のゴミだから
0149デフォルトの名無しさん2016/03/04(金) 21:13:29.44ID:3Y+HzM1E
論文の量産という意味では成功した
0150デフォルトの名無しさん2016/03/04(金) 22:28:27.23ID:Rii2sRuh
ポインタのポインタが理解できないって言ってた頃からずっと静的型付け革命
0151デフォルトの名無しさん2016/03/06(日) 13:15:40.94ID:tSjFkCSl
EmacsでコーディングよりもパワポでUMLとか量産したいから型が必要なんよ
0152デフォルトの名無しさん2016/03/07(月) 15:47:57.10ID:qBrIq/RY
yesod使ってみようかと思ったんだけど導入で躓く
0153デフォルトの名無しさん2016/03/07(月) 18:16:32.36ID:uqmql4P/
いまどきはstackがあるのに、それでもYesodの導入からダメってのは珍しい
0154デフォルトの名無しさん2016/03/11(金) 22:48:50.97ID:lf/FOxiD
>>152
導入というのがインストールではなくプログラミングのことなら、
書籍「Developing Web Applications With Haskell and Yesod」がおすすめ。

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

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

(今となっては一部内容が古いかも。MozillaのBrowserIDの例があったり)
0155デフォルトの名無しさん2016/03/11(金) 23:14:09.63ID:3/HLXc0f
Persistentでモデルごとにファイルを分けたいのですが、どのように書けばいいのでしょうか?
01561522016/03/16(水) 19:43:32.46ID:5Au1FueU
>>154
遅レス(´・ω・)スマソですが、ありがとうございます

その本英語でちょっと古いという話があるから、
どうしようか迷ってたけどやってみますかね
0157デフォルトの名無しさん2016/03/17(木) 23:13:15.15ID:Opt/41wo
すごハスで:での畳み込みを覚えたでござる
1:2:[]と[1,2]が一緒で構文糖衣というてな
0158デフォルトの名無しさん2016/03/18(金) 05:09:50.52ID:bw5Y7I/7
CPS書換のドリル下さい!
0159デフォルトの名無しさん2016/03/18(金) 16:35:22.98ID:SKNZeuAp
レベルを上げて米田で殴ればいい
0160デフォルトの名無しさん2016/03/19(土) 17:34:27.78ID:W8OFmztn
なぁ発音記号的にハスケルじゃなくてヘスケルじゃね?

https://en.wikipedia.org/wiki/Haskell_%28programming_language%29
0161デフォルトの名無しさん2016/03/19(土) 17:47:08.94ID:SYQTFOu+
はすこぅ
0162デフォルトの名無しさん2016/03/19(土) 17:49:00.51ID:EuGwJiBL
マイコー
0163デフォルトの名無しさん2016/03/19(土) 18:00:05.02ID:2lKXEDYi
なんだいたのかよお前らー
0164デフォルトの名無しさん2016/03/20(日) 00:11:31.81ID:wXobkPts
諸君、議論したまえ。
0165デフォルトの名無しさん2016/03/20(日) 00:31:55.66ID:GdGOCP5U
今これ勉強してるんだけどさぁ堅すぎて実用に向くか不安になってきたんだけどどうなのよ
遺伝的アルゴリズムや正規表現とのテキスト処理しようかと思ってるんだけども
0166デフォルトの名無しさん2016/03/20(日) 00:46:35.50ID:75/94Ydr
>堅すぎて実用に向くか不安に

「堅すぎて」の意味もよくわからんが、
それが「実用に向くか」となんの関係があるんだ
0167デフォルトの名無しさん2016/03/20(日) 01:06:04.26ID:GdGOCP5U
>>166
今の所cでcgiを書くかのような凡雑さやくどさを感じてる
リストや配列処理はp系言語より上とは思ったけどその他は面倒そうな印象
ファイル入出力と正規表現でささっと色々出来たら文句ないんだが慣れの問題かね??
0168デフォルトの名無しさん2016/03/20(日) 01:24:57.01ID:lpAAOCss
その位の用途ならどの言語選んでも一緒な気がするが
0169デフォルトの名無しさん2016/03/20(日) 02:03:43.11ID:RTTkGWUK
シェルスクリプトで良さそう
0170デフォルトの名無しさん2016/03/20(日) 02:19:41.31ID:GdGOCP5U
>>168,169
まあそう言うな趣味だから用途は理屈付けだからあんま意味ないわ
最低限事が出来るならそれていいべ

今ちなみに今はすごハス読みながらガードを覚えた所
0171デフォルトの名無しさん2016/03/20(日) 03:49:21.37ID:Q2v2u5ZM
Haskellの文字列は型が色々あって最初は戸惑うよな、正規表現ならpcre-heavyとかおすすめ
0172デフォルトの名無しさん2016/03/20(日) 05:16:25.92ID:2OeezbvB
>>167
ほんとにちょっとした文字列処理なら正規表現でもいいけど
ある程度の規模ならパーサコンビネータ(Parsecとか)覚えると
可読性やメンテ性、あとHaskell使いこなしてる感が上がって楽しい
ファイルの読み書きはとりあえずwithFile関数覚えておけばいいんじゃないですかね
0173デフォルトの名無しさん2016/03/20(日) 06:28:19.33ID:yN6fzEfa
ORMとトランザクション併用できたり、Webも楽なのに
なぜか使いにくい印象持たれてるのはあるな

ただ慣れないと細かい事に文句言いまくるクソ言語にしか見えないのも確かだ
一定以上慣れてやっと、エンバグの減少と共に恩恵の効き目が見えて来る
0174デフォルトの名無しさん2016/03/20(日) 06:54:21.91ID:75/94Ydr
>ファイル入出力と正規表現でささっと色々出来たら
> 今の所cでcgiを書くかのような凡雑さやくどさを感じてる

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

…つうか「凡雑さ」ってなに??
0175デフォルトの名無しさん2016/03/20(日) 06:57:00.83ID:75/94Ydr
「煩雑 はんざつ」を「ぼんざつ」と読み間違えていて、当然変換できないので
「ぼん」が「凡」になったのかな(実用向きの推理)
0176デフォルトの名無しさん2016/03/20(日) 08:50:29.01ID:b1lneXII
型なんて書きたくねーよ
ってことでしょ
0177デフォルトの名無しさん2016/03/20(日) 10:12:07.36ID:QzGGeNAr
Perlで書いたコード
Haskellで書いたコード

それぞれ三ヶ月後に見なおして戦意を保てるのはどっち?
0178デフォルトの名無しさん2016/03/20(日) 10:40:39.85ID:yN6fzEfa
>>177
当然戦意ならPerlのが保てるだろう
矛先の向く先は別だが
0179デフォルトの名無しさん2016/03/20(日) 11:05:04.88ID:bCzJEDSh
矛先が自分の喉に向くくさい
0180デフォルトの名無しさん2016/03/20(日) 11:23:11.57ID:GdGOCP5U
>>174
>>177の様なこの辺の感覚がどうも分からんのよなぁ
自分cとperl出来ないけど多分cとperlはやったらやり易いか他と比べて"煩雑"か分かるとは思うんだがhaskellは分からないんだよな
0181デフォルトの名無しさん2016/03/20(日) 11:40:10.28ID:uW1sojJd
逆に記憶力は供給過剰で行動力が低いタイプもいると思うよ
普段はほとんど書かないくせにたまに珍しく書いたコードは忘れない
他人のコードも読んで覚えているので自分のコードを忘れても普通に読める
0182デフォルトの名無しさん2016/03/20(日) 13:41:30.29ID:XXr7OH0e
何それ羨ましい
0183デフォルトの名無しさん2016/03/20(日) 14:18:15.45ID:uW1sojJd
眼高手低という言葉を覚えたんだが使う機会がない
0184デフォルトの名無しさん2016/03/20(日) 19:23:53.48ID:F6EQ+GjV
haskellには2つ以上の引数を取る関数が無いので、部分適用は存在しませんか?
0185デフォルトの名無しさん2016/03/20(日) 19:49:59.20ID:yN6fzEfa
>>184
まず任意の引数を取れる
そしてカリー化も部分適用もできる、というかカリー化がデフォ
0186デフォルトの名無しさん2016/03/20(日) 21:11:55.58ID:uW1sojJd
>>184
関数 a -> b が2つ以上の引数を取る可能性≒リスト x : xs の長さが2以上になる可能性
0187デフォルトの名無しさん2016/03/20(日) 21:12:04.55ID:yCyuHG/E
>>184
カリー化されているからこそ部分適用が出来る気がするが
2つ以上の引数を同時に与えたければ、tupleなりuncurryを使えばよい
0188デフォルトの名無しさん2016/03/20(日) 21:24:27.87ID:RHLJPn4C
>>184
読んでる本にhaskellはデフォで入ってるmaxやらsuccやらの関数は実はカリー化、部分適応されてて全部引数は一つと書いてたけど
逆に一つでしか出来ないという意味だったことにお宅のレスを見て気付いたありがとう
0189デフォルトの名無しさん2016/03/20(日) 22:15:16.97ID:75/94Ydr
>>188
○「適用 application」
×「適応 adaptation」

この間違いがなんでこんなに蔓延ってるのか理解に苦しむ
0190デフォルトの名無しさん2016/03/20(日) 22:50:07.51ID:F6EQ+GjV
add1 = \x -> \y -> x + y
add2 x y = x + y
のとき、
(add1 1)も(add2 1)も部分適用ですか?
そもそもHaskellで引数の個数はどうやって決めるんでしょうか。
0191デフォルトの名無しさん2016/03/20(日) 23:00:39.89ID:GdGOCP5U
>>190
あら?haskellに引数の数自体なくて全てカリー化、2個目以降の引数は全て部分適用に回す
、て話じゃなかたの?
0192デフォルトの名無しさん2016/03/20(日) 23:17:31.21ID:uW1sojJd
C++風に書くと Function<A, B> が実体化し B が決まれば引数の個数が決まりそう
0193デフォルトの名無しさん2016/03/20(日) 23:52:47.28ID:75/94Ydr
>>190
add2のような関数定義はadd1のシンタクス・シュガー
そしてどちらでも引数の個数は常に1だ
add関数が「2引数」の関数だと言いたいときのような
普通の意味での「引数の個数」は、型の中に関数型構築子(->)が
何個あるかを数えれば(少なくとも直感的には)よい

部分適用(に見えるもの)の特殊例――第1引数に対する部分適用――が
カリー化されていることによって容易に記述できるという話であって、
部分適用の実現にカリー化を使う必要があるわけではないし、
第2引数(に見えるもの)に対する部分適用はカリー化とは関係がない
Haskellなら演算子に限っては(* 2)のように、第2引数(に見えるもの)に対する
部分適用の構文があるわけだけども
0194デフォルトの名無しさん2016/03/20(日) 23:53:27.24ID:rJQ1OYnP
Haskellの関数が取る引数の個数は一個だけだよ。
引数を一個取って、『引数一個取る関数』を返せば、それをさらにn-1回繰り返してn個の引数を取る関数を実現できるからね
0195デフォルトの名無しさん2016/03/21(月) 00:12:24.62ID:W47zDOKQ
その部分って拘って何か得することあるの?
0196デフォルトの名無しさん2016/03/21(月) 00:20:07.72ID:+Zc9mgUl
関数を一つの型に抽象化できる
0197デフォルトの名無しさん2016/03/21(月) 00:26:29.46ID:mEjk8CaC
カリー化の理屈がわかってる方がHaskellの文法を習得しやすいと思う
0198デフォルトの名無しさん2016/03/21(月) 02:09:27.30ID:mqJW4NLD
add 1が部分適用だという説明をよく見るけど、あってるの?
最初から1引数関数に1引数を渡しているようにしか見えないんだが
0199デフォルトの名無しさん2016/03/21(月) 02:10:12.72ID:W47zDOKQ
>>196
それってどの部分に応用できるの?

>>197
ただの部分適用だと思ってても文法は変わらなくない?
0200デフォルトの名無しさん2016/03/21(月) 08:13:00.45ID:Z1UuXowG
>>199
そこまで行くと最早言語仕様の話になるような。。
他の言語でいう連想配列あれば配列いらなくね的な
俺も初学者だけどhaskellは 文法しっかり覚えた方がいいぞx:xsとか構文糖衣で言い回しを変えてる所が沢山あってむしろお宅が悩んでる所はそこよ
0201デフォルトの名無しさん2016/03/21(月) 08:57:12.63ID:XJIk5Rbo
>>200
それは違う
「その部分」「どの部分」と言ってるからもっとピンポイントな答えが期待されてる
あの部分だな
0202デフォルトの名無しさん2016/03/21(月) 15:57:08.54ID:em5aFOqL
すごはす!
0203デフォルトの名無しさん2016/03/21(月) 15:59:40.77ID:em5aFOqL
なんか読み進めらんないからすっ飛ばしてモナドのとこから読んだら捗った
0204デフォルトの名無しさん2016/03/21(月) 21:30:37.79ID:W47zDOKQ
>>200
構文糖という意味じゃなくて、Coreを見ても変わらないから本当にわからないんだって
0205デフォルトの名無しさん2016/03/22(火) 00:33:33.60ID:oW40IkQf
\ x -> id id (\ y -> (x, y)) :: a -> b -> (a, b)
これは型を見るとarityが2だけど値を見るとarityが1のような気がする
0206デフォルトの名無しさん2016/03/22(火) 14:51:30.84ID:mpnhn3sE
>>199
関数を一つの型に抽象化できると、論文やテキストを書くときに楽
0207デフォルトの名無しさん2016/03/22(火) 19:21:14.33ID:oW40IkQf
でも一つの型にできなくても一つの型クラスにする手もあるから
型クラスがなかった古い言語を無視して、現在のHaskellが何の得になるかという議論は
砂上の楼閣っぽい
0208デフォルトの名無しさん2016/03/22(火) 20:34:04.20ID:mpnhn3sE
Haskell はプログラミング言語ではない
言語表現そのもの
Haskellに何の得もないという意見は、日本語じゃプログラミングできないという意見と同レベル
0209デフォルトの名無しさん2016/03/23(水) 22:02:39.24ID:r6iJqmyn
ghc8.0.1マダァ
0210デフォルトの名無しさん2016/03/24(木) 17:36:19.24ID:xXG4RPew
Mac の El Capitan でHaskellプラットフォームがインストールできなくなって、その後でインストールできるようにした人いますか?
0211デフォルトの名無しさん2016/03/24(木) 21:27:30.95ID:J6WmYFYy
意味がよくわからんが

brew install haskell-stack
stack setup

で何かいけない理由があるのか?
0212デフォルトの名無しさん2016/03/24(木) 22:50:37.70ID:gVM1g8dJ
haskell platformがオワコンなのを知らんのだろう
0213デフォルトの名無しさん2016/03/25(金) 22:14:17.18ID:2hwI0Ray
WindowsのHaskellプラットフォームで作ったコードを一切いじらずにMacでも使いたいので
0214デフォルトの名無しさん2016/03/25(金) 22:29:21.66ID:CJ0htTKH
Javaじゃあるまいし無理だろ
0215デフォルトの名無しさん2016/03/25(金) 22:35:31.85ID:2hwI0Ray
半年前に作ったコードなんかもう読めないんだけど、Macに移植するときとかみんなどうしてんの?
0216デフォルトの名無しさん2016/03/25(金) 22:43:56.48ID:CnirOUU5
? Haskell platformで吸収できるような環境依存なわけ?
0217デフォルトの名無しさん2016/03/25(金) 22:49:02.23ID:2hwI0Ray
>>216
brew でやるとライブラリが入ってないって言われてそのつど入れたりimport文を書き直すハメになる
オフラインのスタンドアロンで使ってるから非常に困る
0218デフォルトの名無しさん2016/03/25(金) 22:50:18.38ID:8xyGagLX
コード読みたくないってwin32パッケージ使ってたらアウトじゃないの?
0219デフォルトの名無しさん2016/03/26(土) 02:10:19.19ID:kRgMl8e0
>>217
だからなんでstack使わないの?
0220デフォルトの名無しさん2016/03/26(土) 06:11:36.95ID:xgz3RPza
宗教的な理由で
0221デフォルトの名無しさん2016/03/26(土) 10:52:26.15ID:7O7WN3J8
>>215
自分で作ったコードが読めないんじゃなくて自分で意図してない依存関係が読めないんだよな
0222デフォルトの名無しさん2016/03/27(日) 20:56:30.01ID:0fEHBexO
HaskellPlatform のバイナリダウンロードした後はWindowsで全部オフラインで作ったプログラムの移植
el capitan の前はHaskellPlatform だけで完結してたプログラムなので、誰かなんとかしてほしい
0223デフォルトの名無しさん2016/03/27(日) 21:15:53.61ID:qne5z7mn
Either に fmap を適用すると Right 側の値に適用されるが、
Left 側の値に関数を適用するものは標準ライブラリにある?

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

無ければ作るが、標準ライブラリにあるのなら、できるだけそれを使いたい。
0224デフォルトの名無しさん2016/03/27(日) 22:56:01.91ID:0Jfntbhy
標準では存在しない
0225デフォルトの名無しさん2016/03/27(日) 23:08:58.39ID:0rC/ofPw
>>222
詳しくはわからないが、El CapitanのセキュリティのしくみにHaskellPlatformが合わないらしい。
で、パッチを当てられたバージョンが配られてるっぽい。
http://stackoverflow.com/questions/32920452/how-to-run-haskell-on-osx-el-capitan
0226デフォルトの名無しさん2016/03/27(日) 23:14:31.09ID:0Jfntbhy
Haskellが動きが速くてしかもライブラリ間の依存度が高い言語なのは当面変わらんだろうから
きちんと追随してないコードが早々にobsoleteになるのは諦めるしかない
0227デフォルトの名無しさん2016/03/27(日) 23:14:35.18ID:0rC/ofPw
>>223,224
Bifunctorっていうのを見つけたよ
https://hackage.haskell.org/package/base-4.8.2.0/docs/Data-Bifunctor.html
0228デフォルトの名無しさん2016/03/27(日) 23:29:56.66ID:0Jfntbhy
>>227
あ、Base-4.8.0からBifunctor入ったんだ。知らなかった。
0229デフォルトの名無しさん2016/03/28(月) 00:40:49.84ID:nQ5EzqqT
instanceが不特定多数ならともかくEitherのためだけにclassを作るメリットは何だろう
0230デフォルトの名無しさん2016/03/28(月) 00:57:36.40ID:nJiPkWp9
こういうのはekmett製ライブラリとかでよく使うんだよ
0231デフォルトの名無しさん2016/03/28(月) 01:32:55.18ID:qcb2KDJp
OK, let's ekmettize it.
0232デフォルトの名無しさん2016/03/28(月) 21:14:55.91ID:Lm1cq8wv
ありがと
BiFunctorを使うよ
0233デフォルトの名無しさん2016/03/28(月) 21:40:11.75ID:iKsxfZek
メニーコアについて、第一人者のコメントです。耳糞かっぽじってどうぞ
https://ask.fm/tanakh184/answers/135945765779
0234デフォルトの名無しさん2016/03/28(月) 22:10:45.31ID:PPQPikPw
梯子を外された
0235デフォルトの名無しさん2016/03/28(月) 22:24:37.12ID:eoKtZ9pp
俺もそれ見て笑ったわ
0236デフォルトの名無しさん2016/03/28(月) 23:01:56.57ID:PPQPikPw
tanakhは最近Rustに熱い眼差しを向けているご様子
0237デフォルトの名無しさん2016/03/29(火) 07:10:25.38ID:YQCa1g4d
f *** g = arr (bimap f g)
f +++ g = arr (bimap f g)
0238デフォルトの名無しさん2016/03/29(火) 11:22:43.84ID:YQCa1g4d
ぐぬぬ

(arr f) *** (arr g) = arr (bimap f g)
(arr f) +++ (arr g) = arr (bimap f g)
0239デフォルトの名無しさん2016/03/29(火) 20:58:59.61ID:WTA2j3Vp
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]となることに感動した
0240デフォルトの名無しさん2016/03/30(水) 06:07:46.47ID:2BObmFiJ
>>233
この人のツイッターめっちゃツイートしすぎじゃね??無職なの?ボットなの?
0241デフォルトの名無しさん2016/03/30(水) 06:30:20.50ID:275vy7J8
お前が世間知らずなだけで有名人はだいたいこんなもんだ
0242デフォルトの名無しさん2016/03/30(水) 13:21:10.20ID:Spu236HU
ちょっと休憩してタバコ一服みたいな感覚でツイートする廃人がいっぱいおる
0243デフォルトの名無しさん2016/03/30(水) 14:14:52.38ID:qbKmn6Oy
>>240
スーパーエンジニア()やで。お前の持ってるHaskell本の翻訳を手がけてる可能性もあるで
0244デフォルトの名無しさん2016/04/01(金) 23:01:10.98ID:RonLnaIy
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")

言語感覚を掴むために文字列を?区切りの配列化とかやってんだけど
なんか上手くいかない。。後ろの方なんかどうにかスマートに取れんかな?
0245デフォルトの名無しさん2016/04/01(金) 23:14:48.75ID:PV5EBc/W
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
0246デフォルトの名無しさん2016/04/02(土) 00:30:07.50ID:Ev1W2wgk
>>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で順番を直す)
0247デフォルトの名無しさん2016/04/02(土) 00:45:02.18ID:Ev1W2wgk
素朴な再帰ならこうだな

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

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

蓄積引数を使って末尾再帰にするか
こちらにするかはまあ好きにしたらいいと思う。
0248デフォルトの名無しさん2016/04/02(土) 01:38:17.07ID:Xzav67mJ
ぼくも末尾再帰書いてみたお!
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"
0249デフォルトの名無しさん2016/04/02(土) 02:08:57.45ID:Xzav67mJ
ごめんだお!ぼくのやつこれで死んでしまったお!

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

http://ideone.com/aKJZ7v
0250デフォルトの名無しさん2016/04/02(土) 03:52:31.86ID:c4u50AAG
うんこでサイクルとなると蜷局を連想してしまう
0251デフォルトの名無しさん2016/04/02(土) 10:40:52.55ID:HRtXuUOo
let {
p = (/='?');
t xs = takeWhile p xs;
d xs = drop 1 $ dropWhile p xs
} in map t $ takeWhile (not . null) $ iterate d
0252デフォルトの名無しさん2016/04/02(土) 10:44:33.90ID:HRtXuUOo
let {
p = (/='?');
t xs = takeWhile p xs;
d xs = drop 1 $ dropWhile p xs
} in \ str -> map t $ takeWhile (not . null) $ iterate d str
0253デフォルトの名無しさん2016/04/02(土) 14:20:52.45ID:Ev1W2wgk
>>249
無限リスト上で末尾再帰したらそりゃ戻ってこないよw
0254デフォルトの名無しさん2016/04/03(日) 00:11:50.27ID:YJ1NbmGD
末尾呼び出しはループじゃなくてgotoなんだよな
意味的には二重ループだがソースを見たら入れ子になってないパターンとかgotoに似てる
0255デフォルトの名無しさん2016/04/03(日) 00:35:09.88ID:I1bXI3bS
ghcとcabelがぶっ壊れてコードが書けない件
0256デフォルトの名無しさん2016/04/03(日) 00:47:31.60ID:Zu/8k3HN
そんなコンパイラ窓から投げ捨てろ
0257デフォルトの名無しさん2016/04/03(日) 01:58:17.79ID:enKsHibE
この期に及んでstack使わないやつの泣き言はきかん
0258デフォルトの名無しさん2016/04/03(日) 09:55:56.39ID:YJ1NbmGD
良いオープンソースは、プロの支えがなくなっても可読性が落ちない
0259デフォルトの名無しさん2016/04/03(日) 16:01:20.18ID:n4lb76fM
>>246
リバースだらけで中々読むのに時間がかかった、、++はいかんのか、、
0260デフォルトの名無しさん2016/04/03(日) 16:20:55.79ID:GDeNTkfE
>>249
よく分からないけど、splitQが正格か非正格かという問題と絡むのだろうか
0261デフォルトの名無しさん2016/04/03(日) 16:50:27.45ID:enKsHibE
>>259
再帰でリストの後ろに(++)するとO(n^2)かかるので
頭に(:)していって後でreverseするのが定跡
定跡なので慣れれば読みにくくもなくなる
0262デフォルトの名無しさん2016/04/03(日) 16:56:16.50ID:enKsHibE
>>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 する箇所をまとめたこれならもう少し読みやすいかな。
0263デフォルトの名無しさん2016/04/03(日) 17:04:47.01ID:enKsHibE
split = reverse . map reverse . split' [] ""
split' acc buff "" = buff:acc

の方がいいかもしれん。まあ殆ど趣味だと思うが。
0264デフォルトの名無しさん2016/04/03(日) 18:32:19.06ID:YJ1NbmGD
>>261
もし要素が1個増えるたびにバッファ全体をコピーしたらO(n^2)になるが
それは配列でもリストでも同じだし、(++)だからといってO(n^2)とは限らないよ
0265デフォルトの名無しさん2016/04/03(日) 18:44:38.19ID:enKsHibE
>>264
リストの最後尾に要素を付け加える操作はリストを頭から尻まで走査しないとできないのでO(n)
コピーとかそういう問題ではない
0266デフォルトの名無しさん2016/04/03(日) 18:48:57.61ID:enKsHibE
プログラミング初心者ならともかく単連結リストの基本操作コスト知らんのはちょっとなあ……
0267デフォルトの名無しさん2016/04/03(日) 19:02:39.99ID:enKsHibE
以下の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)
0268デフォルトの名無しさん2016/04/03(日) 22:51:53.90ID:I1bXI3bS
>>266
プログラミング初心者というか関数型初心者じゃ
>>246を重点的に見てたんだが知らんことが多く246にその気はなかったんだろうが個人的にだいぶいい情報が詰まってたので感謝
再帰関数内で変数保持のような事をどうすればいいのかを特にわからんかったんだが
部分適応回避の二つの関数噛ませての引数保持やら、reverseの定石やら、地味に(reverse buff :acc)でbuffをaccの前に置いて何故またreverseでbuffを後ろにするんや?という勘違いやら色々ためになった
0269デフォルトの名無しさん2016/04/03(日) 22:53:32.65ID:I1bXI3bS
あらまた適用間違えたが
0270デフォルトの名無しさん2016/04/03(日) 23:01:07.60ID:YJ1NbmGD
>>267
foldrなら速い
一目瞭然とはいわないが、O(n^2)より速いケースもあるだろ

f n = foldr (++) [n] [ [k] | k<-[0..n-1] ]
0271デフォルトの名無しさん2016/04/04(月) 01:30:08.74ID:csEJBaCm
末尾再帰でどう書くかの話でfoldr持ち出すやつってw
0272デフォルトの名無しさん2016/04/04(月) 07:27:01.78ID:efe3FcRd
scanlやiterateが個性的すぎるから、foldlが定跡だみたいな話になってる
foldrもどちらかといえば個性的
0273デフォルトの名無しさん2016/04/05(火) 22:42:15.64ID:lFAuwsOe
Windowsでstack入れてghcインスコするとmsys2環境まで付いてくるのここまできたか感ある
0274デフォルトの名無しさん2016/04/05(火) 22:59:32.35ID:hSAjYG8r
foldr でリストの頭に連結してくならそりゃ速いだろ 空間は食うけどな
リストの末尾に連結するとO(n)でオーダーが無駄に上がる、
という肝心の点が理解できてないのかな
まあバッファのコピー云々を見るにそうなんだろうけど
0275デフォルトの名無しさん2016/04/06(水) 13:41:13.42ID:txEWT2Ww
こればっかりは型を書いてもさっぱりわからん
型に頼らなくてもコードが読めるような超能力でもない限り
0276デフォルトの名無しさん2016/04/06(水) 19:48:19.50ID:P/7KHel4
おたくらすごいな。++によるスピードダウンとか気にすらならんわ。なんか速度必要なこと書いてんの?
0277デフォルトの名無しさん2016/04/06(水) 20:34:59.42ID:1LxesQSA
長大なリスト構造使うくらいなら別のデータ構造使うだろ、という趣旨ならわかる
そうじゃないなら……
0278デフォルトの名無しさん2016/04/06(水) 21:04:05.87ID:eFJoLkWW
splitパッケージ使えばいいじゃんよお
なんでHaskellerっていうか関数型言語好きは手慰みコーディングが好きなのか
0279デフォルトの名無しさん2016/04/06(水) 21:15:01.86ID:1LxesQSA
しばらく前までのcabal hellをみりゃわかるだろ 依存増やしたくねえんだよ
0280デフォルトの名無しさん2016/04/06(水) 23:50:18.40ID:IHdtvNSs
低レベルプログラミングだってオーダーくらいは気にかけるのでは
0281デフォルトの名無しさん2016/04/06(水) 23:59:46.82ID:I6OThI1C
メニーコア時代にはHaskell一択になりますよ。
自動的に複数のコアを利用できますからね。
0282デフォルトの名無しさん2016/04/07(木) 00:11:48.58ID:WDm2021j
糞ザコプログラマはプロファイリングでボトルネックの特定ができない
0283デフォルトの名無しさん2016/04/07(木) 00:24:55.38ID:838jiYpM
畳み込み楽しいお
0284デフォルトの名無しさん2016/04/09(土) 04:33:25.45ID:dgqvoixn
stack exec yesod add-handlerを実行したら
no cabal file foundと出ました
0285デフォルトの名無しさん2016/04/09(土) 05:11:27.17ID:Vzzo5Ul2
圏論を習得するまでは、コーディングはおあずけだ
0286デフォルトの名無しさん2016/04/09(土) 07:03:57.46ID:1BFZNWV8
生涯封印フラグ
0287デフォルトの名無しさん2016/04/09(土) 14:30:16.21ID:b41tx2Rx
圏論の理解が無益だとは言わんが、そんな事より、ドメイン駆動設計を理解してから
Functional and Reactive Domain Modeling を読んだ方が
Haskell をはるかに役立たせる事ができる。
0288デフォルトの名無しさん2016/04/09(土) 19:27:52.11ID:UzLa1aNi
ほー
0289デフォルトの名無しさん2016/04/09(土) 19:49:05.10ID:w7hE6ybz
仕事でhaskell使いはるんですか?
0290デフォルトの名無しさん2016/04/09(土) 20:44:53.14ID:+YXoN4jI
合成した射も、Hom集合に含めていいのですか?
0291デフォルトの名無しさん2016/04/09(土) 21:52:21.35ID:2MBZRcp4
>>290
合成した射がHom集合に含まれるというのが圏の定義
0292デフォルトの名無しさん2016/04/09(土) 22:04:03.25ID:+YXoN4jI
>>291
そうだったんですか!
ありがとうございます。
0293デフォルトの名無しさん2016/04/09(土) 23:51:04.93ID:e0N/R4cH
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分ほど考えて納得して満足してたのにやたらハイレベルなお話をしていますなぁ
0294デフォルトの名無しさん2016/04/10(日) 01:23:55.70ID:e/CI/bNW
そりゃ型があってなきゃ通らんよ
0295デフォルトの名無しさん2016/04/10(日) 01:24:54.71ID:e/CI/bNW
CAてなんだと思ったが、もしかして comment out の綴り間違えてんのかな
0296デフォルトの名無しさん2016/04/10(日) 02:19:12.14ID:h8a8i3Ei
>>294
型というかリストの取り扱い方間違えてたな。あ、これじゃ構文糖衣ならんわ的な
いや型があってないは間違ってはないんだが
0297デフォルトの名無しさん2016/04/10(日) 04:13:19.01ID:e/CI/bNW
(:) と (++) の型の違いを理解してなかったんだろ
構文糖衣ならんわ的? 意味不明にも程があるな

concat . reverse

で済む程度の関数をわざわざ定義する意味もわからん
0298デフォルトの名無しさん2016/04/10(日) 05:59:18.14ID:jyVvoqyQ
車輪の再発明はするな
既にある車輪を手際良く組合せる能力を育てろ
目的の機能は、要するに既知の有名関数のこれこれこれの組み合わせに過ぎないと気づく能力を育てろ
0299デフォルトの名無しさん2016/04/10(日) 06:02:28.00ID:HOcPU6mM
フルスクラッチが好きなんです
0300デフォルトの名無しさん2016/04/10(日) 08:20:12.80ID:FcOwY46H
>>293
ローレベルすぎる
中学生か
0301デフォルトの名無しさん2016/04/10(日) 09:17:57.02ID:YvXo8qRd
concat . reverse
これはつまり代名詞とか定冠詞とかそういうのを使うなって意味か
0302デフォルトの名無しさん2016/04/10(日) 10:50:50.90ID:h8a8i3Ei
すごハスだけ読みながら初学者として勉強してんだがなぁすごハスは実用的な部分弱いんよ
今6章やけどずっとプロンプト内で車輪の再発明コードコンパイルしてるわ
流石に少し飛ばしてsystemIOやmain doやった
0303デフォルトの名無しさん2016/04/10(日) 11:16:53.68ID:e/CI/bNW
実用的なコードなんか書いたこともない中学生がなんで実用性とか気にしてんのw
0304デフォルトの名無しさん2016/04/10(日) 12:08:24.49ID:f+MX8G/w
あなたのような童貞でもテクニックに興味があるかと。
同じですよ。
0305デフォルトの名無しさん2016/04/10(日) 12:25:10.81ID:YvXo8qRd
ものを作らなくても、再発明するなとか言うだけでも実用性はあるんじゃないの
有害または無益なものを批判するだけでもいいじゃん
0306デフォルトの名無しさん2016/04/10(日) 12:36:41.11ID:2Sp/+uDX
その文章じゃ何言ってるのかわからんのでもう一度お願い
0307デフォルトの名無しさん2016/04/10(日) 12:42:53.76ID:YvXo8qRd
どこがどうわからないのかを説明する義務もあるよ
説明を要求する権利に甘えるな
0308デフォルトの名無しさん2016/04/10(日) 13:04:01.30ID:2Sp/+uDX
何に対しての実用性の話をしているの?
てっきりソースやソフトの実用性の話だと思っていたけど
あなたの文章では本(もしくはここの人たち?)に対する実用性の話をしだしているように読めるんだけどあってる?
しかも本はすごハスについての話題だとおもったけどすごハスは最発明するなとも言ってないんだけど
どの本に対しての話なのかも読み取れないんだけど
結局何を言いたかったの?
0309デフォルトの名無しさん2016/04/10(日) 13:32:57.85ID:YvXo8qRd
なるほど
しかし、ソースやソフトに限定すればするほど理論的になっていく
限定がない方が実践的だし、実用的だと思う
0310デフォルトの名無しさん2016/04/10(日) 13:48:44.45ID:2Sp/+uDX
元の話題でもないし回答でもないし内容自体もおかしいし大丈夫か
0311デフォルトの名無しさん2016/04/10(日) 13:57:09.29ID:eD46Bq4L
そりゃ勉強では再発明不可避だろwww
自分で実践して何かを作る時にするなといってるだけwwww
0312デフォルトの名無しさん2016/04/10(日) 14:47:48.85ID:df5SYaAC
日曜出勤してるギスギスしたブラック社員と休日の優雅なサンデープログラマじゃ話は噛み合わないと思う
0313デフォルトの名無しさん2016/04/10(日) 16:14:53.48ID:FcOwY46H
>>310
これはあれだ、モスバーガーの食い方と同じやつだ
つまり相手にしてはいけない
0314デフォルトの名無しさん2016/04/10(日) 19:18:39.53ID:bGdugtOr
>>308
Haskellの実用先は論文の生産
0315デフォルトの名無しさん2016/04/10(日) 19:48:29.81ID:AP+c5oKN
ってそれ一番言われてるから。
0316デフォルトの名無しさん2016/04/11(月) 19:48:46.70ID:HssZkwMb
とりあえずHaskellはいいぞ
0317デフォルトの名無しさん2016/04/11(月) 22:03:36.45ID:lUP9Y6l3
haskelでl深さ優先探索は書けるんだけど
幅優先探索とか動的計画法の書き方が分からなくて競技プログラミング詰んだ
0318デフォルトの名無しさん2016/04/11(月) 22:16:23.13ID:edqlulhA
解候補のリストを作るときに : 演算子以外でリスト構築すればいいのではなかろうか
0319デフォルトの名無しさん2016/04/11(月) 23:09:22.53ID:ByxXtYTi
>>317
幅優先探索なら、Listじゃなくて双方向キュー Data.Seq を使えばいいよ
動的計画法はメモを引数で持ち回すとかいろいろ方法がある
0320デフォルトの名無しさん2016/04/12(火) 01:03:49.78ID:odne2N/q
ところで、動的型のメリットは汎用のデータ構造だよな
リストにもタプルにもなるデータ構造とか
それは静的型では不可能というか可能だとしても邪道
0321デフォルトの名無しさん2016/04/12(火) 09:58:04.72ID:+Rec4Xwk
ヘテロリストは邪道という程でもない
実行時型検査は邪道だけど(できないわけではない)
0322デフォルトの名無しさん2016/04/14(木) 23:58:19.51ID:C943vaja
stackでプロジェクトを作った時にできるappとsrcってどう使い分ければいいのでしょうか?
0323デフォルトの名無しさん2016/04/15(金) 22:39:56.48ID:04ZAKGz8
ノリ
0324デフォルトの名無しさん2016/04/16(土) 00:04:38.27ID:A75UJ+qB
メニーコア時代には、自動的に全てのコアを使ってくれるHaskell以外の言語は滅びる。
C/C++もJavaもPythonもすべて滅びる。
0325デフォルトの名無しさん2016/04/16(土) 04:43:02.11ID:P/Gx7cPV
そこのとこの実装をやさしく教えてあげて
0326デフォルトの名無しさん2016/04/16(土) 18:34:43.45ID:dotHc+RC
Haskell勉強中なのだが、サンクの評価はサンクの構造を変更するから排他処理しないといけないと思うのだが
マルチコアで処理しようと思ったら、そこがボトルネックになるという考えは正しい?
0327デフォルトの名無しさん2016/04/16(土) 20:30:49.09ID:eellksOQ
サンクでやりたいことは無限の計算をあわよくば有限で済ませることだよね
サンクの構造を変更するのに無限の時間がかかるとしても
そこと関係ない部分にとってはボトルネックにならないし
関係ある部分はシングルコアでもマルチコアでも無限に待たされる
0328デフォルトの名無しさん2016/04/17(日) 10:04:04.56ID:FqwYan/n
誰かが変更するまで無限に?待機するだけなら排他制御は関係ない気がする
待機じゃなくて自分で率先して変更しようとするから排他制御になる
0329デフォルトの名無しさん2016/04/17(日) 12:02:13.79ID:Rdn/TyF0
ST3のビルド設定が何故かwinでできなかったから桜でhs書くわもう
0330デフォルトの名無しさん2016/04/17(日) 15:43:08.41ID:5McqnKxO
サンクは、構造体の「計算済みならここに値を入れておく」という場所に値が入るだけだから、サンク自体の構造は変わらないと思う
03313262016/04/17(日) 19:43:10.30ID:+zMRWBTM
>>327,328,330
ありがとうございます
勉強になります
0332デフォルトの名無しさん2016/04/19(火) 22:48:22.42ID:GUcpde7h
8.0.1なかなかこないね
0333デフォルトの名無しさん2016/04/20(水) 09:21:38.53ID:dTPS4iPY
義エディタってどうなったの?
0334デフォルトの名無しさん2016/04/20(水) 09:39:35.46ID:io4dbaLH
>>333
半死のプロジェクト
エディタとしての使用感も凄え微妙
0335デフォルトの名無しさん2016/04/20(水) 20:10:33.75ID:Tnrtp5pD
st3のビルドに惹かれる
0336デフォルトの名無しさん2016/04/22(金) 19:58:59.40ID:/z9+X7Km
そうか?
Haskellで書かれているだけあって世界最高のエディタだと思うけど。
拡張性が高いし、使用感も最高。
滑るように筆が進む。
0337デフォルトの名無しさん2016/04/22(金) 20:02:19.82ID:/z9+X7Km
何よりHaskellで書かれているという事は、メニーコアマシンに自動的に対応しているという事。
1万コアのマシンを使えば自動的に1万倍の速さで書ける。
これは素晴らしいこと。
JavaやC++には真似できまい。
0338デフォルトの名無しさん2016/04/22(金) 21:05:33.41ID:F5OOvSJd
いくら機能性や汎用性が高くても、コミュニティが育つ要素が乏しいソフトは、
最初の一時に盛大に果実が実り、あとは閉じた世界の中でじわじわと腐っていく。
0339デフォルトの名無しさん2016/04/22(金) 21:25:46.68ID:7+eL8tO2
あ、判ったぞ、触っちゃいけない人だ!
0340デフォルトの名無しさん2016/04/22(金) 23:15:47.70ID:RfwjpRNt
コミュニティや人柄で判るのはデメリットやリスクのような悪い部分だけだな
良い部分は専門知識がないと判らない
0341デフォルトの名無しさん2016/04/22(金) 23:25:12.89ID:/z9+X7Km
バグが無いことも素晴らしい。
0342デフォルトの名無しさん2016/04/23(土) 00:22:37.98ID:h0nkzBbJ
初心者にとっては生兵法は大怪我の元だし
悪い部分ばかり見えるというのは理にかなっている
0343デフォルトの名無しさん2016/04/23(土) 09:30:09.85ID:JWq9tg2T
圏論の初歩的な勉強をしています。質問です。

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

Applicative (歴史的にはMonad) で、分けて導入する理由は、無いと思えるのですが。
0344デフォルトの名無しさん2016/04/23(土) 10:38:20.50ID:h0nkzBbJ
強制するクラスと強制しないクラスを合併したら強制しないクラスになる
吸収法則?
0345デフォルトの名無しさん2016/04/23(土) 10:45:20.92ID:zyr2RBeo
pureが意味を持つのは <*> と対になってからだから。
0346デフォルトの名無しさん2016/04/23(土) 13:39:22.09ID:g8SqXRs6
>>343
理由は簡単だ、pureを定義できないものがあるからだ。例えばConstとかだな。
0347デフォルトの名無しさん2016/04/23(土) 13:43:14.32ID:X//hQ6+3
今まで ghc を単体でインストールし、ライブラリも cabal でインストールしていました。

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

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

そこで質問です。

今この状況でStack を使って yeaod に必要な環境を作る場合、
ghc はアンインストールしておかないと問題が起きるでしょうか。
cabal でインストールされているライブラリは消しておかないとだめでしょうか。
0348デフォルトの名無しさん2016/04/23(土) 14:41:43.40ID:zyr2RBeo
>>346
Const は Applicativeのインスタンスだ
Control.Applicative のドキュメントを見よ
0349デフォルトの名無しさん2016/04/23(土) 14:58:41.70ID:g8SqXRs6
>>348
Monoid制約見えてないのか
0350デフォルトの名無しさん2016/04/23(土) 15:04:05.87ID:zyr2RBeo
そりゃpureに意味が無いからじゃなくてapに意味が無いから制約がついてるに過ぎん
0351デフォルトの名無しさん2016/04/23(土) 15:13:58.69ID:g8SqXRs6
>>350
中にMonoidのインスタンスが入ってる時しかfmapできなくなるんだけどいいの
0352デフォルトの名無しさん2016/04/23(土) 15:21:37.39ID:trNShuTT
>>347
たぶん問題ないよ。stack は特に指定しない限り stack がインストールしたghcやライブラリを使う。

このことを確認する方法。
まず、stack unpack yesod したのち、yesodのディレクトリに移り、
stack exec -- which ghc
して、stackが使うghc が .stack ディレクトリ以下の階層にあることを確かめる。
stack exec -- ghc-pkg list
で、使用されるライブラリが .stack ディレクトリや .stack-work ディレクトリの深くに入っていることを確認する。
0353デフォルトの名無しさん2016/04/23(土) 18:08:35.13ID:h0nkzBbJ
memptyはNothingに似てる
Maybeを使う理由は無いと思ってバリバリ書いてたら急にMaybeが来る感じ
0354デフォルトの名無しさん2016/04/23(土) 20:09:25.80ID:X//hQ6+3
>>352
ありがとうございます。

問題なく環境を構築できました。
0355デフォルトの名無しさん2016/04/24(日) 02:18:00.75ID:0A/NlO7U
ちょうど今stackでMapが無くてイライラしていた所だ
0356デフォルトの名無しさん2016/04/28(木) 19:35:13.20ID:myZYEKUT
tanakhはどこ勤めなの?
鶴キャピタルと思ってたらペジ一とかあってよく分からないんだけど。
あとPFI在籍時に心を壊したみたいな記事を見つけたけど、ここってブラック?
0357デフォルトの名無しさん2016/04/28(木) 19:44:58.09ID:myZYEKUT
あ、最近の記事見てなかった。鶴は半年で辞めたって事か……
0358デフォルトの名無しさん2016/04/29(金) 00:41:56.53ID:p88N57n4
優秀な人はほいほい転職できていいなあ
0359デフォルトの名無しさん2016/04/30(土) 00:47:21.17ID:v4IXAsZh
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

型ちがくね?
0360デフォルトの名無しさん2016/04/30(土) 10:31:52.74ID:N4gpQEz/
>>359
そりゃ違うでしょ、Maybe (a -> b)型のNothingとMaybe b型のNothingなんだから
0361デフォルトの名無しさん2016/04/30(土) 11:36:11.82ID:XDCplkAG
>>359
変数の型が違うならエラーにしないと危険じゃないかってことね
let n = Nothing in n == (n <*> undefined) -- True
これは変数じゃなくて無引数の多相関数だからエラーじゃない

ちなみにletではなくラムダで変数束縛すれば多相にならない
(\ n -> n == (n <*> undefined)) Nothing -- エラー
0362デフォルトの名無しさん2016/04/30(土) 17:17:20.69ID:v4IXAsZh
>>360
記述されているのは構築子だから別の値ってことか

>>361
let多相だね
0363デフォルトの名無しさん2016/04/30(土) 18:42:21.31ID:dTOuLsNg
Nothingにも型があったんだなぁ
あと、letによる束縛とラムダによる束縛は別物なのかぁ
為になったねぇ〜為になったよぉ〜
0364デフォルトの名無しさん2016/04/30(土) 22:03:49.66ID:kBh7fjCf
Groundhog のチュートリアルや解説は無いでしょうか。

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


ちなみに、今まで Persist を使っていました。
シンプルでかなり使いやすいライブラリでしたが、主キーが勝手に作られたりと融通が効かない所もあり、
その点 Groundhog はより細かく調整できると聞き、調べているところです。
0365デフォルトの名無しさん2016/05/01(日) 12:59:02.29ID:tKi6j9CT
匿名通信(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的に分散され、特定のサーバーに依存しません
0366デフォルトの名無しさん2016/05/01(日) 17:53:33.69ID:rVZalbzS
894にtanakhらしき人物を見つけた

https://code.google.com/codejam/contest/11254486/scoreboard?c=11254486#sp=871
0367デフォルトの名無しさん2016/05/01(日) 19:57:50.18ID:q399unAy
最近はじめた
コンパイルエラーがわかりにくい はたして慣れるのだろうか
0368デフォルトの名無しさん2016/05/01(日) 20:34:11.26ID:bRTHAwhW
C系に慣れてからの関数型はカルチャーショック大きい
嫌がらせかってくらいコンパイル通してくれなくて最初の頃は辛かった
しかし、走り出してエラー出すくらいなら初めから走れない方がマシなんだって学ぶんだ
0369デフォルトの名無しさん2016/05/01(日) 20:44:21.15ID:bRTHAwhW
有能な働き者 コンパイル通って正しく動かす
有能な怠け者 プロジェクトリーダー
無能な働き者 コンパイル通って実行時エラー
無能な怠け者 監査部門へ転属
0370デフォルトの名無しさん2016/05/01(日) 20:59:15.57ID:4Y0CumS/
監査部門へ転属したい
0371デフォルトの名無しさん2016/05/01(日) 21:13:48.81ID:uKoS1wpj
すごハスp148のYesNoクラスのIntだけ動かんな
Integerにしたらなぜか動いたけども
0372デフォルトの名無しさん2016/05/07(土) 19:59:15.34ID:M+qs63jq
3、4年前は、OSに依存せずに実行ファイルのパスを取得するには
system-argv0 パッケージに頼らざるを得ませんでしたが、
今はどうなのでしょう。

進化した標準ライブラリで事足りますか?
0373デフォルトの名無しさん2016/05/08(日) 11:02:25.93ID:/0/pzihM
依存関係を考えるのは変化を最小化するためだから
進化されると困る
OSの進化よりライブラリの進化の方が激しい場合にはライブラリを使う意味がわからん
0374デフォルトの名無しさん2016/05/08(日) 13:41:39.46ID:5VemuvB9
>>356
ハードウェアのPEZY?
どこに向かってるんでしょうか。
0375デフォルトの名無しさん2016/05/08(日) 15:25:17.03ID:ZUsvhrTO
haskell platform のライブラリですら場所がコロコロ変わってるし
0376デフォルトの名無しさん2016/05/13(金) 02:43:07.06ID:DqCdCrx3
エラーは書いた自分が悪いんだからな。
コンパイラは親切に教えてくれるだけ。
言語を呪う暇が有ったら精進せい。
0377デフォルトの名無しさん2016/05/13(金) 08:07:43.53ID:mEOqqcQ9
自分で精進しなくても他人に親切に教えてあげるだけでも良いですよ
むしろ自分で一行も書かない方がエラーしませんから
0378デフォルトの名無しさん2016/05/13(金) 22:06:50.78ID:1un4dmOW
もうすぐ自動プログラミングが完成するからそれまで我慢してほしい
0379デフォルトの名無しさん2016/05/14(土) 09:02:55.24ID:eR5KeWi+
したくないことを定義したいと思えた人はもう救われている
定義もしたくない人はまだ我慢している
0380デフォルトの名無しさん2016/05/14(土) 14:46:07.64ID:XgEAo3/V
コンパイル時よりも書いてる最中に誤りを教えてほしい
ペアプログラミングの相方がAIになった感じ
部分的には実現しつつあるが
0381デフォルトの名無しさん2016/05/15(日) 08:20:24.57ID:XkJuevwc
>>380
IDEで出来てない?
誤りが仕様書と違うとかだと無理だけど(´・ω・`)
0382デフォルトの名無しさん2016/05/15(日) 08:57:05.17ID:1apbfDjR
これ合法だろって言おうとしたら即座に違法ですよって教えてくれるAI
0383デフォルトの名無しさん2016/05/16(月) 21:47:15.21ID:CaYDtDLn
エラーは心の弱さなんですよ。
信じる強い心が有れば、それは最早エラーではないのです。
0384デフォルトの名無しさん2016/05/17(火) 00:24:35.05ID:dHn9rgtk
工学にオカルトを持ち込むな
0385デフォルトの名無しさん2016/05/17(火) 13:41:31.57ID:hwMqt89i
オカルテック
0386デフォルトの名無しさん2016/05/18(水) 13:07:37.77ID:umgMkwtM
人の書いたライブラリ使っている時点でオカルトを認めていることになる
0387デフォルトの名無しさん2016/05/18(水) 17:36:22.26ID:gNA+uVOn
そんな事言ったら因果律が永続する保証も無いですし
0388デフォルトの名無しさん2016/05/18(水) 21:22:36.67ID:yDy1hpmH
納品前後のバグに対して >>383 を言うのはよく聞く
0389デフォルトの名無しさん2016/05/19(木) 04:46:05.22ID:4D1NuyNI
Haskellで納品とかいう単語出てくる仕事してる人がいると思ってなかった
0390デフォルトの名無しさん2016/05/19(木) 08:10:39.63ID:wMatBPK5
Haskell でとは言ってない
0391デフォルトの名無しさん2016/05/19(木) 08:32:15.82ID:UIEjFqFy
掛持ちという発想がなかった原因はなにかね
正規分布のように中心が一つしかないという保証がなくなるからか
0392デフォルトの名無しさん2016/05/20(金) 07:04:01.60ID:SR6Xc90A
信じたかった
0393デフォルトの名無しさん2016/05/20(金) 22:38:42.77ID:1aQ4wkxX
>>389
Haskellのプログラムを大学の研究室に納品したことがある
0394デフォルトの名無しさん2016/05/21(土) 02:33:23.73ID:DrfWRUfn
理系の研究者ならプログラミングくらい自力でしろよ
0395デフォルトの名無しさん2016/05/21(土) 16:49:35.06ID:l1JVtE5I
プログラムはコンピュータとの言語コミュニケーション行為だから文系だと思う
0396デフォルトの名無しさん2016/05/21(土) 18:16:48.53ID:/Psi2UIt
形式科学
https://ja.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E7%A7%91%E5%AD%A6
だね
0397デフォルトの名無しさん2016/05/22(日) 05:31:08.64ID:ZAJLrv7i
もし文系だとしても食わず嫌いはよくない
闇米を食べないと生きのこれないなら食べればいい
0398デフォルトの名無しさん2016/05/22(日) 09:41:44.24ID:0H/7GBCM
GHC 8.0.1 リリース来たーーー
http://downloads.haskell.org/~ghc/8.0.1/docs/html/users_guide/8.0.1-notes.html
0399デフォルトの名無しさん2016/05/22(日) 18:33:10.38ID:wU59/EOp
誰か早くAndroid用Haskell開発環境出して
ソースコードはVimtouchで書くからコンパイル環境だけでいいよ
0400デフォルトの名無しさん2016/05/22(日) 18:33:54.43ID:wU59/EOp
User-defined error messages for type errors
ぼくのかんがえたさいきょうのエラーメッセージ出せるの?
0401デフォルトの名無しさん2016/05/23(月) 17:33:33.01ID:2tbsk8rj
http://kenokabe-techwriting.blogspot.jp/2016/05/c.html

C言語は純粋関数型言語ってまじなの?
0402デフォルトの名無しさん2016/05/23(月) 19:57:19.74ID:eO7rd+do
kenokabeが言ってるんだから正しいだろ
0403デフォルトの名無しさん2016/05/23(月) 20:04:56.94ID:rPmJbVu7
C言語という名前があるのにもう一個名前をつけたくなる理由は
主語を大きくしたいからだよな
C言語というと主語が小さいから
0404デフォルトの名無しさん2016/05/23(月) 21:56:35.23ID:1ZOe0erL
手続き型言語だと思います
0405デフォルトの名無しさん2016/05/23(月) 22:36:53.71ID:rPmJbVu7
手続き型言語はオワコンというのはまあわかるんだけど
C言語は手続き型言語である、ゆえにC言語はオワコンといわれると何か違和感がある
0406デフォルトの名無しさん2016/05/24(火) 00:05:33.36ID:9rXEqh5f
linuxはこれからもCで書かれ続けるだろうしな
十年後にRustになってたら面白いのだが
0407デフォルトの名無しさん2016/05/24(火) 15:51:07.35ID:4otCrHFU
Rustの余命はあと2、3年でしょ、Mozillaと同時に死ぬ
その後またRustっぽいのが出て潰れてを繰り返して当分C(++)は安泰
0408デフォルトの名無しさん2016/05/24(火) 16:52:41.22ID:RDPSz39C
C++は無くなるでしょ。
0409デフォルトの名無しさん2016/05/24(火) 17:06:38.26ID:EVeDeqwX
Imagine there's no C++
0410デフォルトの名無しさん2016/05/24(火) 17:30:07.50ID:RDPSz39C
メニーコア時代にはHaskell以外全部無くなるから。
0411デフォルトの名無しさん2016/05/24(火) 18:50:13.74ID:jjx2hd2q
>>405
手続き型がオワコンと言うのは願望に過ぎんのじゃないか?
だから違和感がある。
0412デフォルトの名無しさん2016/05/24(火) 19:19:21.98ID:EVeDeqwX
悪い願望はない
みんな良い願望
0413デフォルトの名無しさん2016/05/24(火) 22:44:06.20ID:G9TLp4kO
Cある限りC++は滅びぬ
あとObjCも
0414デフォルトの名無しさん2016/05/24(火) 23:50:13.91ID:80vE3gqA
Cは真っ先にHaskellに取って代わられるだろね。
0415デフォルトの名無しさん2016/05/25(水) 22:15:27.02ID:5tekMzBC
parsec
parsec1
parsec2
parsec3

同じ様な名前のパッケージがこんなにもあるのは何なの?
parsec3 が最強だが暴れ馬で素人には扱いづらい、みたいな?
0416デフォルトの名無しさん2016/05/26(木) 07:32:42.33ID:F8ZCE4kg
どこの言語でもパーサは難しい
それは構文木の型がuser-definedだから
user-definedより規約、という手もあるがそれをやるとLispのように型がなくなる
0417デフォルトの名無しさん2016/05/29(日) 10:25:35.29ID:cWnz6Nez
ghciに於いて、ちょっと書き換えて、この書き方は文法的に合ってるかのみ確認したいとき、リロードは大袈裟な気がします
コンパイルはしないで文法的チェックのみ高速省メモリで済ます方法はありませんか?
0418デフォルトの名無しさん2016/05/29(日) 10:52:46.77ID:hkeRWX+0
>>417
flymake とか?ちょっと違うかな
0419デフォルトの名無しさん2016/05/29(日) 11:14:28.41ID:3jHNsFdi
Haskell でプログラミングしてて
「ちょっと書き換えてみたけど、これって文法的に正しいのか分からん。チェッカーが欲しいな」
という状況が想像できないんだが・・・

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

それに、結局最後にはロードするなりコンパイルするんだろ?
その時にちゃんと文法エラーが指摘されるんだから、
それまでは気にせずコーディングを続ければいいと思う。
型の間違いと違って、文法間違いの影響なんてごく局所的なものなんだし。
0420デフォルトの名無しさん2016/05/29(日) 11:35:32.05ID:cWnz6Nez
>>418
ちょっと違う気がします

>>419
そうですか。。。
0421デフォルトの名無しさん2016/05/29(日) 11:38:27.79ID:cWnz6Nez
()はファンクタですがfmapで右側にしか関数を適用できません
両側に適用したいときは自分で(汚く)書くしかありませんか? それともそういう時用の何かがあるのですか?
0422デフォルトの名無しさん2016/05/29(日) 12:18:30.83ID:MVe5mOf8
バグがあるわけでもないのに漠然と汚いというのはオカルトじゃないのか
0423デフォルトの名無しさん2016/05/29(日) 12:25:45.44ID:3jHNsFdi
>>421
自分で綺麗に書く方法もある。

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

まぁ、これはあなたが望んでいる挙動とは違うかもしれんが。
0424デフォルトの名無しさん2016/05/29(日) 13:04:59.40ID:cWnz6Nez
>>422,423
自己解決しました
0425デフォルトの名無しさん2016/06/01(水) 15:39:34.41ID:HdKKv0pS
岡部健って何者?
0426デフォルトの名無しさん2016/06/01(水) 16:57:59.93ID:RDQRhO1c
>>425
関数界のエースです。
0427デフォルトの名無しさん2016/06/01(水) 17:43:05.33ID:RnjmzRnq
炎上芸人
0428デフォルトの名無しさん2016/06/01(水) 23:36:25.34ID:VULwVLKo
触っちゃいけない系男子
0429デフォルトの名無しさん2016/06/02(木) 13:27:58.23ID:UczpuTGc
>>425
グローバルスタンダードなナレッジを持った情報技術者(UCLA卒業)。本人曰わく。
0430デフォルトの名無しさん2016/06/02(木) 14:15:52.62ID:mrjBYZ6h
スタンダードどまりだと世界じゃ使い物にならないと思う
日本のへなちょこIT業界ならともかく
0431デフォルトの名無しさん2016/06/03(金) 07:57:06.24ID:gErWnzdr
FRPは是非とも学ぶべき事項ですか?
0432デフォルトの名無しさん2016/06/03(金) 08:33:08.05ID:JXPKk4n6
近くにいるなら是非とも
遠ければ使い物にならない
0433デフォルトの名無しさん2016/06/03(金) 08:41:19.89ID:gErWnzdr
FRPは砂上の楼閣だったのですか?
0434デフォルトの名無しさん2016/06/03(金) 09:02:04.58ID:JXPKk4n6
重力とかどこの田舎だよ
宇宙じゃ使い物にならない
0435デフォルトの名無しさん2016/06/03(金) 09:20:50.53ID:gErWnzdr
FRPは銀の弾丸ではなかったのですか?
0436デフォルトの名無しさん2016/06/04(土) 10:40:42.55ID:IyXgOGn3
FRPなんて使う羽目になった時点で敗北だよ
0437デフォルトの名無しさん2016/06/04(土) 13:17:17.24ID:RcJdjklN
Kenokabeっての、日本の恥をさらす事になるので、SOに投稿するのはやめてほしい


http://stackoverflow.com/questions/37293422/a-true-frp-principle-and-reactivebanana-code
0438デフォルトの名無しさん2016/06/04(土) 19:02:44.37ID:D9CDDk1T
別にアメリカ人がstackoverflowでアホな事書いてもアメリカの恥にはならないだろう
どっかの団体を代表してるわけでもない唯の無職なんだから
0439デフォルトの名無しさん2016/06/04(土) 19:33:19.52ID:OVl98QFH
>>437
StackOverflow に限った話ではないが、あの様なQ&A形式のサイトでは、
ある回答者が間違ったことを言っていると思ったなら、
あなたが正しい回答で質問者を導けばよい。

それができない、やりたくないなら無視しとけ。
全く関係ないこんな所でグチるな。
0440デフォルトの名無しさん2016/06/04(土) 20:50:55.34ID:qcMF66HN
Ceylon
0441デフォルトの名無しさん2016/06/04(土) 21:02:39.69ID:0F871G7+
実績を通報してアク禁に誘導しとけ
馬鹿正直に相手するなどそれこそ馬鹿のすること
0442デフォルトの名無しさん2016/06/05(日) 09:33:55.77ID:bEydbMY3
ゼロリスクにはコストがかかるが、リスクを無視すればコストも無いという、いつもの話
0443デフォルトの名無しさん2016/06/05(日) 10:24:17.19ID:4/Mq9UHg
System.Environment.getArgs関数って、文字コードはどうなるのですか?

たとえば、

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

これをコンパイルして実行ファイル risu を作った場合、
どんな実行環境でも 「risu りす」 は True を標準出力に出力しますか?
0444デフォルトの名無しさん2016/06/05(日) 12:01:28.44ID:bEydbMY3
言質を取ることと事実を知ることは一致しない
ノルマを課すことと達成することが一致しないように
0445デフォルトの名無しさん2016/06/05(日) 13:23:43.46ID:8WdagiWY
>>443
GHCはUTF-8で書くと思うので、そのソースコードのりすはUTF-8のりすです。従いまして、例えばSJISコンソールなぞからいくらりすを送っても梨の礫でありましょう
0446デフォルトの名無しさん2016/06/06(月) 12:31:09.12ID:EqzbMvnJ
岡部 健
0447デフォルトの名無しさん2016/06/06(月) 20:19:50.08ID:vWa0r7As
>>445
つまりコマンド引数から得た文字列は端末のエンコーディング設定と同じ文字コードになっている、
という解釈でよいのですね。
だからリテラル文字列と一緒に処理する時は注意が必要、と。


ところで梨の礫なんて言葉、最近はなかなかお目にかかれません。
おばあちゃんでしょうか。
なんかほっこりした気分になりました、ありがとうございます。
0448デフォルトの名無しさん2016/06/13(月) 20:25:55.22ID:s5cEFL5F
Text.ParserCombinators.Parsecについて質問です

letter `manyTill` try p


pは数文字食ってから失敗するかもしれないパーザです。これはpが成功しない間 letter を繰り返し食って、最後にpを成功させて、食ったpの部分を除いた文字列を返しますが
除かないで末尾にくっつけたまま返して欲しい場合はどうしますか?
0449デフォルトの名無しさん2016/06/13(月) 22:43:48.50ID:rcz/H1iF
lookAhead
0450デフォルトの名無しさん2016/06/14(火) 21:28:34.01ID:R0tjr5X3
すみません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関数の返値を取り出して通常の変数に束縛して、
通常の関数に引き渡し計算をしたいのですが
その方法をもし知ってましたら教えて下さい。
0451デフォルトの名無しさん2016/06/14(火) 21:38:10.85ID:Sm/6bUGx
unsafePerformIOしかないんじゃない?
0452デフォルトの名無しさん2016/06/14(火) 22:27:07.09ID:5Tpa+uD8
>>450
日本語も意図もよくわからんが、そもそも

func1 n = (n, func2 n)

でいいと思うのだが。
0453デフォルトの名無しさん2016/06/14(火) 22:44:08.85ID:XZG+uE2j
>>450
俺も意図が分からんが、こういう事か?

func0 = do
 (x, y) <- func1
 func3 x
 func4 y
0454デフォルトの名無しさん2016/06/14(火) 22:47:22.10ID:XZG+uE2j
>>453
すまん、質問文につられて引数を忘れてた。

(x, y) <- func じゃなくて (x, y) <- func 1 な。
0455デフォルトの名無しさん2016/06/15(水) 22:15:27.27ID:vYYf6Ztk
>>451 >>452 >>453 >>454
どうもありがとうございます。

「unsafePerformIO」や「<-」での
バインド試してみます。
0456デフォルトの名無しさん2016/06/15(水) 22:30:31.44ID:6m5ApfU9
Haskellの型は弱いんですか!?
0457デフォルトの名無しさん2016/06/15(水) 23:18:57.29ID:bw2YOmBW
smtp認証がうまくできんなー
pythonなら余裕なんだが
0458デフォルトの名無しさん2016/06/16(木) 02:04:27.75ID:NRUgKoir
smtps-gmail でいいなら何の問題もないのでは。
「安全性の低いアプリの許可」がウザいけど
0459デフォルトの名無しさん2016/06/16(木) 17:01:17.73ID:pAcx7t63
>>458
ありがとう
普通に送れてる人がいるなら
やっぱりこっちの環境が悪いんやな~
0460デフォルトの名無しさん2016/06/16(木) 22:02:58.55ID:NRUgKoir
>>459
前バージョンでプルリク入ってたので
バージョンを1.3.2に上げれば大丈夫
0461デフォルトの名無しさん2016/06/17(金) 11:33:07.28ID:qUa7S6e8
>>460
smtps-gmailを1.3.1から1.3.2にアップデートしたら解決しました
ありがとうございました
0462デフォルトの名無しさん2016/06/19(日) 09:34:14.61ID:U9gQeIb+
>>450
ghci上でletするのと違って、hsファイルではletしたらinしないとダメ。
returnの前にin入れるよろし。
0463デフォルトの名無しさん2016/06/19(日) 10:02:38.64ID:U9gQeIb+
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 -> の構文糖衣なだけで、普通のモナド専用演算子だが)
0464デフォルトの名無しさん2016/06/19(日) 10:08:35.36ID:U9gQeIb+
あれ、¥が消えてる?
>>= n ->は
>>= の後にnを引数に取るラムダ式に訂正ね。
0465デフォルトの名無しさん2016/06/19(日) 10:16:10.21ID:U9gQeIb+
あと、文字コードを一旦Shift-JISにして、変なごみを取ってからghciに通すと良い。
0466デフォルトの名無しさん2016/06/19(日) 14:09:22.54ID:+Gq0sOtS
>>462
doの中のletって、inいらないんじゃなかったっけ?
0467デフォルトの名無しさん2016/06/19(日) 18:53:19.01ID:pXg+pklT
haskellを始めたいのですが、得意分野は何ですか?
人工知能でしょうか?
有名ソフトには何がありますか?
c#のラムダ式は好きです
0468デフォルトの名無しさん2016/06/19(日) 19:15:45.51ID:Z3K3Aq0Z
得意分野は普通のプログラミング
速度や低レイヤーを触りたいとかなら他の言語にしとけ
人工知能はpythonとかライブラリの揃ってていいんじゃないだろうか 知らんけど
0469デフォルトの名無しさん2016/06/19(日) 19:43:39.12ID:KC3RPfxA
昔はよくHaskellコンパイラを作るのが得意と揶揄されました
0470デフォルトの名無しさん2016/06/19(日) 21:06:24.60ID:XxQWN3nU
極超低温下で動くソフトウェアはHaskell以外選択肢が無いと聞きました。
0471デフォルトの名無しさん2016/06/20(月) 04:48:23.69ID:SIt1WX2P
Algorithm Wが再帰な型を無視するのは何故?
C++では普通に使うのに未定義になる
0472デフォルトの名無しさん2016/06/21(火) 12:29:55.40ID:/zCyXUk+
得意分野は普通のデフォルト
デフォルトの振舞いを批判する暇があったら対案を出せ
0473デフォルトの名無しさん2016/06/23(木) 06:48:52.26ID:Yp4/uj8T
yコンビネータで y (\ f x -> ...) と書けばfはlet多相ではないことを明示できる
0474デフォルトの名無しさん2016/06/23(木) 18:55:59.49ID:05qDBgT1
ふぇぇ。。。難解用語連発で何喋ってるか判らないよぅ。。。
0475デフォルトの名無しさん2016/06/25(土) 09:42:45.94ID:VirkFiI/
カリー化について質問があります。

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

となるという意味かと思います。
0476デフォルトの名無しさん2016/06/25(土) 09:48:52.83ID:VirkFiI/
というか関数の書き方についての正式な定義がハットンの本には
ありません。

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

f x = ...

と書いた場合、
「=」は写像の対応を表す記号で、
x -> ...
という意味なのでしょうか?
0477デフォルトの名無しさん2016/06/25(土) 09:53:44.96ID:VirkFiI/
add x y = x + y

という表記法は普通の関数の表記法とは全く異なるかりー化された関数用
の全く新しい表記法という考えでOKでしょうか?
0478デフォルトの名無しさん2016/06/25(土) 09:54:40.72ID:mWRDlDK6
>>476

add x y = x + y



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

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

add x = ¥y -> x + y

と書いても構わない(がそう書くのは見たことがない)。
0479デフォルトの名無しさん2016/06/25(土) 09:58:23.93ID:mWRDlDK6
あ〜もしかして、

f x

で関数 f を x に適用するという表記が腑に落ちてないのかしら。
関数型言語で関数適用をいちいちf(x)みたいにカッコつけて書いてると煩雑なので
空白それじたいが(左結合の)関数適用演算子であるかのように表記する慣習。
0480デフォルトの名無しさん2016/06/25(土) 09:59:48.64ID:RoCVjm19
f = \x -> h (g x)
f x = h (g x)
f = h . g

がすべて等価だったはず
0481デフォルトの名無しさん2016/06/25(土) 10:01:20.88ID:VirkFiI/
>>478

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

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

の正確な意味はまだわかりませんが、こっちのほうは意味がはっきり
わかります。
0482デフォルトの名無しさん2016/06/25(土) 10:05:25.94ID:mWRDlDK6
>>481
普通にラムダ式

λx.λy. x+y

のリテラル(表記法)ってだけ。
0483デフォルトの名無しさん2016/06/25(土) 10:06:47.68ID:VirkFiI/
>>478-480

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

add x y = x + y

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

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

略記法ということで納得しました。
ありがとうございました。
0484デフォルトの名無しさん2016/06/25(土) 10:09:33.66ID:N25pDoND
ポイントフリースタイルはしっくりするが、難解と言われるのが面倒臭い
0485デフォルトの名無しさん2016/06/25(土) 10:11:07.91ID:mWRDlDK6
>>483
関数適用演算子としての空白は左結合なんで
add x y はカッコを入れてわかりやすく書けば (add x) y のこと。
Haskellの関数はご推察通り一つの引数しか取らない(最初からカリー化されている)。
0486デフォルトの名無しさん2016/06/26(日) 17:11:33.57ID:gNzZf9B4
pred
subtract 1

Intの場合、両者は最適化でも効いて、全く同じコードになってくれますか?
後者は大袈裟なので前者を書きたい
0487デフォルトの名無しさん2016/06/26(日) 17:20:23.54ID:K7S4TdpP
Enumのデフォルト実装は

pred = toEnum . (subtract 1) . fromEnum

あとは自分で考えろ
0488デフォルトの名無しさん2016/06/26(日) 18:22:42.21ID:gNzZf9B4
むむむ…
id . subtract 1 . id

subtruct 1

では素人考えでは後者の方が速いように思えますが、もしかすると上が下に変換されるかも知れないので判んないです><
0489デフォルトの名無しさん2016/06/26(日) 18:56:11.33ID:fbaRfY1T
foldr がなぜ以下のようになっているのか分かりません。

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

以下では間違いなのでしょうか?
foldr :: (a -> a -> a) -> a -> [a] -> a
0490デフォルトの名無しさん2016/06/26(日) 18:58:18.40ID:fbaRfY1T
sum = foldr (+) 0
product = foldr (*) 1

などを考えると下でもいいような気がするんですが。
0491デフォルトの名無しさん2016/06/26(日) 19:18:28.21ID:K7S4TdpP
そんなことしたら

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

みたいな関数をfoldrに渡せなくなるだろ
foldr で map 書こうとしてみればわかるよ
0492デフォルトの名無しさん2016/06/26(日) 19:23:57.64ID:gNzZf9B4
>>489
二項演算が同じ型同士限定である必然性に乏しいから
0493デフォルトの名無しさん2016/06/29(水) 07:04:16.86ID:r25iBQLU
必然性に乏しいものを信じないだけで、間違っているという確信があるわけではないな

確信がないのに偉そうなことを言ってると必然的に反感を買う
無神論が許されないという必然性
0494デフォルトの名無しさん2016/06/29(水) 08:38:27.16ID:3aYMqn0k
お、そうだな
0495デフォルトの名無しさん2016/06/30(木) 03:18:46.20ID:u1Y0HI53
例 文字列を数回くりかえして「???」でくくる関数

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

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

適当に考えてみた 間違ってたらごめん
0496デフォルトの名無しさん2016/06/30(木) 07:09:20.44ID:MCZcDeJz
(a -> b -> b) -> b -> [a] -> b
[a] -> (a -> b -> b) -> b -> b

Monoid m => [a] -> (a -> m) -> m
二項演算である必要がなかったので単項演算にする例です
0497デフォルトの名無しさん2016/07/02(土) 11:46:36.27ID:dEZ6Zi3t
モナドの良さって未だに分からん。
do記法が使えるから嬉しいってこと?
0498デフォルトの名無しさん2016/07/02(土) 15:29:55.10ID:1toMA/Of
良いから使うわけじゃないし嬉しいわけでもないよね
0499デフォルトの名無しさん2016/07/02(土) 15:30:33.06ID:Dac+6Yzz
Maybe使ってもわからなかったら諦めろ
0500デフォルトの名無しさん2016/07/02(土) 15:38:59.47ID:RwQxrqCZ
リストモナド使えない言語とか窓から投げ捨てるレベル
0501デフォルトの名無しさん2016/07/02(土) 20:47:59.70ID:M4B9OnE7
モナドは文脈

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

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

ADHD矯正システム
0502デフォルトの名無しさん2016/07/03(日) 00:10:37.95ID:g/2Vj7Kl
文脈云々はバズワードだから嬉しくないが
バズワードを回避してまともな言葉が使えたらそれだけで嬉しい
0503デフォルトの名無しさん2016/07/03(日) 00:22:39.53ID:q98BxS4G
ただのプログラム可能なセミコロンだろ
0504デフォルトの名無しさん2016/07/03(日) 09:19:10.68ID:EfkUt+fo
f '@' "abcde" = ["@abcde", "a@bcde", "ab@cde", "abc@de", "abcd@e", "abcde@"]

こんな f って小さく書けますかね?
0505デフォルトの名無しさん2016/07/03(日) 09:44:07.94ID:33tWiWdT
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)

これが小さいか大きいかは知らん
0506デフォルトの名無しさん2016/07/03(日) 09:55:09.62ID:kAyTm6a5
import Data.List (inits, tails)

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

ただし f '@' "" = ["@"] となるが、これが望んだ結果なのかは知らん。
0507デフォルトの名無しさん2016/07/03(日) 09:57:26.96ID:33tWiWdT
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"

末尾再帰にしたった
0508デフォルトの名無しさん2016/07/05(火) 23:11:56.42ID:teB4RGPK
メソッドチェーンみたいなことをやりたいのですが、Haskellではどうやればよいのでしょうか?
0509デフォルトの名無しさん2016/07/05(火) 23:26:50.28ID:sg2Iayfh
|>
0510デフォルトの名無しさん2016/07/06(水) 01:01:04.59ID:SGI4C5kx
hayooで a -> (a -> b) -> b 探しても名前ぜんぶバラバラやん
なぜ統一できんかったんや
0511デフォルトの名無しさん2016/07/06(水) 03:35:43.05ID:3LtpfHJl
import Data.Function ((&))
05125082016/07/06(水) 09:07:58.46ID:e+6hT/7h
すみません、よくわからないのでメソッドチェーンの具体的なコードを教えて下さい。
0513デフォルトの名無しさん2016/07/06(水) 11:03:34.97ID:3LtpfHJl
>>512

http://ideone.com/IXEJ23

各行にそれぞれ複数の数字が書かれたデータを標準入力から読み取って
全部の行の合計を出力する例
05145082016/07/07(木) 00:39:56.05ID:3l/TdPIo
>>513
ありがとうございます。
メソッドチェーン専用の関数みたいなものは無いんですね。

d3.selectAll("p").style("color", "white");
のようにメソッドチェーンの途中で引数を取る関数がある場合はHaskellではどう書くのでしょうか?
0515デフォルトの名無しさん2016/07/07(木) 07:24:10.29ID:2aQfBH7H
メソッドチェーンを使う科学的根拠がない
二項演算なら無駄な括弧がなくなることは客観的にわかるが
0516デフォルトの名無しさん2016/07/07(木) 07:35:43.00ID:LeKCeFlK
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

が普通の書き方
0517デフォルトの名無しさん2016/07/07(木) 07:45:28.85ID:LeKCeFlK
あと、メソッドチェーンみたいな非本質的なもんは言語に組み込まずに
どうしてもやりたければライブラリでなんとかするのがHaskellでの普通の発想で、
実際に(関数合成演算子のドットを数学的からくりを駆使してメソッドチェーンの
ドットとして読めるようにしてしまうことで)それをしてるのが Lens パッケージ
0518デフォルトの名無しさん2016/07/08(金) 07:50:05.57ID:HHTq9Yfv
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でした。次の一手を教えてください
0519デフォルトの名無しさん2016/07/08(金) 08:51:31.05ID:6Zixlsju
単なる二分探索の問題に見えるのでそもそものアルゴリズム選択がまちがってるのでは…
0520デフォルトの名無しさん2016/07/08(金) 09:38:40.02ID:HHTq9Yfv
(´:ω;`)ウッ……有り難うございました
0521デフォルトの名無しさん2016/07/09(土) 10:23:30.04ID:6VbJAOZW
本質的なコードは4行くらいしか書いてないから捨てるというのも意外に良い手だよな
0522デフォルトの名無しさん2016/07/11(月) 08:51:48.39ID:/+kUKYFr
constについて教えてください。ghciで
const 'A' 'B'
->'A'

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

となります。この結果の違いが生じる理由は何なのでしょうか
0523デフォルトの名無しさん2016/07/11(月) 11:19:44.46ID:f8mQHfL+
fmapは中身に作用するからだろ
0524デフォルトの名無しさん2016/07/11(月) 18:34:09.29ID:AjHPC2UO
undefined :: Maybe Char の中からパターンマッチで
値を取り出して処理しようとする時点で例外を投げてる
<*> の第1数のモナドに包まれた関数が const だろうがなんだろうが
その関数の評価の前に<*> の第2引数の評価が生じるのでそうなる
0525デフォルトの名無しさん2016/07/11(月) 18:42:28.43ID:AjHPC2UO
あ、すまん 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 値をパターンマッチしようとして例外投げてる(たぶん)
0526デフォルトの名無しさん2016/07/12(火) 12:41:57.06ID:eYeWW2L8
fmap constじゃなくてbimap id constと思えば、constの性質は半分しか残ってない
0527デフォルトの名無しさん2016/07/20(水) 10:25:34.27ID:VWk1kGFj
>>501
>モナドは文脈
>>503
>ただのプログラム可能なセミコロンだろ

そんなのでモナドが分かるわけないだろ
自分でも分かってないだろ
そもそも受け売りじゃなく自分の言葉で言え
0528デフォルトの名無しさん2016/07/20(水) 10:38:06.92ID:oWJ56nOj
定義があるものに対して独自の言い回しに変更するのは数学的にはどちらかというと筋が悪い。
モナド則を満たせば何であれそれはモナドだし、それ以外に説明する言葉などない。
それがどのように便利なのかということと、モナドが何者であるかを混同するのはよくない。
0529デフォルトの名無しさん2016/07/20(水) 11:46:05.72ID:VWk1kGFj
>>528
誰に対して言ってるのか分からんが、
あんたは501,503にも及ばない単なる機械か石ころだな
定義を読んでるだけで、定義を理解したり、定義を作ったりしたことがないだろ
0530デフォルトの名無しさん2016/07/20(水) 16:40:29.10ID:HQM16vFt
最初はインスタンスの型だけを見ろ
モナドクラスとモナド則と数学は後で勉強しろ
この順序を間違えなければ理解できると思う
0531デフォルトの名無しさん2016/07/21(木) 11:25:19.65ID:jJzdCE8w
最近はARで見えない情報を可視化するのが正義
抽象化や情報隠蔽は時代に逆行している
0532デフォルトの名無しさん2016/07/23(土) 05:36:08.80ID:zdmgkc+M
言われてみると確かにポケモン流行ってるな
0533デフォルトの名無しさん2016/07/25(月) 12:51:34.33ID:IZp+OdY9
stack で build コマンドや test コマンドを実行する際に、cabalファイルが参照され、
build-depends に列挙されたパッケージが未インストールなら自動手にインストールされますが、
このとき、コマンドのオプションとして --haddock オプションを付ければライブラリドキュメントも構築されます。

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

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

stack でも同じように自動的にドキュメントが作られるようにするにはどうすれば良いでしょうか。
0534デフォルトの名無しさん2016/07/25(月) 15:07:37.73ID:0y8CzYDs
~/.stack/config.yaml

build:
haddock: true
でできるように(我らがヒーロー)chrisdoneさんがしてくれたみたい。
0535デフォルトの名無しさん2016/07/25(月) 20:43:22.58ID:IZp+OdY9
>>534
ありがとうございます。
できました。


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

stack でドキュメントを強制的に上書きで再インストールする方法はあるでしょうか。
0536デフォルトの名無しさん2016/07/25(月) 22:52:02.75ID:0y8CzYDs
>>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
0537デフォルトの名無しさん2016/07/27(水) 18:59:54.20ID:p304Zd6v
>>536
念のためバックアップをとってから試しましたが、うまくできました。
今のところ特に問題は見つかっていません。

ありがとうございました。
0538デフォルトの名無しさん2016/07/29(金) 23:39:42.61ID:MRKaDYWC
Data.Text.Arrayは廃止されたのですか? どこのモジュールに統合されたのですか?
Haskell Platform 2014.2.0.0で標準ライブラリだったのですが。
equal, new, unsafeWrite, run が使えなくて困っています
0539デフォルトの名無しさん2016/07/30(土) 00:41:53.51ID:FdhqaNGk
>>538
textパッケージの中にありますよ
https://hackage.haskell.org/package/text-1.2.2.1/docs/Data-Text-Array.html
0540デフォルトの名無しさん2016/07/30(土) 01:08:24.92ID:e3eNfr/7
標準から外されたんですか…、競プロで使えないや〜残念
0541デフォルトの名無しさん2016/08/06(土) 13:44:41.15ID:AFiBfwTx
yesodで仕事したい人ってどれくらいいるのかしら
0542デフォルトの名無しさん2016/08/10(水) 20:45:06.76ID:8Ulk+XDX
おしえてジェネラル @oshiete_general

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

ttp://www.reuters.com/article/us-japan-economy-boj-idUSKCN10L13A
0543デフォルトの名無しさん2016/08/11(木) 18:25:10.90ID:3hGYSwfG
今自サーバを立ててる人いるのかな
0544デフォルトの名無しさん2016/08/12(金) 00:39:34.68ID:XbNuNDlJ
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
0545デフォルトの名無しさん2016/08/12(金) 00:43:24.62ID:XbNuNDlJ
あ、BSD3は宣伝条項(?)というのが無くて書かなくていい感じ?
0546デフォルトの名無しさん2016/08/12(金) 09:31:52.85ID:/Ub94szZ
標準ライブラリのみ使って競プロする場合もそんなん気にしないといけないのかひええ
0547デフォルトの名無しさん2016/08/12(金) 10:48:50.93ID:qPG51vYe
初めて関数型言語に触れてモナドがあんまり理解しづらいんだがパイプラインで使える割り込みみたいなものとしてとらえておk?
0548デフォルトの名無しさん2016/08/12(金) 13:29:05.81ID:Oo9jKYZj
熱力学や力学を知らなくても教習所通えば車の運転ができるようになる
0549デフォルトの名無しさん2016/08/12(金) 14:35:20.27ID:iSmX+r7l
飛行機が飛ぶのが信じられない。
http://pc.2ch.net/tech/kako/1005/10056/1005635787.dat

1 名前: デフォルトの名無しさん 投稿日: 01/11/13 16:16

物理的なことは、分かるんです。
ただ、それをコンピュータで制御して事故が少ないというのが信じられない。

飛行機は、変なアセンブリや、いきなり機械語を埋め込むような言語で複雑な
制御プログラムを実装していると思う。

僕が書いたら絶対落ちる。

墜落しなくても、技術者が青ざめるようなことはしょっちゅうあるのでは?

飛行機を飛ばすプログラムなどに使用する言語や開発環境を教えて下さい。
僕を安心させて下さい。
0550デフォルトの名無しさん2016/08/12(金) 15:48:38.47ID:1cmLpCrQ
>>547
なんじゃそりゃ?
0551デフォルトの名無しさん2016/08/12(金) 16:24:22.98ID:paDve3zk
>>550
いや、いろんなモナドがどういう動きをするのか見てたら処理の終わりや処理の途中になんかあった場合次の別の処理に移る所(パイプライン処理)で割り込んでるようなイメージになったからさ
その命令と命令の間で割り込めるような構造がモナドなのかと思ったんだ
0552デフォルトの名無しさん2016/08/12(金) 19:09:27.06ID:IYlYCot4
チョコモナカジャンボ
0553デフォルトの名無しさん2016/08/12(金) 19:45:45.80ID:Dvu9s0yY
まるで意味がわからんが、IO モナドだけを念頭において話をしてるのか?
0554デフォルトの名無しさん2016/08/12(金) 20:36:30.59ID:wGlcEeY2
>>551
モナドのそういう雰囲気は、プログラマブルセミコロン、といわれてる。
リストモナドやMaybeモナドの定義も見てみると、もっと理解が深まるよ。
0555デフォルトの名無しさん2016/08/12(金) 20:44:57.35ID:/Ub94szZ
モナドの印象は、Haskellは実行順序がコンパイラ依存ではっきりしないが、しかし例えばg . f はfを適用してからgに移ってくれるので、これは順序を指定していると言える。
これをもっと発展させて一般的に順序を指定するノウハウはないか? →だったらモナドというものがありますよ→『お、いいですね、これ採用しましょう』と決まっただけ
0556デフォルトの名無しさん2016/08/12(金) 21:00:00.37ID:Dvu9s0yY
さほど害はないがよくある誤解
0557デフォルトの名無しさん2016/08/12(金) 21:02:45.97ID:IYlYCot4
モナドから先の話に一向に進まないパターン
0558デフォルトの名無しさん2016/08/12(金) 21:15:11.37ID:/Ub94szZ
但しこのノウハウには制限があって、テーマにしているモナドを製造ラインに例えると、その製造ラインの途中で別の製品を造ることはできません。テーマに集中せざるを得ません

それでは実用的ではないと思うのですが、だって途中で色々とその時点での成果物に依存した次の準備などで、別の製品を造りたいこともあるではないですか。あまりに不自由だ

そのためにはそれ専用の製造ラインを別モナドとして定義して、それをdoの途中に(オフサイドラインの)行頭letで呼び出して、テーマとなっている製造ラインの途中へと流し込みます。流し込めるのは『支流モナド』ではなく『支流モナドに因る成果物』のみです(それをテーマの製造ライン用に再パックし合流する)。このようにして、テーマとなっているモナドの型はテーマのまま変わらないようにします。

ちなみに、そのletでついでに一時定数を定義して便利に使うこともできます。別の行にオフサイドルールに則って(let hoge = 〜の次の行ならhの列に)書きましょう。毎行letを書く必要はありません。

テーマのモナドに戻る時はこれまでのテーマのモナドのオフサイドラインに則って復帰するだけです。この場合inは書きません
0559デフォルトの名無しさん2016/08/12(金) 21:24:18.19ID:/Ub94szZ
SomeMonad a型の関数のdoブロックの途中で
  nanika <- 〜
と書くなら
右側はSomeMonad a型、左側はそのモナドを引っ剥がした 単なる a 型となるよう、右側を適宜returnを補って再パックしたり、SomeMonad a型関数ならそのまま書くだけなどして、型(帳尻)合わせをする。

nanikaは以降の行から関数の終わりまで便利に使える

こんだけ覚えておけば理解はともかく満足に使えるでしょ

以上、Haskell初日用モナド講座でした
0560デフォルトの名無しさん2016/08/12(金) 21:51:32.23ID:IYlYCot4
F#「Haskell先生はモナドの周りをウロウロしててください。私は先に行きますんでw」
0561デフォルトの名無しさん2016/08/13(土) 01:01:04.83ID:PKPsUiHo
純粋関数でプログラム書くモナド以外のアプローチってあるの
0562デフォルトの名無しさん2016/08/13(土) 04:07:58.01ID:wqMXG7Q2
haskellのdoの糖衣構文やletやwhereや演算子中置記法とか全部初心者の混乱の元

全部関数ベタ書きで組め
0563デフォルトの名無しさん2016/08/13(土) 06:04:58.95ID:0So+hZJu
純粋じゃねえじゃん
0564デフォルトの名無しさん2016/08/14(日) 23:39:04.78ID:748AhGSv
無粋な奴だな
0565デフォルトの名無しさん2016/08/15(月) 15:37:14.16ID:PzfQQs3h
型構成子とリストはどんな関係?
全部リストで実装できるの?
0566デフォルトの名無しさん2016/08/15(月) 15:59:46.77ID:HKYH1nb5
>>565
型構成子って type contructor のこと?

実装とは?
0567デフォルトの名無しさん2016/08/15(月) 16:08:31.81ID:HKYH1nb5
>>565
すまん、type constructor の事かと訊きたかった。

もしそうなら、リストとの関係は特に語ることもないよ。
type synonym において、type a のリストの type construcor を [a] と記述する構文規則になっている、ただそれだけ。

たぶん、こういう事が訊きたかったのでは無いんだらうなとは思うが、
>>565 の質問文からはこれくらいしか読み取れなかった。
0568デフォルトの名無しさん2016/08/15(月) 16:13:33.96ID:HKYH1nb5
>>562
すまん、グダグダだな。
type synonym じゃなくて type signature ね。

あと、実装は何の実装の話か、具体例か何かあると、
もしかしたらもっと適切なレスができるかも。
0569デフォルトの名無しさん2016/08/15(月) 18:31:50.83ID:PzfQQs3h
>>566 >>567 >>568
こっちこそすまん。あんまり言葉を知らない初心者なもんで。
つまり、Lispのリストのような基本的データ構造さえ使えれば、
List Int やMaybe Intなどをはじめとするどんな型の値もそれで表せる?という質問だった。
たとえば、List Int は、(5 3 8)のようなリストそのものだし、
Maybe Intの場合も、Just 3は(1 3)、Nothingは(0 0)とでも表せばよい。
0570デフォルトの名無しさん2016/08/16(火) 00:17:48.81ID:iBBRIQ7/
('Just 3) 'Nothing
× ('Nothing 0) Nothingに値は無い

('List 5 ('List 3 ('List 8 'ListEnd)))
× (5 . (3 . (8 . nil))) ではない
0571デフォルトの名無しさん2016/08/16(火) 00:18:43.70ID:iBBRIQ7/
     *      *
  *     +  うそです
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *
0572デフォルトの名無しさん2016/08/16(火) 00:19:43.84ID:OAKxpV6Y
>>569
ADTを拡張された列挙体だとみなせば(非効率的だが)それでもいいかもな
LispでHindley-Milnerシステムを再現できるのはそのとおりだけど
それやるとLisp特有の柔軟性は利用できなくなるんで嬉しくないだろう
0573デフォルトの名無しさん2016/08/17(水) 01:21:33.15ID:8bFWGPCI
tanakhイケメンかと思ってたけど案外そうでもなかった

エラー処理を書いてはいけない | Preferred Research
https://research.preferred.jp/2011/12/do-not-write-error-handling/


このエラー処理のモナドの話よかった
0574デフォルトの名無しさん2016/08/17(水) 01:25:29.93ID:8bFWGPCI
http://gihyo.jp/dev/serial/01/alpha-geek/0037
tanakhの顔アップはこれくらいか
0575デフォルトの名無しさん2016/08/17(水) 05:51:08.75ID:uZCC+Xy4
田中さんがイケメンだなんてそもそも誰が言ったんですかね…
0576デフォルトの名無しさん2016/08/17(水) 07:04:18.49ID:Hoxqu598
tanakhってユダヤ教の聖書って出るんですけど
その方はユダヤ教なんですか?
0577デフォルトの名無しさん2016/08/18(木) 07:50:04.15ID:9dlOey3K
Humble Book Bundle THE JOY OF CORDING
ttps://www.humblebundle.com/books/joy-of-coding-book-bundle

生のすごいHが1$ポッキリ!
0578デフォルトの名無しさん2016/08/18(木) 22:48:38.98ID:q+6z/vcz
CORDING ?
0579デフォルトの名無しさん2016/08/20(土) 18:59:40.68ID:M5pz0luK
え?
0580デフォルトの名無しさん2016/08/24(水) 20:17:15.35ID:3ozWkhy2
Haskellの関数名を考えるとき、どう計算するかを表す動詞ではなく、
何が返ってくるかを表す名詞にするよう、できるだけ心掛けましょう。

sine(sin)やcosine(cos)、integral(∫)もみんな名詞でしょ。
0581デフォルトの名無しさん2016/08/24(水) 22:57:48.92ID:ZIV2jGBM
つーか、英語に名詞と動詞を兼ねる単語が多すぎるってだけでは?
0582デフォルトの名無しさん2016/08/24(水) 23:07:00.48ID:nZ9rDf/L
アメリカ英語に特にその傾向があるっていうのは聞くなあ。
そもそもそんなクソダサ言語を使うのが誤りなのかもしれない。
0583デフォルトの名無しさん2016/08/25(木) 01:36:22.04ID:qf1gHttb
microwave (レンジでチンする)
x-ray (レントゲンを撮る)
0584デフォルトの名無しさん2016/08/25(木) 02:59:55.26ID:B4Y+gpAp
>>580
どうして動詞より名詞の方がいいの? 純粋に理由が知りたい。
0585デフォルトの名無しさん2016/08/25(木) 07:18:14.68ID:HhsagtWk
日本語の「〜する」だって万能動詞化語だけど
英語は「文法上動詞と解釈するしかない位置にある(名詞っぽい)単語」は
形を全く変えずに動詞として振る舞えるからなあ
…書いてて気づいたけど、逆に英語の動詞を日本語に輸入するときに
「ゲットする」みたいに「"get"を名詞化してしまう」から
その辺ごちゃごちゃにしてしまいやすいのかもしれん

>>584
手続き型やオブジェクト指向では規約として動詞で命名するようにしてたりするから
その癖に引きずられないで宣言的に書けってことじゃないかな
HaskellでもIOモナドの中ではgetArgsとか使うけど
0586デフォルトの名無しさん2016/08/25(木) 07:32:10.06ID:DDCLwde4
心掛けましょうとかいう類の微妙な命令は人間には許されるが機械には通じない
機械に命令するのは難しい
動詞をなくせば命令もなくなる
0587デフォルトの名無しさん2016/08/25(木) 08:51:48.04ID:Odt+sGM4
名詞にしろとか、まったく意味のないクソのような思いつきだなw
Data.List の中見てみればいいのにw
0588デフォルトの名無しさん2016/08/25(木) 12:27:25.18ID:43//jAtH
>>584
英語の文章を書くときには主語が必要
すると、文書が I とか特定の主語で始まる文章ばっかりになって気持ち悪くなる
小学生がはじめて書く作文みたいに、同じ形の文章をならべるような感じで幼稚な印象をかもしだす

ゆえに、文章にバリエーションを持たせるために主語に使えるような名詞化が必須となった
0589デフォルトの名無しさん2016/08/26(金) 18:04:25.83ID:Rls1Ch1+
コンパイル時に分かっているのは計算のやり方
計算結果は分からない
停止性問題も分からない
分からないが停止するものとして名詞化するべきか?
0590デフォルトの名無しさん2016/08/26(金) 18:57:07.43ID:6PjBnIB5
関数名を決めるのに停止性問題を気にする人がいるとは
難儀な性格だね
0591デフォルトの名無しさん2016/08/27(土) 03:17:26.65ID:D0iquWDS
https://wiki.haskell.org/HaskellWiki:Copyrights
↑これって日本語訳ありますか?(機械翻訳だとわけ分からないので)

https://wiki.haskell.org/99_questions
↑ここにあったいくつかのコード例が便利そうだったのでコピペして使いたいなと思ったんですけど
wikiの利用許諾がよく分からなかったので
0592デフォルトの名無しさん2016/08/27(土) 10:45:30.25ID:1nMCeYUK
>>591
A simple permissive lisenceってあるけどそのものズバリなのは見つけられないな…
MITライセンス(X11 License)から著作権表示義務を取っ払った文面に読める

MIT License - Wikipedia
https://ja.wikipedia.org/wiki/MIT_License
0593デフォルトの名無しさん2016/08/27(土) 13:40:00.11ID:I3O+iqpo
複数の値構築子を持つ型があるとします。

data T = D1 | D2 | ・・・

ここで、この型の定義時に deriving Show とすると Show 型クラスのインスタンタンスとなり、
show 関数の定義が自動的になされます。

しかし、一部の値構築子に対する show 関数のみ独自の定義を行いたいです。
(他の値構築子に対する show 関数の定義は deriving で行われるもので良い)

このような場合、deriving Show の宣言を止めて明示的に Show 型クラスのインスタンスを宣言し、
全ての値構築子に対する show 関数の定義を自身で行わなければならないのでしょうか。
0594デフォルトの名無しさん2016/08/28(日) 00:19:57.40ID:b0M2+B18
まだ売られていないものを買い叩いてはいけない
高くても買う気概を見せるべき
0595デフォルトの名無しさん2016/08/28(日) 21:12:57.37ID:GgbWiPIx
>>593
あまり綺麗な解決策はないっぽいです
http://stackoverflow.com/questions/28665917/accessing-the-default-show-in-haskell

あとは、deriving Show したものをEither で取り込む、って手もありますが、パターンマッチも合わせなくちゃならない面倒臭さがあります。
0596デフォルトの名無しさん2016/08/28(日) 21:51:38.94ID:dFRMemTF
>>595
ありがとうございます。
理解できました。
0597デフォルトの名無しさん2016/08/31(水) 22:45:44.30ID:Rs0xiE9q
HaskellはBSDやlispに似た香りがする
盛り上がるのは日本だけ
0598デフォルトの名無しさん2016/08/31(水) 23:10:06.77ID:7+q3lg65
ちょっと何言ってるのか分かんない
0599デフォルトの名無しさん2016/09/01(木) 02:28:23.81ID:egT8bscR
HaskellはLispに似てない
ErlangやSQLがLispに似てないのと同じ
0600デフォルトの名無しさん2016/09/01(木) 03:05:36.49ID:CJsgpLVH
原理主義っぽい感じ
0601デフォルトの名無しさん2016/09/01(木) 05:41:39.78ID:egT8bscR
原理主義には二種類ある
梃子でも動かないこと
逆に行動力がありすぎて過激化すること
0602デフォルトの名無しさん2016/09/01(木) 06:09:39.50ID:RBx6umGo
「Haskellと共に4年間を歩んだ起業家の視点」
http://postd.cc/haskell-in-a-startup/
0603デフォルトの名無しさん2016/09/01(木) 13:23:13.03ID:CJsgpLVH
NTTデータがごり押ししてる時点で危うい
0604デフォルトの名無しさん2016/09/01(木) 19:30:56.51ID:mPgGDrHC
そもそも原理主義に悪いイメージはない
0605デフォルトの名無しさん2016/09/01(木) 21:18:32.08ID:VCwOTBrD
コマンドラインを解析するのに optparse-applicative パッケージを使ってるんだけど、
subparser で「コマンド名を何も指定していない場合には実行するパーサー」を指定することはできないのかな?

subparser (command "" あるParserInfo <> command "cmd1" 別のParserInfo)

として、シェルで

$ アプリ名 オプション 引数

って実行しようとしてもエラー扱いされる。
(当然、アプリ名 cmd1 オプション 引数 ってやると別のParserInfoが実行される)

これができれば、今のところコマンドラインパーサーとしては最高なんだが・・・
0606デフォルトの名無しさん2016/09/02(金) 07:35:27.77ID:D4RF+Hn1
>>604
福音派
0607デフォルトの名無しさん2016/09/02(金) 20:10:33.97ID:rbAQHi/g
そういえば f x を単項演算という人がいるけど f $ x と同じだから二項演算だよな
演算子を何も指定していない場合の二項演算
0608デフォルトの名無しさん2016/09/02(金) 21:56:11.68ID:tVbN57IV
審議中
0609デフォルトの名無しさん2016/09/03(土) 21:14:38.25ID:b3XfDx+y
f x は f $ x に展開してるのだろうか
$ が単項演算子を左側の引数に持つ二項演算子で、f x と結果が同じになるように f $ x を計算しているのではなかろうか
0610デフォルトの名無しさん2016/09/03(土) 21:20:32.77ID:I4+juosu
>>607がアホだってだけの話をそこまでひっぱらんでもええやろ
0611デフォルトの名無しさん2016/09/04(日) 08:23:55.62ID:hJ0oY1hg
アホのふりをした陰謀だったらどうする
いずれにしても人格や心理を知ればあらゆる現象を解明できるという風潮がある

シンギュラリティに到達すれば機械も心を持つようになるんだろう
0612デフォルトの名無しさん2016/09/06(火) 05:47:19.29ID:B6IsI2Pu
期待を操作すれば物価を操作できるとかね

でも機械には心がないから操作できない
とんでもない機械音痴の香りがする
0613デフォルトの名無しさん2016/09/06(火) 06:43:44.20ID:hM0tgfmY
毛の壁みたいなことを書き込むな
06145912016/09/07(水) 00:30:17.49ID:9tlIzaE9
>>592
ありがとうございます
diffを取ったらたしかにそのようでした
0615デフォルトの名無しさん2016/09/09(金) 17:59:57.99ID:fugQoxX/
Lispで考えると関数と演算子の違いがわからない
スタックマシンで考えると関数は一旦スタックに置いてから呼び出すから演算子と違う
0616デフォルトの名無しさん2016/09/09(金) 20:07:49.45ID:EXJ63xav
>>615
lispの場合、例えば+なら、+という名前の関数って解釈になると思うんだけど

原則
(関数名 引数1 引数2…)
っていう規則だし
0617デフォルトの名無しさん2016/09/10(土) 12:57:03.05ID:0lecj7oS
Haskellでいうなら中置記法で使えるかどうかの違いじゃね?
単項演算子(前置または後置記法)も欲しいけど
0618デフォルトの名無しさん2016/09/10(土) 22:31:13.20ID:kdc6/nN6
foldr 関数 0 == (foldr 関数) 0
foldr 前置 0 == foldr ((前置) 0)
foldr 中置 0 == ((中置) foldr) 0
foldr 後置 0 == ((後置) foldr) 0
0619デフォルトの名無しさん2016/09/17(土) 01:19:31.32ID:TryWX1hA
leksahっていうIDE使ってる人いる?
標準入出力の実装とか、実行ファイルの場所について知ってたら情報教えてください
0620デフォルトの名無しさん2016/09/17(土) 18:11:26.87ID:/utKPaV2
やっとArrayの使い方解ってきて楽しさが増してきた
ライブラリドキュメントの初心者突き放し感凄い
0621デフォルトの名無しさん2016/09/17(土) 22:30:13.53ID:xGaWkelz
Haskellのライブラリドキュメントというものは読み手に初心者もいることを念頭に書かれてはいない。
そんな事より、関数の性質を過不足なくシンプルに記述されていることの方が遥かに重要。

使い方を調べるものではなく、性質を調べるもの。

初心者かどうかに関わらず、使い方を学ぶなら別途解説記事などを当たる方が効率的。

(そもそも、初心者に優しいライブラリドキュメントは、圧倒的多数の非初心者にとっては使いにくい)
0622デフォルトの名無しさん2016/09/18(日) 11:54:17.60ID:+SKZ6S2R
なんで初心者は type KeyValue k v = [(k,v)] では納得しないの?
0623デフォルトの名無しさん2016/09/18(日) 13:03:29.53ID:8TOAmXme
競プロでTLEしたからだよ
0624デフォルトの名無しさん2016/09/18(日) 17:17:22.23ID:+SKZ6S2R
Ixクラスが難しいのはLispのnumerical towerが難しいのと同じかな
ただし型を明示する方がより難しく感じる
0625デフォルトの名無しさん2016/09/19(月) 19:30:07.86ID:80/BHnqI
iterateM = forever?
(take n . iterate)M = replicateM?
0626デフォルトの名無しさん2016/09/19(月) 19:38:52.37ID:80/BHnqI
今日はIOの上にWriterを積んでさらに上にStateを積む経験をしました
ロギングしながら内部状態を更新して計算するという、手続き型では当たり前にやっていたことでもHaskellでやるには色々と難儀するなあと思いました
最後に剥がして剥がさないとだしね
0627デフォルトの名無しさん2016/09/19(月) 19:51:08.46ID:80/BHnqI
あと、exec○○Tとeval○○Tがどっちがどっちだったかごっちゃになって何度も:t しました。
Matzとmattnくらいごっちゃになる
0628デフォルトの名無しさん2016/09/21(水) 10:03:06.97ID:sEEtOe1C
Haskellのifは、実際にはcaseの糖衣構文として実装されている。
0629デフォルトの名無しさん2016/09/21(水) 17:44:02.16ID:4XZnLpLb
それはいくらなんでも常識だと思う
コードがコア言語に翻訳されたときにどうなるかくらい見たことあるだろ普通
0630デフォルトの名無しさん2016/09/21(水) 19:50:55.97ID:aYh3Hfox
>>629
べつに反発する訳ではないが、見たことない人の方が圧倒的に多いと俺は思うよ。

core言語をネタにした記事や議論があまりに少ない。
入門書には載ってないし、core言語の存在に気づく機会なんてそうそう無いんじゃないかな。
知らなくても殆どのアプリケーションは問題なく作れるしね。
0631デフォルトの名無しさん2016/09/21(水) 22:12:06.22ID:MOB6yruj
stack new で作ったパッケージを削除するにはどうすればいいの?
最初にテストで作ったパッケージとかもういらないやつ
0632デフォルトの名無しさん2016/09/22(木) 20:46:54.69ID:qTs7iGpB
>> 631
rm -rf ~/.stack; stack setup; stack build
0633デフォルトの名無しさん2016/09/22(木) 21:24:33.81ID:AFCrOFUM
>632
ありがとう、設定全部消してやり直す感じかな
消すプロジェクト選べないのかな

ていうかWindowsの環境だと
C:\sr\
が ~/.stack に相当するのであってる?
0634デフォルトの名無しさん2016/09/22(木) 23:46:45.84ID:jxKSBn/V
ListTの用途ってどんなんですか?
0635デフォルトの名無しさん2016/09/23(金) 00:10:47.32ID:WXiot49w
あんまない
だからこそモナド則満たしてないとかいうバグが長いこと……
0636デフォルトの名無しさん2016/09/23(金) 01:33:27.63ID:z/oo94n5
そうなんですか。。。
0637デフォルトの名無しさん2016/10/05(水) 23:54:20.53ID:vyqM/RAH
自分でググって調べる気もソースコード読む気もない教えて君の僕からの疑問です

Haskellの遅延評価や遅延リストはどのようにしてスレッドセーフを担保しているのでしょうか
0638デフォルトの名無しさん2016/10/06(木) 01:49:51.26ID:4VyQcH0m
スレッドセーフって、複数のスレッドが同じ場所を参照しても安全かどうか?
ソース読む気ないけど、もし参照が危険でコピーが安全だったらコピーするよね普通
0639デフォルトの名無しさん2016/10/06(木) 19:18:03.78ID:q3HZYpQ2
>>637
STMを使ってください
0640デフォルトの名無しさん2016/10/07(金) 14:53:50.98ID:35BCHO2E
STMを使えということは
つまりSTMを使わないと
b = 25
a = 100 + b
という感じで定義されてる未評価の関数aを2つのスレッドから同時に参照と評価があった場合、それぞれで100 + bが実行されるということですか?
0641デフォルトの名無しさん2016/10/07(金) 18:24:20.29ID:jSZrN4yw
>>640
誰かが最初に遅延評価したときに演算され、二番手以降の方へは計算済みの値を格納したポインタを教えるイメージです
0642デフォルトの名無しさん2016/10/10(月) 14:27:31.41ID:Qm2ONX6I
パーザ書く練習問題と模範解答の組のドリルみたいなのないかな…。
Parsecとか使えはするようになってきたんだけど、もっとすっきり書けそうとか効率が悪そうとか色々あって
0643デフォルトの名無しさん2016/10/10(月) 15:50:46.27ID:HAEgy7t1
つRealWorldHaskell
0644デフォルトの名無しさん2016/10/10(月) 19:52:56.68ID:3rNLKIcD
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
0645デフォルトの名無しさん2016/10/10(月) 21:35:10.06ID:R1xgz6YK
Data.Graphの質問です。ノード間に費用を設定したいのですが、ラベルは違いますよね…どこを見ればいいのでしょうか?
0646デフォルトの名無しさん2016/10/11(火) 16:18:02.29ID:sSjTKHHD
Priority Queueって標準ライブラリにないのね
0647デフォルトの名無しさん2016/10/26(水) 04:19:58.71ID:bWo+/2EQ
otherwiseの定義ワロタ
0648デフォルトの名無しさん2016/10/27(木) 08:06:57.18ID:Nn5hsSbo
競プロって標準ライブラリのみだから、必要なアルゴリズム用ライブラリはアルゴリズム本読んで車輪の再発明しなきゃなんだよなぁ
勉強になっていいなぁ
0649デフォルトの名無しさん2016/10/28(金) 00:12:41.03ID:8f+wXH5p
それはよかったね
0650デフォルトの名無しさん2016/10/28(金) 21:15:42.28ID:ostPWI1A
大抵のアルゴリズムの本は手続き型前提で書いてるから
Haskellに乗せるにはまた一工夫必要だったりしてそこもまた勉強になるんだなあ
0651デフォルトの名無しさん2016/10/29(土) 16:01:30.61ID:U0STMpMq
一工夫ってほどの工夫いるのか?
0652デフォルトの名無しさん2016/10/29(土) 18:54:57.37ID:iE/CgPi0
手続き型か否かってよりイミュータブル関係だと思う
0653デフォルトの名無しさん2016/10/30(日) 02:15:50.28ID:jfOgw9BV
別にイミュータブルに直さんでも使えるやろ
0654デフォルトの名無しさん2016/11/01(火) 15:38:33.33ID:663+8MTa
最近参照透明性の概念が意味なくなっているという話を耳にしたがほんと?
0655デフォルトの名無しさん2016/11/01(火) 17:13:14.84ID:vtMJ+WVh
どこできいたんすかそんなん
0656デフォルトの名無しさん2016/11/02(水) 08:25:24.44ID:Hcp22mKX
電波に騙されちゃダメ(・ิω・ิ)
0657デフォルトの名無しさん2016/11/02(水) 11:10:02.14ID:9HnuVJln
コンパイル時のメタプログラミングとかデータの初期化時とかでは意味がある
でもそれはC++のパラダイムと同じ
参照透明性の概念はなくならないが、C++に対抗するパラダイムはなくなっている
0658デフォルトの名無しさん2016/11/02(水) 16:53:59.16ID:Zl1DvHRz
C++03すらうろ覚えな俺にとって11以降は向こうの世界だお…
0659デフォルトの名無しさん2016/11/02(水) 17:44:16.13ID:9HnuVJln
じゃあHaskellの話をすると
型クラスのせいでファーストクラスの関数にこだわらなくなった
Monadが異常に人気なのでArrowのような関数の合成はしないっていうかArrowって何?
0660デフォルトの名無しさん2016/11/03(木) 18:35:59.15ID:VYss1+Sd
0を含まない整数の型を作るにはどうすればいいんですか?
0661デフォルトの名無しさん2016/11/03(木) 21:25:05.49ID:/bqrYTe/
>>660
ゼロを含まないように扱えばいいのでは?

例えばそういう型を IntNZ として、減算 (-) :: IntNZ -> IntNZ -> IntNZ の定義において
ふたつの引数が等しければ例外を投げるとか。

そう言うことを訊いているのではない?
0662デフォルトの名無しさん2016/11/03(木) 23:32:58.43ID:VYss1+Sd
引数にIntNZ型がある関数の中で毎回同じような例外処理を書きたくないのです。
0663デフォルトの名無しさん2016/11/03(木) 23:40:49.26ID:4HccfDPt
じゃあ0を含まない代わりに∞を含む
div x ∞ = 0
mod x ∞ = x
0664デフォルトの名無しさん2016/11/04(金) 08:34:02.77ID:kXeFO5vL
[1..]をやり取りする方法だと
パターンマッチで[0..]をいちいち取り除くのが面倒だから駄目か。。。
難しいな
0665デフォルトの名無しさん2016/11/04(金) 09:50:12.79ID:1tddSSBg
面倒だから駄目というのは難易度じゃなくて割高感かな
前者は客観的かもしれないが後者は個人の感想です
0666デフォルトの名無しさん2016/11/04(金) 11:18:01.53ID:XfkYN6aF
LiquidHaskell 使うか型レベル自然数使うか好きな方を選んだらいい
0667デフォルトの名無しさん2016/11/04(金) 23:38:57.96ID:6gj2sDdx
>>662
そうじゃなくて、IntNZ 型を Num 型クラスのインスタンスにして、
その (-) 関数の定義の中で error 関数を使おうよ。

数値リテラルでの 0 の代入を構文的に防ぐのは(今はたぶん)無理だから、
せめて fromInteger 関数の定義で、0 が来たら error 関数を呼ぶ。
0668デフォルトの名無しさん2016/11/05(土) 12:18:19.28ID:e+VJvV43
>>667
ありがとうございました。
よく分かりました。
0669デフォルトの名無しさん2016/11/06(日) 12:37:50.95ID:ii2PuHlB
えー、静的に保証せずに実行時例外飛ばすのでいいわけ……
0670デフォルトの名無しさん2016/11/06(日) 13:08:58.54ID:73fM5cAV
呼び出される側で逐次バリデーションかけるって普通やらない
0671デフォルトの名無しさん2016/11/06(日) 14:38:22.75ID:9AHrFYuD
>>669
head なんかも普通に例外飛ばしてるじゃん。
0672デフォルトの名無しさん2016/11/06(日) 16:45:16.15ID:aqA72S6k
今Haskellに定理証明機能が求められる
0673デフォルトの名無しさん2016/11/06(日) 17:09:40.29ID:0EN6rm+O
「パターンマッチで空リストが除外されてるからここは空じゃないはず」
「0が入力だとエラーだからここは非0の整数だ」
とか自動で推論してほしいのよ
0674デフォルトの名無しさん2016/11/06(日) 17:57:14.05ID:ii2PuHlB
>>671
だから head すごく嫌われてるじゃん
パターンマッチ使って exhaustiveness 検査できるように書くのが基本でしょ
0675デフォルトの名無しさん2016/11/06(日) 20:13:26.92ID:8krBF8e8
ねえ最近知って驚いたんだけどいつの間にか base に NonEmpty a が入ってる
head :: NonEmpty a -> a
https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List-NonEmpty.html
0676デフォルトの名無しさん2016/11/06(日) 21:06:27.67ID:9AHrFYuD
非ゼロ整数型にゼロが入らないようにするとか、
非空リスト型に空リストが入らないようにするとか、
そういうのを静的に保証することは無理でしょ。

NonEmpty a だって普通のリストからこの型に変換するときは、
空リストに対して例外を飛ばしたり、Nothing にしてるし。
0677デフォルトの名無しさん2016/11/06(日) 22:55:12.61ID:aqA72S6k
無闇な場合分けはしたくない
前提条件のもとに安心してコーディングしたい
場合分けが増えるほど最適化への意欲が殺がれる
0678デフォルトの名無しさん2016/11/07(月) 01:13:01.98ID:MDpsc3Qw
非ゼロの整数って数学的に演算を定義できるの?
0679デフォルトの名無しさん2016/11/07(月) 02:46:36.93ID:5LzIlCQF
windowsの拡張子のように関連付けられた演算があるべきだという議論は数学的なのか?
0680デフォルトの名無しさん2016/11/07(月) 04:57:48.34ID:V9YWDh5g
先ずは『数学的』を定義してくれ
0681デフォルトの名無しさん2016/11/07(月) 09:11:09.12ID:vESUnDI+
加法が非単位的半群、乗法が単位的半群、になるだけだと思うけど
0682デフォルトの名無しさん2016/11/07(月) 09:29:48.12ID:RQbqk0B/
Monoidさん出番ですよ
0683デフォルトの名無しさん2016/11/07(月) 13:16:49.97ID:sGTieyCj
「非ゼロの整数」って ZZ \ {0} = {…-2, -1, 1, 2 …} でいいんだよね?
普通の加法は定義できないな
0684デフォルトの名無しさん2016/11/07(月) 15:30:07.60ID:57Eo3JNh
みんな分数の足し算は覚えてるかな
分母は足し算しないよ
0685デフォルトの名無しさん2016/11/07(月) 22:28:56.92ID:mwzncyNq
Either の Left をエラー値として扱っている場合に、
いちいち return (Left ・・・) と書かずに failure ・・・ みたいに書ける関数が、
標準ライブラリに定義されていたような気がするんだが、なんて名前の関数だっけ?

こんなもん無きゃ自作すればいい話だが、あるもんは使いたい。
0686デフォルトの名無しさん2016/11/07(月) 23:36:36.14ID:R79oO133
そもそも私が非ゼロの型を欲しがった動機は、掛け算の群をHaskellで定義したかったからです。
ゼロを含めてしまうと、それの逆元は存在しないので、群とはなりません。
0687デフォルトの名無しさん2016/11/07(月) 23:43:07.92ID:vESUnDI+
ゼロを除去してもZ-{0}には(1,-1)の対以外には逆元ないんですがそれは
0688デフォルトの名無しさん2016/11/07(月) 23:47:00.99ID:vESUnDI+
あ、「対」ってのは変な表現ないし余計だった
1と-1は自分自身が乗法の逆元だけどほかは、って話ね
0689デフォルトの名無しさん2016/11/08(火) 02:20:51.88ID:bNPBs65+
>>686
零元を除いたときに掛け算が群になるものは体と呼ばれる
有理数体とかあるいは有限体を持ってくる必要がある
整数環は体ではないのでゼロを除くだけでは不十分

元の話に戻ると、例えば整数が偶数か奇数かで場合分けするときに
「偶数整数の型」とか「奇数整数の型」とかを作らないように、
これも型でやるのは面倒なんじゃないかなやっぱり
0690デフォルトの名無しさん2016/11/08(火) 05:23:36.77ID:yAny1aGl
そうか、ゼロを含まない整数/ゼロを含まない整数 で分数の型を作ろうとしたのか。
0691デフォルトの名無しさん2016/11/08(火) 08:59:08.74ID:85Jh4l0o
Haskell以外の新興言語だとその辺うるさく議論できたりするの?
0692デフォルトの名無しさん2016/11/08(火) 11:20:00.20ID:V/aB9qVi
実行時でよければ普通にチェックする
コンパイル時の技術はその後から遅れて追いかける形
0693デフォルトの名無しさん2016/11/08(火) 13:39:05.19ID:rvD8rxF+
実行時チェックはコストがかかるので、できる限り静的にゼロオーバーヘッドで行って欲しい
0694デフォルトの名無しさん2016/11/08(火) 14:42:51.00
Haskellに依存型を
0695デフォルトの名無しさん2016/11/08(火) 17:55:13.90ID:S8iuzxu8
>>675
マジかよ
やべえ
0696デフォルトの名無しさん2016/11/09(水) 01:44:56.08ID:ybkPv5oA
なんちゃって自然数のNumeric.Naturalの方は前からあったな
https://hackage.haskell.org/package/base-4.8.0.0/docs/Numeric-Natural.html
0697デフォルトの名無しさん2016/11/09(水) 17:39:29.39ID:vRs11tEL
insertなんか、複数のコンテナに存在する関数ってなんで修飾しないとコンパイル弾かれるの?
引数型からどのコンテナのinsertか特定できそうな気がするけど…
0698デフォルトの名無しさん2016/11/09(水) 19:09:09.55ID:zLgA6zWO
Haskellのad hoc多相は型クラス経由でやることになってるからだよ
0699デフォルトの名無しさん2016/11/09(水) 21:14:16.95ID:xmqlrnlx
関数型にもデザインパターンってあるの?
モナドがデザインパターン的な??
0700デフォルトの名無しさん2016/11/09(水) 21:51:44.32ID:oiz7Hd4L
Haskellにおけるたった一つのデザインパターン
http://fumieval.hatenablog.com/entry/2015/03/08/214505
>デザインパターンを作らないこと。型とクラスがあんたの武器だ。
0701デフォルトの名無しさん2016/11/09(水) 22:06:42.64ID:GQTXnFNK
デザインパターンはメソッドの名前と意味を細かく決めるから数が多い
関数型はざっくりしてる
モナド1個だけでデザインパターン20個分くらい
0702デフォルトの名無しさん2016/11/09(水) 22:37:40.72ID:xmqlrnlx
まじか すげえ
0703デフォルトの名無しさん2016/11/09(水) 23:09:37.80ID:U1jagGrC
抽象力の違いだな
0704デフォルトの名無しさん2016/11/10(木) 22:10:21.82ID:95rHCbYq
5つほど例を挙げてみてくれないか
0705デフォルトの名無しさん2016/11/10(木) 23:06:29.06ID:iSDVog9L
↓でOOのデザインパターンと関数型プログラミングの対応について詳細に述べられているよ
ttps://www.youtube.com/watch?v=E8I19uA-wGY#t=3m40s
0706デフォルトの名無しさん2016/11/11(金) 00:34:43.63ID:5BtLg1Wc
もう面倒だしその疑問まるっとtanakhに丸投げしチャイナYO!
0707デフォルトの名無しさん2016/11/11(金) 10:54:47.33ID:dScdKx6p
>>699
デザパタはパターンをライブラリに落とせない貧弱な言語に必要なバッドノウハウ。
0708デフォルトの名無しさん2016/11/11(金) 15:35:23.91
C++は貧弱
0709デフォルトの名無しさん2016/11/11(金) 17:31:31.65ID:w3bRsN0z
強いとか弱いとかいう以前の問題
過激なtemplateで知られるC++を理解できるのは一部の超能力者だけ
0710デフォルトの名無しさん2016/11/11(金) 21:09:46.66ID:DJ7KM1aB
>>705
早口で分からん

英会話教室に通おうかな
0711デフォルトの名無しさん2016/11/11(金) 22:01:49.23ID:vuUaX938
スロー再生すれば聞き取れるんじゃね
0712デフォルトの名無しさん2016/11/11(金) 23:20:52.52ID:dPj3pCz/
スライドあるんだが
0713デフォルトの名無しさん2016/11/12(土) 00:08:16.99ID:58llZ1kJ
スライドはあくまで要約やポイントじゃん。
それで十分理解できる人はいっぱい居るだろうけど、俺は無理。
やっぱり、人の話をちゃんと聞きたい。
07146992016/11/12(土) 00:28:18.56ID:QPSpTCI6
>>706
丸投げしました
0715デフォルトの名無しさん2016/11/12(土) 01:09:21.72ID:hHeNYjQy
Haskellでリーマン予想を証明してやるよ
0716デフォルトの名無しさん2016/11/12(土) 02:30:50.02
tanakhは最近Rustにハマってるようだぞ
0717デフォルトの名無しさん2016/11/12(土) 07:49:28.15ID:TT9Tnb2q
tanakhのASKfmじゃなくTwitterに投げたのか
0718デフォルトの名無しさん2016/11/12(土) 07:50:00.87ID:TT9Tnb2q
Twitterはクオリティフィルターで表示されない可能性が微レ存
0719デフォルトの名無しさん2016/11/12(土) 13:14:11.47ID:1NFet2E2
Rustってどんなもんかなと思って見たら
{ という懐かしい記号が目に入ってそっ閉じ。{}だらけの言語を見ると目が腐る。
0720デフォルトの名無しさん2016/11/12(土) 15:53:23.54ID:YgVHUwqy
将棋ソフトの世界大会が開催されたらしく
今年は参加者が40チームを超えて大盛況だったと聞いたので
Haskell使ったソフトは何位くらいに入ってるのかなと調べてみたら...
http://i.imgur.com/0NCgWgU.jpg
0721デフォルトの名無しさん2016/11/13(日) 00:36:31.31ID:25DJAejC
>>671
Haskellの恥とか言われてるぞ
0722デフォルトの名無しさん2016/11/13(日) 00:39:45.43ID:GDVX8Ikh
関数型プログラミング言語の国際カンファレンスのプログラミングコンテストですら関数型プログラミング言語以外での参加者が強いしな
0723デフォルトの名無しさん2016/11/13(日) 02:02:28.39ID:yW2Hc/df
平凡な人間が優秀な言語を扱うより
平凡な言語で優秀な人間のコードをコピペした方が機能するという現実。

更に言えばコピペ出来ないという事は比較も出来ないから
自分は優れたコードを書ける方だという勘違いも生まれやすい二重苦。
0724デフォルトの名無しさん2016/11/13(日) 08:01:48.99ID:NWcxEYYn
それをいうなら仕様書とかいうコピペも実行もできない文書もクズの勘違いだよな
Haskellはコンパイルと実行ができるから少しマシになったといえる
0725デフォルトの名無しさん2016/11/13(日) 18:00:33.55ID:9x+ozG+i
代数データ型のフィールドの定義で、フィールド名に代数データ型名の短縮形を接頭している場合、
Bool 型のフィールドの名前に is〜 って付けにくいよね。

たとえば
data Command = Command { cmdSpecial ::Bool, ・・・ }

本当は isSpecial と命名したいんだけど、他の代数データ型のフィールドと区別したいから、
何かしら接頭辞をつけたい。

isSpecialCmd だと英語的にピッタリだけど、このフィールドだけ cmd を接尾するのも統一感ない。
(他の Bool 型以外のフィールド名は cmd を接尾すると明らかにおかしい)

ホント悩ましいよね。
今は is を諦めて、代わりに switch(または略して swch)を接尾してるけど、
一般的じゃないし、なかなか慣れない。
0726デフォルトの名無しさん2016/11/13(日) 18:26:24.65ID:cTxZaG78
>>720
そうやって順位が低かったからって
一生懸命参加したHaskellerを嘲笑するのはやめようよ
0727デフォルトの名無しさん2016/11/13(日) 18:32:14.30ID:cTxZaG78
脊髄反射で書き込んだけど参加すらしてなかったのか
こういうの見せられると
Haskellの勉強時間をC++に充てた方が良かったのではとか考えだして萎えるね
0728デフォルトの名無しさん2016/11/13(日) 19:01:53.33ID:ajsybu9G
両方やれよ
0729デフォルトの名無しさん2016/11/13(日) 19:05:46.97ID:lXuVu+Qu
打ち合わせしながらHaskell使って30分でプロトタイプ作って、そのあとC言語で3ヶ月かけて実装する
実装言語にこだわる理由が分からん
実装がHaskellじゃなきゃいけない理由はない
0730デフォルトの名無しさん2016/11/13(日) 21:57:57.24ID:ile6jKYv
よく使われる機能は名前と理論がついて既にライブラリ化されているので
我々が直接書く機会は少なく
どちらかといえば、開発中のソフト固有といえる部分を書いていくことになるわけだが
そのとき関数型が役に立つのかどうか、ってことだな

もしくは何かアルゴリズム的なことをガッツリ書かなければならない状況であれば
それはそれでハードウェア構成に最適化されたプログラミングが要求されるであろう場面なので
現状ではC/C++が妥当と言えるかもしれない
将棋プログラムが良い例で、早く動かす必要があるのでC/C++が最適なんだろうな
0731デフォルトの名無しさん2016/11/14(月) 13:13:53.00ID:WhzDU3qv
将棋の例を見るとまだまだ
関数型プログラミングの達人がいないのね
それか将棋などの下世話なものには興味を引かないのか
0732デフォルトの名無しさん2016/11/14(月) 13:54:24.67ID:v/crCO1Q
下世話かなぁ
0733デフォルトの名無しさん2016/11/14(月) 14:55:08.33ID:zPFRwjsR
周りを貶めてまで持ち上げるのはただの傲慢
0734デフォルトの名無しさん2016/11/14(月) 15:04:55.99ID:pQSv0pIq
手続き型の方が思いつきを直感的に実装しやすいからじゃないかと
0735デフォルトの名無しさん2016/11/14(月) 15:14:45.15ID:9+pPztYN
Haskellで将棋ソフトを作ったとしても
do記法だらけで何の為にHaskell使ってるのか分からなくなりそう

一見簡単そうに見えるけど
関数型の特徴を活かした書き方をしようとしたら
相当な知識と発想力が必要でしょ実際
0736デフォルトの名無しさん2016/11/14(月) 19:30:04.71ID:vwfd0FeE
選択肢でセーブして大量のセーブデータを処理するゲームだろ
セーブデータが言語非依存だった場合Haskellを選ぶ理由が特にない
0737デフォルトの名無しさん2016/11/15(火) 00:21:14.15ID:TrWdoi2+
素朴な実装はむしろHaskellの方がやりやすいと思う
定義書けばいいんだから
ただそれだと大抵オーダーレベルで遅いからチューニングしてくんだけど
珠玉のアルゴリズムデサインとか眺めてると
関数型のパフォーマンス・チューニングは
とても素人が手を出せるものではないなと感じる
0738デフォルトの名無しさん2016/11/15(火) 00:35:21.17ID:zFHvDTCz
破壊的操作が選択肢にある命令形とない関数型ではそりゃな
0739デフォルトの名無しさん2016/11/15(火) 01:04:34.79ID:fGk3f/So
玄人は「関数型ではないHaskell」や「OOではないC++」に手を出せる
0740デフォルトの名無しさん2016/11/15(火) 08:56:11.16ID:PldPJ2O3
プログラミングの本質がコンピュータの制御であるのだとしたら
副作用はむしろ自然であるといえるしね
0741デフォルトの名無しさん2016/11/15(火) 12:12:21.76ID:fGk3f/So
美術だったら自然か不自然かという考え方でもいいけど言語だからな
本当か嘘かを第一に考えたい
0742デフォルトの名無しさん2016/11/15(火) 14:19:44.06
しかし我々は社会という人工的組織で生きている。不自然で何が悪いのか
0743デフォルトの名無しさん2016/11/15(火) 17:29:54.42ID:rLEFKtBY
haskell platformオワコンとか言ってるけど
これのminimalにもstackあるからこれでいいの?
ユーザー\appdata\Roaming\local\binとか変なところにあるけど

tanakahとかstack紹介記事書いてるやつはわかりにくいから反省しろ
それかnewbieおことわり宣言しろ
知ってるやつだけ使えばええやろ
0744デフォルトの名無しさん2016/11/15(火) 18:37:27.88ID:zXTJ3mIv
stackの記事は
これ以上ないくらい分かりやすいでしょ。

とはいえ日本の熟練Haskellerって
ツールや開発環境の紹介といった布教行為には熱心だけど
具体的なコーディングテクニックの紹介記事を書いてくれる事って滅多にないよね。

この勧誘だけは熱心だけど
入信後にはアフターケアしない文化が
将棋ソフト作ったHaskellerゼロの遠因になってる気がする。
0745デフォルトの名無しさん2016/11/15(火) 20:03:27.81ID:DS7sAygo
選ばれし者たちのためのプログラミング言語なのがHaskell
布教活動は選ばれし者を発掘するためなのだ
0746デフォルトの名無しさん2016/11/15(火) 20:36:23.03ID:Smv2PVR1
本物のプログラマは〜って記事もあったけど余計な反感買うだろと思った
言語そのものではなくて使いこなせる自分たちが凄いと言ってるみたいだし
0747デフォルトの名無しさん2016/11/15(火) 21:12:04.44ID:7+Tk3atX
みずほの地下でキュウリ1本で働かされているのが本物のプログラマだ
0748デフォルトの名無しさん2016/11/15(火) 21:12:48.41ID:Ul7hyJV8
遅延評価将棋に向いてそうだけど
0749デフォルトの名無しさん2016/11/15(火) 22:32:33.04ID:TrWdoi2+
stack関係は、書かれた当時はHaskell Platformが7.xだったからstack入ってなかったけど
8.0になってstack入ったから今はplatformの方でいいと認識している(嘘言ってたらすまん)
0750デフォルトの名無しさん2016/11/15(火) 22:49:14.61
>>746
つまりRubyが悪いんじゃなくてRubyプログラマが鼻につくのがPythonに敗れた理由だと
0751デフォルトの名無しさん2016/11/15(火) 22:52:19.64ID:9/lrpTST
状態や物事を集合の要素と捉え、その集合に代数的構造を見いだせば、
Haskellで扱いやすくなる。

バージョンを要素とする集合に代数的構造を見いだしたから Darcs が生まれた。
構文解析の状態を要素とする集合に代数的構造を見いだしたから Parsec が生まれた。

将棋も何かしらの集合に代数的構造を見いだせば Haskell の利点が生かせる。

ただその利点の多くは、実行が速くなるというよりは、プログラムが分かり易くなるという類のもの。
だから競技なんかで期待されるような性質の利点ではないと思う。
0752デフォルトの名無しさん2016/11/15(火) 22:55:05.16
但し元ネタは

・本物のプログラマは FORTRAN でリスト処理を'する(do)'。
・本物のプログラマは FORTRAN で文字列操作を'やる(do)'。
・本物のプログラマは FORTRAN で経理処理を(必要ならば)'する(do)'。
・本物のプログラマは人工知能プログラムを FORTRAN で'する(do)'。

 もし FORTRAN で出来なければ、アセンブリ言語でやる。アセンブリ言語で出来なきゃ、それはやる価値がないのだ。


だから
0753デフォルトの名無しさん2016/11/15(火) 23:36:08.99ID:DS7sAygo
その元ネタってこれか

本物のプログラマはPascalを使わない - Wikipedia
https://ja.wikipedia.org/wiki/%E6%9C%AC%E7%89%A9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AFPascal%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84
0754デフォルトの名無しさん2016/11/15(火) 23:41:15.97ID:fGk3f/So
>>746
言語そのものが凄くても知識に個人差があるし
今は常時デマが流れているので知識の格差は拡大する
0755デフォルトの名無しさん2016/11/16(水) 00:11:34.24ID:vodKK2vI
本物のプログラマは〜っつっても
本物のプログラマって言葉にそんなにステータスがあるものなのだろうか
世間一般的に、本物のプログラマ、のイメージは間違いなく変人だろう
だから本物のプログラマは〜を使うって言われても
変なのしか寄ってこないのでは
0756デフォルトの名無しさん2016/11/16(水) 00:40:01.90ID:r5MYZjSk
嘘つかないだけで凄い希少価値がある時代なので、イメージを気に病むことはない
0757デフォルトの名無しさん2016/11/16(水) 19:27:49.79
型シグネチャでもプログラミングするんだなぁ(小並感)

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

なんてして制約を強くしてから実際に利用するの、一見無意味に見えて意味がある。そうでしょ?
0758デフォルトの名無しさん2016/11/16(水) 22:31:04.07ID:r5MYZjSk
IOの代わりにわざわざ別のモナドを使う意味があるといいね
IOでできるなら大抵の言語でできるし、できないならHaskellしかできない可能性が高い
0759デフォルトの名無しさん2016/11/16(水) 23:31:08.77
ステートモナド上でMapから順位キューをコンストラクトする実装ってなんか変だな
mモナド上でMapから順位キューを構築するステートモナドというべきか

>>757のように書くと、実装型なんていうオレオレ用語ができて、『fromCountMapはfromMapと同じ実装型だが使用するscore_tとしてはIntでハードコーティングする』なんて、ある意味型シグネチャと実装の主従逆転みたいな気分がしてる

型シグネチャプログラミング
実際にはスーパークラスからサブクラスを選定してるだけに過ぎないのだが

電波カキコスマソ
0760デフォルトの名無しさん2016/11/17(木) 11:47:37.75ID:CyEwoRIt
>Comby McCombface ‏@_qwoc_
>nhkで東ロボくんの画面映ってたけど.hsだからhaskellらしい

あの東ロボくん
この時代に機械学習もせずに
ググって穴埋めとかして意味不明だったけど
Pythonで作ってなかったのかよ!!
そりゃライブラリ不足で頓挫しますわ・・・
0761デフォルトの名無しさん2016/11/17(木) 12:51:10.62ID:gAiIIDy+
研究でライブラリ使ってもなあ
0762デフォルトの名無しさん2016/11/17(木) 13:57:20.33ID:OdFzw3CC
脳細胞じゃなくてPythonの遺伝子が必要という現実
0763デフォルトの名無しさん2016/11/17(木) 16:34:54.67
何で機械学習はPython下で発展したの?
0764デフォルトの名無しさん2016/11/17(木) 16:35:45.84
というかHaskell下で発展する分野は何?
0765デフォルトの名無しさん2016/11/17(木) 16:38:37.67
Haskellってなんか永遠に蛍雪時代って感じなんだけど、日の目はいつみるの?
金融業界でソフトウェア開発に云々とか小春日和が稀にあるだけじゃん
0766デフォルトの名無しさん2016/11/17(木) 16:48:54.71ID:cH0vE1/X
より自然的である物のほうが柔軟性が高いってことなんだよ
0767デフォルトの名無しさん2016/11/17(木) 23:18:18.18ID:uCMwWyH/
Haskellが出てきたのは東工大の教授のくだりだったので東ロボくんがHaskellで書かれているわけではないと思う
0768デフォルトの名無しさん2016/11/17(木) 23:21:14.06ID:UdEjGycY
IO型を拡張して、入出力をDBに限定することはできる?
0769デフォルトの名無しさん2016/11/18(金) 04:59:31.79ID:G5oHkwae
将棋といい東ロボくんといい
Haskellって実際には役に立たないのか?
0770デフォルトの名無しさん2016/11/18(金) 05:47:19.02ID:Arybz0NX
新しいアイデア組むの面白いよ
0771デフォルトの名無しさん2016/11/18(金) 07:08:36.59ID:8X6DMoza
どういうのに適しているかを見分ける、使い分ける能力がないと役に立たないよ
0772デフォルトの名無しさん2016/11/18(金) 09:06:31.96ID:eQ6+pXsk
ニルバーナはまだ完成してない?
0773デフォルトの名無しさん2016/11/18(金) 22:33:01.09ID:A97xHB6V
分かりやすい例としてファイルへのごく簡単なアクセスを使って質問しますが、
本質的にはファイルアクセスに限らないテクニック(パターン)に関する質問だと思います。

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つの条件を満たすような解決策を探しています。
何かアイデアはないでしょうか。
0774デフォルトの名無しさん2016/11/18(金) 23:07:04.89ID:otEwH2mo
ファイルはランダムアクセスできないので、二行目のデータを読むためには一行目を読むことは不可避です。
改行コードがあるまで走査しなければなりません。そうしないと二行目を取り出せないでしょう? その後の具体的処理は遅延されます
0775デフォルトの名無しさん2016/11/18(金) 23:14:40.43ID:PWErf1tR
>>773
スッキリ書くテクニックはあまり多くない
スッキリ書けなかった人を批判するのは建設的ではないという考え方があるし

むしろ読む側がごちゃごちゃを読めるテクニックの方が建設的といえる
0776デフォルトの名無しさん2016/11/18(金) 23:15:23.76ID:lkZKNOe7
文脈という比喩だと、Maybe、List、Eitherモナドまではイメージできるんだけど
StateやIOモナドになると全然イメージできない。
0777デフォルトの名無しさん2016/11/19(土) 00:24:37.37ID:leXZmGhT
「評価環境」が文脈だと思えばいいよ
つうか、モナドを文脈として理解しようとするのが最も向いてるのがIOやST

「文脈」じゃなくて「計算効果」つっとけばよかったのにね
0778デフォルトの名無しさん2016/11/19(土) 01:21:02.75ID:L++mh2K9
StateやIOは戻り値がなくてもいいような気がするな
Maybeは時々Nothingだが戻り値そのものは必要
そこが違う
0779デフォルトの名無しさん2016/11/19(土) 02:05:35.98ID:hSh8+31t
40GB、10億行のテキストファイルをunicodeの番号順にソートしたいんだけど
何か良いアイデアないかな?

Bashのsortコマンド使えば良い話ではあるんだけど
スレ住民のHaskell力を吸収して成長したい。
データは1行1データで記述されてる。
メモリは8GBです。
0780デフォルトの名無しさん2016/11/19(土) 02:10:32.07ID:hSh8+31t
追記、ストレージの空き容量は17GB。
ファイルは圧縮したバックアップがあるので直接書き換えOK。

もはや何ソートを使えば良いかも想像つかない。
0781デフォルトの名無しさん2016/11/19(土) 02:30:30.03ID:+b3rIBPg
>>778
は? どうやって計算繋いでいくの?
途中で得た結果をどうやって後で利用するつもりさ
0782デフォルトの名無しさん2016/11/19(土) 02:39:38.86ID:+b3rIBPg
ファイルの直接書換って論理的でなく物理的な意味で?
ウルトラCに思える。OSがそんなこと許さないと思う
0783デフォルトの名無しさん2016/11/19(土) 02:47:23.59ID:+b3rIBPg
先ず現行のファイルを消去して、圧縮ファイルから解凍と読み出しを同時にして、少し読み出してソートして小さなファイルとして書き出す
事を終わるまで繰り返す。
2ファイル選びマージソートしてファイルに書き出し、元の2ファイルをすぐ消去する。
これを繰り返していけばいつかデッカい目的の1ファイルになる
0784デフォルトの名無しさん2016/11/19(土) 02:50:36.24ID:+b3rIBPg
あ、ダメかww空き容量オーバーしちゃうなww
0785デフォルトの名無しさん2016/11/19(土) 03:01:10.71ID:+b3rIBPg
こうしよう。マージソートを全部はしきらずにストレージ一杯になる前に止める。
n個のソート済みファイルが残されるが、読み出すときはこのn個のファイルを開いて、マージソートするかのように頭から比較して吐き出していけば一応一行目からの羅列がすぐに得られる
0786デフォルトの名無しさん2016/11/19(土) 03:21:05.85ID:hSh8+31t
>>785
巨大ファイルでそれするとメモリ不足になりません?
0787デフォルトの名無しさん2016/11/19(土) 03:35:10.59ID:hSh8+31t
個人的にはマージの際に
ある程度マージした後に元ファイルからマージが終わった部分だけを削り取って
・・・と書いておいて気付いたけども
メモリや一時ファイルを使わずにファイルを直接書き換えるなんて許可されてないのかな?
>>782の書き込みの意図をようやく理解。

せめてストレージだけでも増設するしかないのだろうか。
0788デフォルトの名無しさん2016/11/19(土) 04:25:07.98ID:+b3rIBPg
OSに詳しくないけども、ファイルの更新ってのは空き領域探して新ファイルを書き込んで、元ファイルを消去してファイルディスクリプタに物理的位置情報の登録変更手続きをする手順だと思うよ。
メモリのようにデータを直接ピンポイントに書換なんてことはできない。SSDはともかく、HDDの磁気ヘッドが高速回転するディスクの書き換えたいファイルの一部だけにピンポイントでバチバチッとできるとは思えない。(失敗したらどうすんの)

巨大ファイルでも遅延読み書きすれば、実際に用がある部分が少ない場合なら、必要な部分読んで、不要になったらガベコレをするので定数空間量で行けるはず

そりゃあ何とかして空き増やすかストレージ増設が第一に決まってんでしょ。それができない状況でさあどうするっていう思考実験の話をしてるんでしょ
0789デフォルトの名無しさん2016/11/19(土) 04:40:21.46ID:+b3rIBPg
ピンポイント(物理)にデータを変更しようとした磁気ヘッドは、高速移動の疲れからか不幸にも黒塗りの磁性体に衝突してしまう。 磁気ヘッドをかばいすべての責任を負った>>780に対し、HDDの主、オペレーティングシステムWindowsに言い渡された回復の条件とは…。
0790デフォルトの名無しさん2016/11/19(土) 08:58:20.18ID:leXZmGhT
普通にマージソートでしょ
アルゴリズムの本を読み返してこようね
0791デフォルトの名無しさん2016/11/19(土) 08:59:29.36ID:leXZmGhT
>>785が正しい解決策だしHaskellなら遅延読み込みなんで普通にできるはず
0792デフォルトの名無しさん2016/11/19(土) 09:25:14.41ID:nvUvA6H6
>>773です。要はこういう事です。

純粋な計算ならば必要になるまで遅延されます。
IOアクションそれ単体も、必要になるまでアクションさせず、かつソース内の見た目は、
アクションと結果の利用がそれぞれ塊になって分かれるようにするのも簡単です。

しかし、そのIOアクション群に open/close (あるいは前処理/後処理)が必要になると、
両者を分ける方法が思いつきません。
各IOアクションに open/close を付けると、今度は複数のアクションの結果が必要な場合に、
無駄な open/close が行われてしまいます。


>>774 人によっては例が悪かったと思います。
データベースへのアクセスで考えてみてください。
1回の open/close の間にテーブルAとテーブルBから一つずつ何かデータを取り出します。
その取り出したデータを使って何かをしたいが、テーブルA由来のデータのみ必要な場合もあれば、
両方のテーブルからのデータが必要な場合もあります。
前者の場合、テーブルBへのアクセスは必要ないが、>>773 の初めの例の方法だとそちらにもアクセスしてしまいます。

そんな一瞬で終わるアクセスが無駄だとかグダクダ言うなとおっしゃるのなら、
インターネット越しのアクセスなど時間のかかるIOアクションで考えてみてください。


>>775
ひとつの意見として受け止めますが、私個人は書き手と読み手の両方の努力、精進が欠かせないと思っています。


>>776 >>777
すいません、評価環境という文脈がよく分かりません。
私の例で言うと、アクションの結果を利用している部分が評価環境の文脈ということでしょうか。
それとも、IOアクションしている部分が評価環境の文脈なのでしょうか。
0793デフォルトの名無しさん2016/11/19(土) 09:41:28.84ID:leXZmGhT
a 型の返り値をアクション IO a の正体は理念的には

WorldState -> (a, WorldState)

という関数なわけ。do記法内部の各ステップは裏で
WorldState(=評価環境)を変換しつつ次へ受け渡してる
隠蔽されてるがaの計算に影響を与える評価環境、これが文脈
0794デフォルトの名無しさん2016/11/19(土) 09:59:56.91ID:nvUvA6H6
>>793
評価環境の文脈の意味は分かりました。

しかし、すいません。
その評価環境の文脈という考え方をどのように利用すれば
私の問題が解決するのかがまだ分かりません。

あるいは、解決不可能ということを仰っているのでしょうか。
0795デフォルトの名無しさん2016/11/19(土) 10:09:10.27ID:leXZmGhT

>>777>>776へのレスだろうし>>776は別に誰に対してのレスでもなかろ
0796デフォルトの名無しさん2016/11/19(土) 10:10:41.37ID:leXZmGhT
ありゃなんか途中で打ち直したら変な風になっちゃったな
「だろうし」は「だし」ね
0797デフォルトの名無しさん2016/11/19(土) 10:14:39.11ID:nvUvA6H6
>>795
ごめんなさい。
次からは、私へアンカーが打たれているレスにのみご返事します。
0798デフォルトの名無しさん2016/11/19(土) 10:38:45.99ID:9ou0Tz/L
40GBのデータを遅延読み込みしたら
即スタックオーバーフローでしょ
0799デフォルトの名無しさん2016/11/19(土) 11:42:51.43ID:L++mh2K9
>>793
aがWorldStateの外にあるから面倒なんだよな
全てがWorldStateの内部にあったらいいのに
0800デフォルトの名無しさん2016/11/19(土) 12:08:17.07ID:ygHmZoSw
HDBCなどのライブラリのいわゆるデータベースへのconnectをする関数はモナド上でそこに出くわした時点で本当にアクセスするのだろうか?
後の行で本当にそれに関わった値が評価された場合だけ実際に通信するのではないだろうか

つまりテーブルBのデータを必要な値が評価されるのみのケースでは、その上にテーブルAへのアクセスの指示が書いてあったとしても、テーブルAへのアクセスが発動することはない

モナドでプログラマが把握できるのは(必要とされた場合の)実行順序だけであり、本当にその一行が実行されるかは判らない。
ランタイムシステムが、それを評価しないと答えが出せないときのみ、答を出すのに最低限必要な部分までだけ評価を進める。その行(の値)が要らないで終わるならスルーされる

しかし基本は実測だ。事件は会議室で起きているのではない。現場百篇。データベースへのアクセスログと睨めっこだよワトソン君
0801デフォルトの名無しさん2016/11/19(土) 13:01:13.05ID:L++mh2K9
静的型としては実測ではなくコンパイル時に知ってた方が圧倒的有利と思われたが
そういうのをスルーして成功したのがPythonだった
0802デフォルトの名無しさん2016/11/19(土) 13:12:21.64ID:57c4ddvC
関数型は間違いは少なくなるかもしれないが性能見積もりが困難という解釈でいいのかな
性能低下も間違いのうちに入るのじゃなかろうか
0803デフォルトの名無しさん2016/11/19(土) 13:19:12.41ID:leXZmGhT
>>802
>関数型は間違いは少なくなるかもしれないが性能見積もりが困難という解釈でいいのかな

性能で問題になるのは時間より空間でそれはHaskellの遅延評価のせい
OCamlで性能見積もりが困難だという話はおよそ聞いたことがない
0804デフォルトの名無しさん2016/11/19(土) 13:30:47.62ID:ygHmZoSw
込み入った話はHaskellマスターのtanakhさんに訊くべきだ。私は到底Haskellをマスターしたとはいえない糞雑魚なのでね…
0805デフォルトの名無しさん2016/11/19(土) 15:23:51.24ID:GLukN6SU
Haskellマスターのtanakhさんが
AtCoderでC++を使ったのが全ての答え。
0806デフォルトの名無しさん2016/11/19(土) 16:42:56.18ID:WZW0gWLh
IOモナドはStateモナドの状態を実行環境に置き換えたものという理解でよろしいか?
0807デフォルトの名無しさん2016/11/19(土) 17:13:35.27ID:B0NaVLvy
HDD直接アクセスってシステムコールでも呼ぶの?
普通OSがファイルの一部あるいは全部をメモリ上にロードして
それを読み書き終わったものをOSがHDDに必要に応じて書き出すんじゃないの
0808デフォルトの名無しさん2016/11/19(土) 17:32:00.30ID:ygHmZoSw
State Threadモナド(ST for short)の、(安全には)モナドを脱出して純粋なHaskellコードへ帰って来れない版がIOモナドです。Stateモナドとは区別してください
0809デフォルトの名無しさん2016/11/19(土) 19:59:58.50ID:L++mh2K9
魔法マスターがなぜか銃を乱射するのはよくある話
0810デフォルトの名無しさん2016/11/20(日) 04:03:02.88ID:e66ZIrIv
型シグニチャに現れる ~ ってどういう意味?
0811デフォルトの名無しさん2016/11/20(日) 04:34:12.04ID:y28VMjGS
コンパイラのエラーメッセージか、TypeFamilies拡張で使う
両辺に現れる型の等価性(equality)を主張する記法
0812デフォルトの名無しさん2016/11/20(日) 16:55:46.50ID:bc5Pq5Dx
pythonの機械学習ライブラリであるtensorflowを
Haskellで書き直したものがgithubに上がってるけど
コーディングの美しさが溜め息の出るレベルだ。
https://github.com/tensorflow/haskell
読むだけでHaskell力が高まりそうだからみんな見た方がいい。

調べたらgoogle社員のHaskellerが作ったみたい。
0813デフォルトの名無しさん2016/11/20(日) 17:17:48.23ID:FAU7VgEK
コードが美しいとか言われてもimportやプラグマが多いと萎える
0814デフォルトの名無しさん2016/11/23(水) 19:35:05.94ID:8RkzW8R2
三ヶ月後のメンテナンス時のストレスの低さを美しさと定義します
0815デフォルトの名無しさん2016/11/23(水) 19:53:04.24ID:bzle2eVB
stack new sample コマンドで作られたプロジェクトの
sample.cabal ファイルにある library の項をコメントアウトしたら、
stack build コマンドが通らなくなりました。

stack build -v コマンドで詳細を表示させても、
ビルドが通らなくなった原因は分かりませんでした。

cabal ファイルに library の項が必要だという情報が、
どこかのファイルに書かれているのでしょうか。
0816デフォルトの名無しさん2016/11/23(水) 21:04:08.50ID:6lcDdPCf
コードを読む前に仕様を知ってたら簡単に読める
読めない奴はおそらく読みながら仕様を把握しようとするから読めない
0817デフォルトの名無しさん2016/11/24(木) 01:48:40.96ID:uCqvKhkZ
>>815
エラーメッセージくらい載せては?
executableの項のbuild-dependsにエントリされてる"sample"は
このsampleパッケージ自身が提供するライブラリ=コメントアウトしたlibrary項
を意味してるから、少なくともこれはエラーの原因になるはず。
0818デフォルトの名無しさん2016/11/24(木) 20:13:03.72ID:NKA7Qvmd
>>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 コマンドを使うと長々とメッセージが出力されますが、
どの部分がエラーを示しているのか分かりませんでした。
0819デフォルトの名無しさん2016/11/24(木) 20:15:05.92ID:NKA7Qvmd
>>818
もしかして、メッセージに一部文字化けしている部分があるかもしれません。
そこは本来はただの空白文字なので気にしないでください。
0820デフォルトの名無しさん2016/11/28(月) 21:15:44.92ID:/+1ypXpu
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]"

と印字される。

もちろんこれは構文エラーだが、こんなことを実現する方法はある?
0821デフォルトの名無しさん2016/12/01(木) 01:26:47.70ID:dPmAOjzF
単発失礼します。
stackでtypoして変なパッケージをインストールしてしまった時に
削除するのってどうするんですか?
0822デフォルトの名無しさん2016/12/01(木) 02:22:05.71ID:RWGHokMu
ディスク容量をどうしても節約したいとかじゃなきゃ削除する必要なんかそもそもないだろ
設定ファイルのtypo直せばそれでいい
0823デフォルトの名無しさん2016/12/01(木) 03:17:49.04ID:mD//1kpz
で、ディスク容量どうしても節約したいんですけど、削除するのってどうするんですか?
0824デフォルトの名無しさん2016/12/01(木) 03:35:09.78ID:RWGHokMu
ほらよ。

https://stackoverflow.com/questions/38636436/how-to-uninstall-a-haskell-package-installed-with-stack
0825デフォルトの名無しさん2016/12/01(木) 14:26:03.54ID:L5XSy+iF
丁寧にありがとうございます
実は練習がてらネットに落ちてる軽めの問題を解くために
プロジェクトを作らず、libraryが必要になる度に
「stack install 〇〇」してコンパイルせずにrunghcで回答していたのですが
「stack install numbers」と間違えて「stack install primes」と打ち込んだところ
悲劇的な事に「Data.Numbers.Primes」がダブったようで
とあるコードでrunghcが動かなくなってしまいました。
・・・と書いている途中にもう一度「stack install numbers」をしたら
何故かもう一度libraryのダウンロード&インストールが始まってrunghcも通りました。
結局アンインストールは出来ていなさそうですが解決してしまったようです。
お騒がせしました。
0826デフォルトの名無しさん2016/12/01(木) 16:00:05.46
なんか知らんけどゴニョゴニョしてうまいことやってくれるのがstackなんでしょ
0827デフォルトの名無しさん2016/12/01(木) 19:42:05.67ID:RWGHokMu
>>825
解決したんならもういいと思うけど、
パッケージ名を指定してモジュールをimportできるよ
0828デフォルトの名無しさん2016/12/01(木) 19:48:00.95ID:RWGHokMu
{-# LANGUAGE PackageImports #-}

import “numbers” Data.Numbers.Primes

特定ヴァージョンをインポートしたい時は
パッケージ名をヴァージョン付きにすればいい

import “packagename-x.y.z” Some.Module

とかな。
0829デフォルトの名無しさん2016/12/03(土) 18:31:40.23ID:LlRr0ykU
accumArrayの存在意義がわからん・・・
0830デフォルトの名無しさん2016/12/04(日) 00:08:43.14ID:VB8xM7ox
漏れはData.Sequenceの存在意義がわからん
0831デフォルトの名無しさん2016/12/04(日) 01:39:44.55ID:ylt2eQeo
C++のpush_back()できるようにしたリストでないの
0832デフォルトの名無しさん2016/12/04(日) 10:47:47.19ID:iPD09Yju
リストの前後に同じようにappendしてかなきゃいけないときがあるだろ

小さいものなら(前半リスト、後半逆順リスト)みたいな風にして管理できるが
まあ素直に両端キュー使ったほうがいい
0833デフォルトの名無しさん2016/12/04(日) 13:27:17.57ID:V6IaL/Kz
ファイルにたとえるとfseekの存在意義と同じ
0834デフォルトの名無しさん2016/12/05(月) 23:29:18.28ID:6vkhaohh
写経向けのコード集のようなサイトはありますか?
ProjectEulerのような競技ブログラミング的なコードではなく
入出力を扱う簡易アプリケーション的なプログラムでお願いします。
0835デフォルトの名無しさん2016/12/06(火) 00:04:44.58ID:YoH2PHvZ
>>834
なんで、そんなの求めてるの?
0836デフォルトの名無しさん2016/12/06(火) 00:07:50.92ID:z2yWW9Nx
悟りを開くためです。
0837デフォルトの名無しさん2016/12/06(火) 00:11:16.07ID:bK/cN5Vq
http://i.loveruby.net/ja/stdhaskell/samples/
ちと古いが
0838デフォルトの名無しさん2016/12/06(火) 00:53:14.40ID:/K6LEbiX
>>837
出来ればデータ型を使ってじゃんけんゲームを作ったり
動かして遊べるような簡単なプログラムを
Haskellに精通した人が書くとこうなる。
みたいなコード集が理想です。
0839デフォルトの名無しさん2016/12/06(火) 07:58:32.42ID:ej7InLr+
パクリ屋か
0840デフォルトの名無しさん2016/12/06(火) 10:06:02.34ID:RLRg255J
まずは自分で書くべきだと思う
書いてここにURL晒せば勝手にレビューされるよ
0841デフォルトの名無しさん2016/12/07(水) 02:00:07.08ID:0WE5r4ET
そうします。
0842デフォルトの名無しさん2016/12/07(水) 09:27:55.28ID:t44ep7+e
WindowsでHaskellするなら、IDEは何を使うのがいいでしょうか?
0843デフォルトの名無しさん2016/12/07(水) 09:34:35.61ID:DclcCWLN
geany
0844デフォルトの名無しさん2016/12/07(水) 10:10:25.19ID:aotafFF2
Atomでghc-mod関連プラグイン入れるのがそれなりに快適
0845デフォルトの名無しさん2016/12/07(水) 14:30:59.21ID:h31NqZEM
>>838
じぶんはAOJが好き
語学の勉強と同じで、中学生程度の言い回しでいいから、とにかく書いてみる。
それから名人たちのコードを鑑賞して、あまりの格差に愕然とする。
気を取り直していいところをパクって次へ、以下ループ。
0846デフォルトの名無しさん2016/12/07(水) 19:51:01.71ID:9owFdVES
IntelliJはもうだめか?
0847デフォルトの名無しさん2016/12/07(水) 21:18:26.77ID:VZ50/vQU
>>845
おおっ!!
面白そう!!

そして"Hello World"で即詰んだw
0848デフォルトの名無しさん2016/12/08(木) 02:30:35.85ID:u2dNiCpn
AOJを勧めてだんだんと競プロerに仕上げていくのですね
0849デフォルトの名無しさん2016/12/08(木) 05:48:28.18ID:Sb9Sgrh7
Haskellで競プロ、苦しくないですかね…
手を後ろに縛られて十徳ナイフを括り付けられて闘わされるみたいな気分
0850デフォルトの名無しさん2016/12/08(木) 08:36:13.29ID:5QNwH8zE
他言語では例題2くらいに出る入力の処理が
Haskellの入門書だと
第8章でやっと出る中級者テクニックみたいな扱いだからな。
0851デフォルトの名無しさん2016/12/08(木) 09:06:17.74ID:WWhHiD/9
第1章でdoを使わない縛りは強制性があるのかそれとも単なる自主規制か
0852デフォルトの名無しさん2016/12/08(木) 10:14:41.75ID:QjRH9I62
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
0853デフォルトの名無しさん2016/12/08(木) 11:43:51.68ID:7PHkchZ4
>>852
テストデータが

3 2
2 2
5 3
10 2
0 0

だと...
0854デフォルトの名無しさん2016/12/08(木) 12:13:29.34ID:QjRH9I62
>>853
返答ありがとうございます。
outputは自分の出力ではく正解例だったと理解しました。
地道に書き直したいと思います。
0855デフォルトの名無しさん2016/12/08(木) 16:07:18.25ID:va2iI+cZ
{-# 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拡張使えよと怒られます
ご教示お願いします
0856デフォルトの名無しさん2016/12/09(金) 13:47:36.49ID:tvJsjzEB
>>61
遅レス
別言語だけど、そういうのがエラーにならないから
苦しんだりする。
0857デフォルトの名無しさん2016/12/09(金) 13:49:42.20ID:tvJsjzEB
>>850
完結(閉じる)させよう完結させようとしてるからじゃね?
あと遅延評価。
0858デフォルトの名無しさん2016/12/09(金) 13:51:17.58ID:K0qlOadl
文字列としてソートして済ませようと横着したせいなのだからきちんと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

くらいで充分では。
0859デフォルトの名無しさん2016/12/09(金) 18:22:07.66ID:2XG9ELCp
先輩助けてください><
stack install pandocやっても全然インストールが終わりません
6時間ぐらいやってやっと最後のpandocのビルドに入ってるんですがこれも2時間ぐらい放置しても終わりません
もう面倒くさいのでインストールしたパッケージを削除したいんですが
~/.stack/indices/Hackage/packages/の中のディレクトリを全部rmで削除しちゃっても問題ないですか?
インストール済みのパッケージ一覧ってどうやって確認するんでしょうか?
ちなみにstack setup;stack install pandocしかコマンドは打ってません
0860デフォルトの名無しさん2016/12/09(金) 18:22:53.02ID:s+wOeJ/3
モナド変換子の順番ってどういう考え方をして決めればいいの
例えば Reader, State, Writer の3つを使いたい場合は?
さらに複雑にError, Cont, IO なども組み合わせるとしたら?
いまいちイメージがつかめない
0861デフォルトの名無しさん2016/12/09(金) 19:12:53.77ID:p8RNi3Am
多重継承に似てるね
同じ考え方でいいならごちゃごちゃ考えるより禁止した方が早いというイメージ
0862デフォルトの名無しさん2016/12/09(金) 20:29:18.89ID:EUMrXHYZ
モナド変換子は銀の弾丸ではなかった
0863デフォルトの名無しさん2016/12/09(金) 21:31:32.26ID:jpcAk/L4
Windowsにhmatrixインストールできん……
https://github.com/albertoruiz/hmatrix/blob/master/INSTALL.md
に従ってgslで入れようとしているのですが、うまくいきません。blasもlapackもdllファイルがあればいいのか、それともdll.aが必要なのか教えてください
0864デフォルトの名無しさん2016/12/10(土) 13:21:36.17ID:Wk3rTOSj
WindowsでgccとかghcとかやりたくないからPythonの需要があるんだな
0865デフォルトの名無しさん2016/12/10(土) 13:52:08.59ID:FMtwqCBj
Haskellライブラリ所感2016
http://syocy.hatenablog.com/entry/haskell-library-2016
0866デフォルトの名無しさん2016/12/10(土) 21:09:59.52ID:XdnKR7fM
明示的に並列・平行処理をプログラムしていなくても、
ghc にコンパイルオプション -threaded や -with-trtsopts=-N を渡す意味ってある?
(parallel や repa などのパッケージを一切使っていないとして)

こうすればメインプログラムはシングルコアでも、GC がマルチコアで走るとか。
0867デフォルトの名無しさん2016/12/10(土) 22:03:47.42ID:TvX35Fp0
>>863
自己解決しました。cabalで最新のhmatrixを入れるとlibgfortranを読み込んでくれませんが、一つバージョンの低いものならマニュアル通りで上手くいきました。
0868デフォルトの名無しさん2016/12/11(日) 20:56:56.63ID:UUDzf3sv
Template-Haskellなどを使って
2,000,000までのフィボナッチ数のリストを
コンパイル時に生成しておく方法ってあります?
メタプログラミングを楽しく学びたいなと思っても情報が少なくて
0869デフォルトの名無しさん2016/12/14(水) 23:24:27.97ID:orbg+kS2
teratailのおじさんに聞いてみれば
0870デフォルトの名無しさん2016/12/15(木) 12:26:23.12ID:7KRIzock
https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj?hl=ja
0871デフォルトの名無しさん2016/12/16(金) 00:23:50.01ID:cnzBJNV1
fay使っている人いる?
0872デフォルトの名無しさん2016/12/17(土) 20:09:38.06ID:WuIMYiWl
Haskell High Performance Programming
https://www.packtpub.com/application-development/haskell-high-performance-programming
今は忙しくて時間がないが、正月休みにでも読んでみたい。
0873デフォルトの名無しさん2016/12/17(土) 20:35:28.77ID:yLbp/UkZ
>>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/9781786464217/1/ch01lvl1sec09/Memoization+and+CAFs

そ の 発 想 は な か っ た !
英語わからずコード眺めるだけでも目から鱗だなこれ。
0874デフォルトの名無しさん2016/12/17(土) 21:15:04.44ID:+cQgdhZ9
で、何やってるのよ?
フィボナッチ数列の第k項を計算している?
0875デフォルトの名無しさん2016/12/17(土) 21:33:00.74ID:OM5N9qzB
定数的な未計算リストの要素取得として実装してるのか
理解するのに30分くらいかかった
0876デフォルトの名無しさん2016/12/17(土) 22:54:27.37ID:X2n4kSym
え、ただのメモ化だと思うんですけど(名推理)
0877デフォルトの名無しさん2016/12/17(土) 23:36:22.22ID:AzKtkJ0Q
>>873
すごいな高速だ

http://melpon.org/wandbox/permlink/PpaIwJYU3CAsY8Cp
http://melpon.org/wandbox/permlink/iik6Ss9TnJwdAyBE
http://melpon.org/wandbox/permlink/8c31SdcrKfjoDkPq
0878デフォルトの名無しさん2016/12/17(土) 23:38:55.80ID:+cQgdhZ9
C#とどっちが速いの?
0879デフォルトの名無しさん2016/12/18(日) 00:14:05.08ID:KFsMSIdd
C#
0880デフォルトの名無しさん2016/12/18(日) 02:59:30.30ID:F22674nM
フィボナッチ数列の定義をほぼ変えずにメモ化してるところがかっこいい

ただfib 0 = 0 であって欲しいと思うんだけどな
0881デフォルトの名無しさん2016/12/18(日) 04:13:03.23ID:5HKYrKlu
速さと可読性の両立が美しいね
こういうコードを書きたくてHaskellを始めた事を思い出したよ
0882デフォルトの名無しさん2016/12/18(日) 06:34:09.87ID:KFsMSIdd
理解するのに30分かかる人がいたので可読性に優れるかは不明
0883デフォルトの名無しさん2016/12/18(日) 08:36:34.04ID:hTsk1Lv9
>>882
プログラムソースの可読性というのは、
いつでも万人に容易に理解できるということではありません。
メインとなる読者を想定した上で問題にすべきものです。
そして想定されるソースの読者は状況によって変わります。

たとえば、>>873 のコードは(出典元の本を読めばわかりますが)、
メモ化の仕組みや方法が理解できた暁には容易に読めるようになっています。
>>880 がその一つの証拠です。
本を読み終えた者にとっては十分に可読性が高いと言えるでしょう。

もし >>882 の理由で可読性が乏しいと言うのなら、
たとえば Hackage のライブラリのコードは、そのほとんどについて
可読性が乏しいことになってしまいます。
0884デフォルトの名無しさん2016/12/18(日) 09:44:11.87ID:tEwqUsZ4
>>875
おまい優秀だな
おれは1時間かかった
orz
0885デフォルトの名無しさん2016/12/18(日) 13:37:45.40ID:L9+Ra1Z5
これがゲームなら100時間超えた方がコスパ優秀、1時間で終わったらクソゲーになる
0886デフォルトの名無しさん2016/12/18(日) 14:48:05.87ID:2kBZC6Xk
http://i.imgur.com/GHKc5ec.jpg
0887デフォルトの名無しさん2016/12/18(日) 17:01:21.92ID:UVlvUqtT
いいか
1時間で終わるものでも何回でもしたくなるものが神ゲーなのだ
100時間かかろうがもう二度としたくないと思われたら負けなのだ
0888デフォルトの名無しさん2016/12/18(日) 20:26:11.80ID:KFsMSIdd
ファミコンのマインドシーカーとかな
0889デフォルトの名無しさん2016/12/20(火) 03:50:03.60ID:MHiDziMA
頭を取り出して、とある判断に依って残りの部分から一つだけ要素を削って、今取った頭を尻につけて再帰するとします

f (c:cs) = f $ (nanikaDrop c cs)++[c]

この場合、リストだと計算量膨れ上がってしまいます(長いリストの末尾に追加は不適)

うまい解決策はありませんか?(Sequenceなど大袈裟なもの持ち出さずとも済むやつ)
0890デフォルトの名無しさん2016/12/20(火) 04:09:51.89ID:+ciV1zGy
((cs:) . (c:) )[]
0891デフォルトの名無しさん2016/12/20(火) 04:34:56.31ID:+ciV1zGy
上の書き込みは撤回。
foldr (:) [c] cs で試してみて。
0892デフォルトの名無しさん2016/12/20(火) 11:31:59.14ID:M7yybZ5b
f [c]
= f $ (nanikaDrop c []) ++ [c]
= f [c]
計算量を有限にする解決策がない
0893デフォルトの名無しさん2016/12/20(火) 16:23:54.11ID:/9zIrQ23
既存のリストの末尾に追加するんじゃなくて
ストックするリストをもう一つ設ける感じの定跡があったような

f cs = f' cs []
where f' [] ds = hoge
f' (c:cs) ds = f' (nanikaDrop' (c:cs) ds) (c:ds)
0894デフォルトの名無しさん2016/12/20(火) 16:59:59.39ID:M7yybZ5b
どれをdropするか判断するため、nanikaDrop'はdsの中身も調べる
dsは逆順だから、元のバージョンと (計算量だけでなく) 計算結果が異なる可能性がある
0895デフォルトの名無しさん2016/12/20(火) 21:02:32.59ID:CJ2gtWfF
http://codeforces.com/contest/749/problem/C
この問題に似てる(だけどちょっと違うか)
0896デフォルトの名無しさん2016/12/21(水) 01:23:38.58ID:PxT7y6eE
>>889
データ列の並び自体には変更がなくて、参照開始位置だけが変わるんだから
配列とインデックスのペアを渡すようにすればいいんじゃね
呼び出しのときにwhere節でインデックス+1と範囲チェックして
0897デフォルトの名無しさん2016/12/22(木) 02:04:03.61ID:8qaRbIfF
GHCのコードを眺めると
Haskellって変に関数型っぽさを意識しなくても
元々の言語の力が強力だから
フリーダムに破壊的代入しまくっても結構大丈夫そうだな。

書き手の自主規制は
「unsafe○○を使わない」くらいで良さそう。
0898デフォルトの名無しさん2016/12/22(木) 02:45:33.69ID:6SQ/7lyG
>>897
>フリーダムに破壊的代入
これって具体的にはIORefとかIOArrayとかのこと?
0899デフォルトの名無しさん2016/12/22(木) 19:40:41.52ID:mj10TB7n
コピーと参照の違いを教えるのも教わるのも面倒臭い
IORefを非公式な存在にしておけば説明を省略できる
0900デフォルトの名無しさん2016/12/23(金) 12:25:30.71ID:WPc1DkhL
IORefどころかIO自体が非公式に近いせいで
クイックソートやフィボナッチ数列は書けるけど
入力の受け取りは分かりませんという初心者が大量発生してるのも問題だよね。
0901デフォルトの名無しさん2016/12/23(金) 13:09:51.23ID:KuQ5z2Nq
副作用あるけどリファレンスがない言語といえばBASICを思い出す
初心者には良いかもしれない
0902デフォルトの名無しさん2016/12/23(金) 14:15:24.30ID:Tuuf9WFQ
添字が文字列(String)での配列を作りたいんですが
0903デフォルトの名無しさん2016/12/23(金) 14:18:31.35ID:kNavPx7f
まず、それは配列とは言わないのだが
Data.Mapでもハッシュ表でも使ったらよい
0904デフォルトの名無しさん2016/12/23(金) 15:21:28.33ID:Tuuf9WFQ
実は既にData.Mapで作ったけど
O(logN)では速度不足で困ってるんよ。
配列は無理となると八方塞がりだな全く。
0905デフォルトの名無しさん2016/12/23(金) 15:53:25.75ID:KuQ5z2Nq
でもGCはO(N)だから
O(log N)でも遅いならGCが不要な言語が必要なのでは
0906デフォルトの名無しさん2016/12/23(金) 15:57:41.36ID:CW+qY3ex
ないなら自分で作ればいいのよ
文字列に規則性を要請してハッシュ化したものを剰余で制限して固定長配列に詰め込むみたいな
任意の文字列なら原理的に無理だ
0907デフォルトの名無しさん2016/12/23(金) 17:43:33.87ID:wkM1H3Zq
速度が出ないのはString = [Char]を使ってるからという可能性は
0908デフォルトの名無しさん2016/12/23(金) 18:31:05.70ID:XiISUE9C
Text と ByteString って計算量的にどっちが強いの?
09099042016/12/24(土) 03:16:30.82ID:mtrCHwqX
結局、Data.Map.Strictではなく
Data.HashMap.Strictに変更したら高速化出来たわ。
どちらもO(log N)なのに実行速度が10倍違うという謎。
0910デフォルトの名無しさん2016/12/24(土) 07:05:16.24ID:Y/bvEAMg
謎ですね

Data.Map.Strict
https://hackage.haskell.org/package/containers-0.5.9.1/docs/Data-Map-Strict.html
> 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/Data-HashMap-Strict.html
> 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.
0911デフォルトの名無しさん2016/12/24(土) 11:02:55.07ID:uh1BkFoy
10倍遅いのは客観的事実だとしても、O(log N)だから遅いというのは主観でしょ
0912デフォルトの名無しさん2016/12/24(土) 11:07:27.34ID:I8duN72O
おもしれー
0913デフォルトの名無しさん2016/12/24(土) 12:15:27.26ID:jPmKUoCt
>>910

そういう嫌味は通じないと思うよ。
0914デフォルトの名無しさん2016/12/24(土) 19:02:03.91ID:hxBGGNm6
本当だよな
この程度で質問とかされるとレベル下がる
(HashMapなんて知らなかったとは言えない・・・)
0915デフォルトの名無しさん2016/12/24(土) 22:11:20.47ID:uh1BkFoy
レベルって本当に存在するのか
存在しないものを数値化してもニセ科学にしかならない
0916デフォルトの名無しさん2016/12/25(日) 00:08:15.90ID:ZRKIJIGh
>>910
HashMapはarrayがあるから挿入や削除のコスト高そう
0917デフォルトの名無しさん2016/12/25(日) 08:52:13.69ID:WFXIwNvn
stack のパッケージの lts のバージョンがけっこう頻繁にアップしています。

わたしはちょっとした実験にも stack new でプロジェクトを作って行っているのですが、
そうすると、~/.stack/snapshots にいつくものバージョンのライブラリが作られます。

昔作ったバージョンの分はもう不要なのですが、これはシェルで削除しても問題ないでしょうか。
他にいっしょに削除、または書き換えるべきファイルはあるでしょうか。
それとも、このような場合は stack のコマンドを使うべきでしょうか。
0918デフォルトの名無しさん2016/12/26(月) 01:52:03.42ID:JnmwQ0pE
AOJのHaskellのメモリ緩和が2.0倍なのはイジメですか?
「遅延評価なんかさせねぇぞ」という
緩やかな圧力を受けている気がしますが気のせいなのですか?
0919デフォルトの名無しさん2016/12/26(月) 04:26:12.46ID:zGEIM/Ml
AOJはUIがスマホに冷たいのでやってない
0920デフォルトの名無しさん2016/12/26(月) 08:33:06.36ID:t1RDiD7h
AOJでHaskell提出がゼロ件の問題にでもブチ当たったのか?
0921デフォルトの名無しさん2016/12/27(火) 20:27:17.07ID:AVwpVaHj
解けないと思った問題はだいたい提出ゼロ件だから困る
0922デフォルトの名無しさん2016/12/28(水) 06:15:45.77ID:WV6f4N8v
HaskellでCodinGameっていうのやってきたけど
プログラミング言語ってのは適切に選択すべきだな
0923デフォルトの名無しさん2016/12/28(水) 06:31:11.88ID:gfblSjYR
Haskellは不適切だったのか?
0924デフォルトの名無しさん2016/12/28(水) 14:45:45.05ID:eesspTrt
型安全よりメモリや時間の制約の方が大事という本音が出た
型安全は建前にすぎない
C++やJavaScriptの弱点を探して偶々見つけた建前
その建前で一番得をしたのがHaskellだったが
0925デフォルトの名無しさん2016/12/28(水) 16:53:59.33ID://kCk9pj
型安全の恩恵にあずかってる時は気付かないもの
0926デフォルトの名無しさん2016/12/28(水) 17:42:32.59ID:mX+MonYx
走り出してからエラー起こすくらいならコンパイルで止めてほしい

その意味でheadは苛々する
0927デフォルトの名無しさん2016/12/28(水) 18:07:16.22ID:dxHkwKr/
getterを使うなというデザインパターン
getterはエラー値を返すか例外を投げる
コールバックはエラー値を渡して呼び出すくらいなら何も呼び出さない
0928デフォルトの名無しさん2016/12/28(水) 22:02:33.89ID:+yS2yZq8
Haskellらしさなんて望まないし
do記法の乱発でも構わないから
色々なコードをHaskellで書きたいのが本音だけど
そういうコードって公開を恥と思っているのか
参考になるコードが表に出ないのよね。
0929デフォルトの名無しさん2016/12/28(水) 22:13:57.46ID:QsQB820n
マニュアル関数リファレンス見るだけで書ける天才しか関わってないんだよ
0930デフォルトの名無しさん2016/12/28(水) 23:25:32.20ID:g7cKfXNx
参考にならないHaskellらしくないコードは大量に晒されてるのにな
競プロ系でヘボコードの量産と公開は大量になされてるし
GitHubなどでの個人リポジトリはゴミ溜めと化しててショッボイコードいっぱい公開されてるし
0931デフォルトの名無しさん2016/12/29(木) 01:04:41.73ID:CZgr2A6D
Project Eulerを
オリジナリティ皆無のコードで解いて悦に浸ってる人ばかりだもんな。

授業のノートみたいな記事が乱立していて
実際に身につけたHaskell技術で何かしてる雰囲気が一切感じ取れない。

将棋ソフトの大会でHaskellの参加者0名なのも納得だよ全く。
0932デフォルトの名無しさん2016/12/29(木) 01:41:49.16ID:958/OC8Q
Search ・ tetris ・ GitHub
https://github.com/search?utf8=%E2%9C%93&;q=tetris&l=Haskell

たしかに参考にならんな
0933デフォルトの名無しさん2016/12/29(木) 12:34:13.41ID:j7+IUMHV
非公開なのはコードだけじゃないんだろ
母国語も知られたくない場合に世界標準語Haskellを使う
0934デフォルトの名無しさん2016/12/29(木) 13:50:05.11ID:j7+IUMHV
属人性排除は何も生み出さないが人格攻撃の回避等の意味はある
0935デフォルトの名無しさん2016/12/29(木) 16:51:08.32ID:LQ9PzYon
1週間かければ洗練されるコードよりも、今動くゴミ
0936デフォルトの名無しさん2016/12/29(木) 18:10:51.24ID:AiXb9Xql
ワードサラダボットが稼動中かな?
0937デフォルトの名無しさん2016/12/29(木) 19:13:20.13ID:zRLSWr5O
嫌いな言葉は未来って言われたらどうする
A 矛盾を指摘する
B あだ名をつける
0938デフォルトの名無しさん2016/12/29(木) 20:01:04.20ID:vDsL3Xsf
俺は日常の計画をIO型で記述している
0939デフォルトの名無しさん2016/12/29(木) 22:02:36.54ID:kSKj0BmQ
ワードサラダボット稼動中かな?
0940デフォルトの名無しさん2016/12/31(土) 05:44:27.97ID:UcNaXnZh
HaskellでAndroidアプリでも作ろうかと思ったけど
どの記事もGUI周りに触れてないから難しいな。
Hello Worldを表示する簡単なアプリの作り方だけ
サクッと解説してるような記事があれば教えて欲しいね。
0941デフォルトの名無しさん2016/12/31(土) 11:08:57.19ID:kRv/DXPo
stack で最新の LTS のバージョン番号を
シェルの中から簡単に調べる方法はありますか?
目的はそのバージョン番号を別のコマンドに入力することです。

たとえばデフォルトでは新たに stack new すれば、
その際に LTS のバージョン番号を知ることができますが、
バージョン番号を知ることだけが目的ならば大げさです。

また、stackage のサイトのトップページに載っていますが、
これはシェルの中に居ながら知るという目的には合いません。
0942デフォルトの名無しさん2016/12/31(土) 19:24:54.85ID:EfF4/AjA
>> 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
09439422016/12/31(土) 19:30:45.21ID:EfF4/AjA
ごめんコマンド途中で千切れた。
http://lpaste.net/2827629961710403584
0944デフォルトの名無しさん2016/12/31(土) 19:31:23.52ID:EfF4/AjA
>>917
シェルで削除してよいと思う。
0945デフォルトの名無しさん2017/01/03(火) 23:00:57.32ID:8FCGUjqy
今年もコンピュータ将棋選手権が始まるけど
Haskell使いは0人なんだろうなぁ・・・
俺に技術力があれば参加するのに悔しい
0946デフォルトの名無しさん2017/01/03(火) 23:26:08.17ID:4YoTfy16
>>942
メジャーアップデートされていた場合に把握できないので、実用的とは言い難いです。

せっかくのアドバイスでしたがすみません。
ありがとうございました。

バージョン番号だけを確実に得る方法は無さそうなので諦めます。
0947デフォルトの名無しさん2017/01/04(水) 01:27:11.89ID:sXyRenYZ
>>942 のlts-3からさらにメジャーバージョンを削ってltsにすれば
例えば今だと Location: /lts-7.14 が出力されるけどそれじゃいかんの?
0948デフォルトの名無しさん2017/01/04(水) 04:17:15.14ID:6ooS73gi
HaskellはAndroidアプリが作れたら化けそうだよね
上手いこと対応してくれれば良いんだけど
0949デフォルトの名無しさん2017/01/04(水) 08:13:28.15ID:WVq2nDsH
ほぼHaskellの文法でJavaが書けるFregeって言語があるらしいけど
まだ評判みたいのは聞こえてこないな
0950デフォルトの名無しさん2017/01/04(水) 15:37:13.54ID:5EwwSdU6
>>948
GCを明示的に行わないと携帯自身が死ぬと思う
0951デフォルトの名無しさん2017/01/05(木) 15:25:10.38ID:MABferfQ
プロファイリングや最適化の話でよく const center (centre) という単語が出てくるけど、どういう意味?
const center を集める、とかいう使い方も見た。

Web で調べても経済学用語としてしか出てこないんだけど、同じ意味で捉えていいの?
0952デフォルトの名無しさん2017/01/05(木) 15:57:44.99ID:qnGCBE0G
cost centreではなく?
0953デフォルトの名無しさん2017/01/05(木) 16:40:24.11ID:MABferfQ
>>952
ごめん、単に書き間違えただけ。

cost ね
0954デフォルトの名無しさん2017/01/05(木) 22:58:18.77ID:XwpChIXW
Haskell界隈だとコスト集約点という訳語がよく用いられている模様
意味はGHCのマニュアルなどを参照

第5章 プロファイルを取る
http://www.kotha.net/ghcguide_ja/latest/profiling.html
0955デフォルトの名無しさん2017/01/06(金) 05:48:29.36ID:x6C/Cft1
>>954
これ日本haskell界では有名なサイトなの?

http://www.kotha.net/
0956デフォルトの名無しさん2017/01/06(金) 15:16:05.67ID:5l30YHWE
>>951
同じ意味で使われているのではない?
時間や計算機資源はコストという考えを前提に
0957デフォルトの名無しさん2017/01/07(土) 05:10:29.38ID:JXrYQtFJ
>>951
テクニカルタームというより、会計で使う原価部門の概念を流用しているのでは?
Haskellでのテクニカルタームとしての定義は>>954に書いてあるが、もとの意味はコストがどこで発生したかを管理把握するための会計上の区分。
0958デフォルトの名無しさん2017/01/07(土) 12:31:58.32ID:S46XE+Ca
なぜ語源と定義は同じではないのか

モナドの語源はライプニッツと関係ありそう
だがモナドの定義はライプニッツと全く関係ない
0959デフォルトの名無しさん2017/01/07(土) 14:43:46.03ID:QuS23fJI
Data.Sequence 食べず嫌いしてたけど、これ慣れたら便利そうだな
0960デフォルトの名無しさん2017/01/07(土) 15:38:35.59ID:7iPw9gWV
リストは初めからData.Sequenceっぽい挙動にしてくれれば良いのにな。
細かいチューニングが利用者任せなのも普及しない原因だと思うわ。
0961デフォルトの名無しさん2017/01/07(土) 21:53:37.71ID:S46XE+Ca
これ有限の長さしか扱えないから
無限の長さを遅延評価で処理するリストと同じではない
0962デフォルトの名無しさん2017/01/08(日) 09:07:59.66ID:HXGQkJ06
951 だけど、>>954 のリンク先で理解できた。
みんなの言うとおり、ぴったり合うということで用語を流用してるんだね。
シャノンがエントロピーを流用したのと似た感じか。


ありがと。
0963デフォルトの名無しさん2017/01/08(日) 13:41:38.81ID:s45iu22l
<$>、>>、>>= 等より強い$が欲しいから

infixr 5 $+
($+) = ($)

を使ってるんだけど、邪道かな?
0964デフォルトの名無しさん2017/01/09(月) 21:52:35.01ID:Gy5eZLLr
>>963
個人的にはなんでそんなのが欲しいのか知りたい
0965デフォルトの名無しさん2017/01/10(火) 19:00:40.72ID:f/pmyPVx
それらの演算子の右辺に使いたいって話なら (.) で関数合成すりゃ済むような
0966デフォルトの名無しさん2017/01/11(水) 00:32:30.85ID:4yaLCJvM
ごちゃごちゃ右に続けるより、let か where で一行加えた方が良いマナーでなかろうか
命名に英語の知識が若干必要だけど
0967デフォルトの名無しさん2017/01/11(水) 01:56:24.44ID:4yaLCJvM
>去年知ったけど、いつの間にか普通の再帰が自動で末尾再帰最適化(ループへ変換)されて

これマジ!?
0968デフォルトの名無しさん2017/01/11(水) 04:35:07.03ID:qB6hV9pT
マジ。
久しぶりに触ったらなってた。
理屈で言えば単純な再帰は末尾再帰に変換するパターンは決まってるから、変形してコンパイルしてくれてるんじゃないかな。
0969デフォルトの名無しさん2017/01/12(木) 21:38:21.22ID:i0JKcY5G
retainerとは何でしょうか
0970デフォルトの名無しさん2017/01/12(木) 21:44:41.00ID:i0JKcY5G
すいません、>>969 は解決しました。
0971デフォルトの名無しさん2017/01/13(金) 16:27:32.91ID:spW6LWtW
"AAABCC" `combi` 3
(ターン!
["AAA","AAB","AAC","ABC","ACC"]

ってやりたいんですがどうやりますか? 但し一杯生成してから余計なの省くのはナシで
0972デフォルトの名無しさん2017/01/13(金) 16:43:30.15ID:sdnCdlet
combi "AAABCC" 3 = ["AAA","AAB","AAC","ABC","ACC"]
0973デフォルトの名無しさん2017/01/13(金) 17:11:30.27ID:Y/PhWwOJ
>>971
例だけじゃなくて、関数の仕様もできるだけ詳しく教えて
0974デフォルトの名無しさん2017/01/13(金) 17:13:03.00ID:spW6LWtW
けちんぼ!
0975デフォルトの名無しさん2017/01/13(金) 17:20:14.39ID:spW6LWtW
>>973
組合せです。
入力は重複を含む要素のリストで
出力はそのリストからn個選んだリストのリストです
しかし出力に重複は許されません

例えば "AAAAAAA" `combi` 3 == ["AAA"] です

実装に関して、一杯生成してからnubはダメです

例えば "AAAABBB" `combi` 3 == ["AAA","AAB","ABB","BBB"] です
0976デフォルトの名無しさん2017/01/13(金) 17:26:32.27ID:Y/PhWwOJ
>>975
後から重複を取り除く方法全般がダメなの?

それとも、たとえばソートしてからグルーピングして
先頭要素だけ取る方法はOK?
0977デフォルトの名無しさん2017/01/13(金) 17:37:44.30ID:spW6LWtW
出力される各リストは、例えば "AAB" と "ABA" は同じとみなされます(Aが2つ、Bが1つ選ばれているという意味で同じとみなすのです)
0978デフォルトの名無しさん2017/01/13(金) 17:39:24.14ID:spW6LWtW
>>976
それはいいです
0979デフォルトの名無しさん2017/01/13(金) 18:09:13.37ID:KeMBxxc7
できた?

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 ]
0980デフォルトの名無しさん2017/01/13(金) 19:00:59.49ID:spW6LWtW
>>979
ありがとうございます
0981デフォルトの名無しさん2017/01/13(金) 19:14:20.11ID:Y/PhWwOJ
>>978
それなら、組み合わせを計算してから、ソート・グルーピング・map head すればいいだけなのでは?
0982デフォルトの名無しさん2017/01/14(土) 01:09:18.39ID:qkQ2nYQV
Elmって面白いね。初めて関数型言語が実戦で使えた感じ。
0983デフォルトの名無しさん2017/01/14(土) 01:50:04.25ID:qj8F+4RU
>>981
ああ、やっぱそれだとソートしてグルーピングの計算オーダーがnubするのと変わらない事態を招く気がしますのでダメになっちゃいますね


要は愚直実装より速いものが欲しかったのです。重複を含む巨大なリストから数個取り出す組合せをリストアップしようとすれば、愚直実装ではフリーズしてしまいまして
0984デフォルトの名無しさん2017/01/14(土) 07:24:46.87ID:mdG3n9u6
>>983
ソート済みリストに対する重複削除はちゃんと定義すればO(n)で動くから
ソートがO(n log n) で動けば全体もO(n log n) になるので
Haskellの一般のリストに対するnub のO( n^2) より速いはず
0985デフォルトの名無しさん2017/01/14(土) 08:37:41.01ID:z+PGQfym
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

こんな感じで組み合わせを求めることはできると思うんだけど速度的には難ありってことなんでしょうか
そのあたりのことを知りたい
0986デフォルトの名無しさん2017/01/14(土) 09:46:02.22ID:z+PGQfym
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

汚かったので整えた
0987デフォルトの名無しさん2017/01/14(土) 13:45:42.41ID:BE8dMuIV
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だけど多分こういうやり方のほうがいいのかな
0988デフォルトの名無しさん2017/01/14(土) 14:38:17.99ID:eAnfzjs/
みんな両極端だよな
平気で嘘、誤答を書く時もあるし、速度的に?最も正しい答えを書きたがる時もある
0989デフォルトの名無しさん2017/01/14(土) 23:05:47.30ID:ARUXoNoj
最強のアルゴリズマーさんに聞くしかないな
0990デフォルトの名無しさん2017/01/15(日) 10:11:21.74ID:wEixuQp0
書いてる方もよくわかってないんだよ
0991デフォルトの名無しさん2017/01/15(日) 10:47:54.19ID:Lz2CPGKK
プログラミング自体趣味でやってるだけで教養のようなものがなく
具体的な指摘はとても勉強になるのでお願いしたいです

Haskellって日曜プログラマには最適な言語なんじゃないかな。アイデアを形にする過程がすごく楽しい
0992デフォルトの名無しさん2017/01/15(日) 13:07:09.67ID:SnguMZvf
教養ってそんな綺麗なものではなく非科学的なものが一杯入ってる
かといって科学をただ否定すりゃいいってものでもない
0993デフォルトの名無しさん2017/01/15(日) 13:30:05.19ID:Lz2CPGKK
>>992
科学と実用性の駆け引きというのか協力というのか、そういう絶妙な連携は魅力的ですね


ところで組み合わせの問題グルーピングよりも[("A",3),("C",2),...]みたくはじめに個数を数えたほうが少し速くなりました
0994デフォルトの名無しさん2017/01/15(日) 16:16:50.57ID:40h2fwNv
Haskellは数学で科学はPythonでは
0995デフォルトの名無しさん2017/01/15(日) 16:26:11.57ID:nEHh2xZn
数学を名乗るには線形代数が弱い
0996デフォルトの名無しさん2017/01/15(日) 18:02:21.49ID:Vh4eztBk
15万文字のソート済み文字列で >>979で48秒で終わる処理が、>>985から最初のソートを抜いた版だと2000秒かかりました
0997デフォルトの名無しさん2017/01/15(日) 21:36:53.35ID:VKnf+7zn
>>991
スマホ対応が終わってるのがなぁ・・・
今時自分のスマホでも自作アプリ動かしたいですやん
0998デフォルトの名無しさん2017/01/15(日) 21:52:48.96ID:KJfp/lQK
>>996
文字をそのまま足すんじゃなくて個数として抽象化した方が良いってことですね。言われてみれば当然ですが勉強になりました
0999デフォルトの名無しさん2017/01/15(日) 22:08:25.90ID:SnguMZvf
スマホの良いところは一人一台
発電所みたいに一箇所で大規模にやった方が安いという考えは古いのかも
1000デフォルトの名無しさん2017/01/15(日) 22:08:43.69ID:zF8FuE9b
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 =
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 646日 20時間 38分 11秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。