17/09/27 02:33:08.70 2XAqPuH2.net
関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
URLリンク(www.haskell.org)
前スレ
関数型プログラミング言語Haskell Part30
スレリンク(tech板)
2:デフォルトの名無しさん
17/09/27 02:33:55.41 2XAqPuH2.net
過去スレ一覧
29) スレリンク(tech板)
28) スレリンク(tech板)
27) スレリンク(tech板)
26) スレリンク(tech板)
25) スレリンク(tech板)
24) スレリンク(tech板)
23) スレリンク(tech板)
22) スレリンク(tech板)
21) スレリンク(tech板)
20) スレリンク(tech板)
19) スレリンク(tech板)
18) スレリンク(tech板)
17) スレリンク(tech板)
16) スレリンク(tech板)
15) スレリンク(tech板)
14) スレリンク(tech板)
13) スレリンク(tech板)
12) スレリンク(tech板)
11) スレリンク(tech板)
10) スレリンク(tech板)
09) スレリンク(tech板)
08) スレリンク(tech板)
07) スレリンク(tech板)
06) スレリンク(tech板)
05) スレリンク(tech板)
04) スレリンク(tech板)
03) スレリンク(tech板)
02) スレリンク(tech板)
01) URLリンク(pc.2ch.net)
3:関連サイト
17/09/27 02:35:40.58 2XAqPuH2.net
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
URLリンク(en.wikibooks.org)
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
URLリンク(learnyouahaskell.com)
Real World Haskell (同名書籍の無料オンライン版)
URLリンク(book.realworldhaskell.org)
(以下、日本語)
Haskell入門 5
4:ステップ - 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
5:デフォルトの名無しさん
17/09/27 06:37:41.63 G9HkNsFz.net
いちおつ
6:デフォルトの名無しさん
17/09/27 08:45:48.68 l2Dkh0U/.net
質問させてください
Stringの配列xsを1つの要素につき1行ずつ画面に出力する場合、
mapM_ putStrLn xs
と
putStr.unlines $ xs
ならどちらの方がいいのでしょうか?
7:デフォルトの名無しさん
17/09/27 11:20:36.98 3YTsdy+/.net
URLリンク(ideone.com)
前スレの分割集合のアルゴリズムをdp風にしてみたけど
結局リストを作るコストは同じだからむしろ遅くなったわ
8:デフォルトの名無しさん
17/09/27 12:38:35.89 e62g5PUw.net
Haskell 入門書の新刊が、今日付で発売。
『Haskell入門 関数型プログラミング言語の基礎と実践』技術評論社、¥3,280(税別)
URLリンク(gihyo.jp) (一部ページのサンプルpdfあり)
URLリンク(www.amazon.co.jp)
9:デフォルトの名無しさん
17/09/27 13:09:22.03 Ig4f10A7.net
日本人の書くHaskell本は入門書ばっか。
ダメとは言わんが、バラエティーがないね。
10:デフォルトの名無しさん
17/09/27 18:15:22.14 fINvBrSj.net
だって関数プログラミングについて深い内容を書けるだけの知識と見識のある人間なんて日本にはいない
実務家も大学の先生もね
11:デフォルトの名無しさん
17/09/27 19:01:25.65 duTWzj9f.net
誰か、競プロを生き抜くためのHaskell TipsをKindle出版してくれ
できればUnlimited 対応で
12:デフォルトの名無しさん
17/09/27 21:13:41.99 A4sTCCrj.net
英語で構わないので中級者向けの書籍教えて
13:デフォルトの名無しさん
17/09/27 21:45:25.22 Ys6dXTpa.net
>>10
haskell-masterことtanakh大先生に頼むしかないな
14:デフォルトの名無しさん
17/09/27 22:52:12.73 vJ1/ghVi.net
Glorious haskell-master tanakh is crazy about Rust these days.
15:デフォルトの名無しさん
17/09/27 23:06:21.04 GBvrW/PZ.net
>>11
何を以て中級と言えるか分からんが、
実用的なアプリを作るのに欠かせない技術や考え方を学ぶという観点なら
URLリンク(www.apress.com) を勧める。
タイムマシンを販売するWebストアを作るという体で解説が進む。
(なぜタイムマシンなのかは最後に分かる)
名前に Beginning とあるが、Beginning なのは第1部だけで、
第2部以降は実戦色が強くなる。
この本の大きな特徴は、第2部以降は必要性が出てきた段階で、
必要な分だけ Haskell の構文やライブラリや技術などの解説がされることが多いこと。
たとえばアプリのリソースの扱い方を学ぶ段階で初めて
IOモナドによる入出力の解説が登場するのは当たり前だが、
それと同じ章で Conduit や Binary Serialization の解説が登場する。
実用的なアプリの作成において、これらでリソースを扱うのが非常に有用だからだ。
入門書では前半で出てくるような型がこの本では後半で出ることもある。
入門書をしっかり理解できているのなら適当に読み飛ばしたくなる所もあると思うが、
そこで作った型や関数は後で使うことが多いので、復習と思ってぐっと我慢すべし。
個人的には、アーキテクチャレベルの章が無いのが残念。
16:デフォルトの名無しさん
17/09/28 01:51:54.14 z5y5Aaws.net
>>14
ありがとう!参考になりました
17:デフォルトの名無しさん
17/09/28 14:01:26.19 UK21Udq4.net
ああ逃れられない(英語)
18:デフォルトの名無しさん
17/09/28 21:10:48.47 6lr8pJs9.net
新しくでたHaskell本、田舎に住んでる自分的にはいい感じだわ。
著者の方をみると、東京とかの勉強会はこの辺を踏まえてるんだなと勝手に思ってる。
周りにHaskellerがおらず独りでやってるけど、実践的な面で何か取りこぼしがないかとの疑問が頭に残ってたから、これで安心。
19:デフォルトの名無しさん
17/09/28 21:21:59.50 WvuzNAMn.net
明日給料入るから明日買うわ
20:デフォルトの名無しさん
17/09/28 21:30:11.00 Oc+ilhlL.net
>>17
章末問題とか練習問題みたいなのある?
21:デフォルトの名無しさん
17/09/28 21:30:19.44 DWFu7WOr.net
例えば、undefinedをAgdaのホールみたいに使えるとか知らんかった。
22:デフォルトの名無しさん
17/09/28 21:33:24.87 hwFo+CWc.net
実際何か作ろうとなったときに今どのライブラリでどう作ればいいかの道筋を示す本はないから
そこをわかって出してくれてそうな今回の入門書に期待
23:デフォルトの名無しさん
17/09/28 21:39:17.72 DWFu7WOr.net
>>19
ないね。
理論的な部分はこれまでの良書で固めて、
上で書いたような、俗っぽい(悪い意味ではない)部分を補充、といった感じかと。
24:デフォルトの名無しさん
17/09/28 22:29:11.61 Ivu9Y1Xk.net
ところで、今Webアプリってブームなの?
みんなWebアプリを作りたくてウズウズしてんの?
25:デフォルトの名無しさん
17/09/28 23:01:35.48 .net
ゲーム作るならFRPなの?
どのパッケージがいいの? ヘルムって奴?
それ以前にFRPってどこで勉強すればいいの?
26:デフォルトの名無しさん
17/09/28 23:10:45.38 hwFo+CWc.net
Elm、FRPやめたってよ
FRPと関数型のことは忘れろ
27:デフォルトの名無しさん
17/09/28 23:22:12.38 64lLKNQd.net
Functional Reactive
28: Programming - HaskellWiki https://wiki.haskell.org/Functional_Reactive_Programming
29:デフォルトの名無しさん
17/09/29 00:09:31.41 .net
えええ。。。じゃあHaskellでゲームって、なんのライブラリ使って作るの
30:デフォルトの名無しさん
17/09/29 00:22:48.95 6ZguHByP.net
自分で作ってみるのはどうでしょうか?
良いライブラリができたら公開してね!!
31:デフォルトの名無しさん
17/09/29 00:41:18.81 Q5+RKusc.net
Game Development - HaskellWiki
URLリンク(wiki.haskell.org)
32:デフォルトの名無しさん
17/09/29 00:43:06.66 Q5+RKusc.net
Applications and libraries/Games - HaskellWiki
URLリンク(wiki.haskell.org)
33:デフォルトの名無しさん
17/09/29 22:18:38.06 8tJM6rkq.net
HaskellによるゲームプログラミングにFRPを使うメリットがない。
34:デフォルトの名無しさん
17/09/29 22:52:40.90 7WUGaaf4.net
みんなhaskellで何するの?
haskellのためのhaskellしてるみたいなイメージ
35:デフォルトの名無しさん
17/09/30 00:36:23.25 rwsxidmc.net
自分の要求に応えてくれる言語を使ってるだけだよ
36:デフォルトの名無しさん
17/09/30 04:13:52.83 F2cNQzRT.net
stackがあればハスケルコンパイラーインストール必要ないんやな。
全部消してやったぜ。
37:デフォルトの名無しさん
17/09/30 22:19:25.30 zP5U//5z.net
神様ありがとう、ハスケルに会わせてくれて
君は眠っていたね
38:デフォルトの名無しさん
17/09/30 22:52:16.35 m5JakNDN.net
>>32
C言語の倒し方を発見する
またはC言語を倒せないことを証明する
39:デフォルトの名無しさん
17/09/30 23:59:21.19 VwrUR3UB.net
>>32
あえて言おう
自分自身の処理系を記述できない処理系はクソ
40:デフォルトの名無しさん
17/10/01 11:01:26.12 evM2u7Ti.net
Eq クラスや Show クラスのように default deriving として使えるクラスを自作することはできますか?
41:デフォルトの名無しさん
17/10/01 12:00:16.69 QSpmDYPw.net
>>38
14の本に書いてあった気がする
42:デフォルトの名無しさん
17/10/01 13:29:55.56 00V/3sY4.net
Haskellによる関数プログラミングの思考法
Richard Bird (著), 山下伸夫 (翻訳)
URLリンク(www.amazon.co.jp)
この本ていいの?
すぐ教えろ
43:デフォルトの名無しさん
17/10/01 15:15:55.43 hswT9xjT.net
C++ Rust Haskellは言語とライブラリを見るだけで楽しめるが
言語とライブラリはすぐ古くなるのがこわくて手を出せないやつが多いんだろうね
44:デフォルトの名無しさん
17/10/01 15:37:36.06 sFjMHcln.net
待ってくれ
45:デフォルトの名無しさん
17/10/01 15:52:51.93 evM2u7Ti.net
>>39
ありがとうございます。
その本を借りてみます。
46:デフォルトの名無しさん
17/10/01 18:25:15.52 sFjMHcln.net
ああ逃れられない(英語)
47:デフォルトの名無しさん
17/10/01 19:09:32.63 rx6vco2K.net
>>40
「関数プログラミング 珠玉のアルゴリズムデザイン」のための良い入門書って感じ
48:デフォルトの名無しさん
17/10/01 19:34:05.63 sFjMHcln.net
珠玉難しすぎんよ~
49:デフォルトの名無しさん
17/10/01 20:13:16.82 O7TiEQTZ.net
珠玉は本気で難しい
50:デフォルトの名無しさん
17/10/01 23:00:51.17 iMMA7lvE.net
>>12
tanakhはもうダメになった
URLリンク(twitter.com)
51:デフォルトの名無しさん
17/10/02 02:38:46.64 y6gYscpA.net
平常運転
52:デフォルトの名無しさん
17/10/02 20:30:12.49 k+Xmo3sE.net
平壌運転
53:デフォルトの名無しさん
17/10/04 19:37:39.13 F2K4hXU2.net
REPLでlet文ごっそり複数行貼れるんだね。
ちまちま一行ずつコピペしててバカみたいだったww
自分みたいなアホはあまりいないと思うけど、一応の注意喚起。
54:デフォルトの名無しさん
17/10/04 22:05:05.88 oKe3mPnb.net
replというかコマンドラインの性質・・・
55:デフォルトの名無しさん
17/10/08 22:00:05.
56:12 ID:JB+KF/At.net
57:デフォルトの名無しさん
17/10/08 23:24:05.25 Zx8XGEkD.net
わざわざ別に作ってあるってことはそうやろなぁ
58:デフォルトの名無しさん
17/10/09 07:02:48.85 xS+J1z7K.net
Functional Pearl って何? 自分で名乗ってもいいの?
59:デフォルトの名無しさん
17/10/10 06:54:46.17 j0DthWV+.net
vectorパッケージでリスト内包表記的なのってありますかね?
また、ああいうsyntax sugarてユーザーが定義できるんでしょうか?
60:デフォルトの名無しさん
17/10/10 07:19:08.32 IE9ZixgD.net
monad comprehensions
61:デフォルトの名無しさん
17/10/10 10:01:50.47 j0DthWV+.net
>>57
ありがとうございました、見てみます。
62:デフォルトの名無しさん
17/10/15 08:27:10.18 3zXjO+sA.net
bindの連結がよくわかってないので質問させてください
Just 10 >>= \x -> return (x + 1) >>= \y -> return (x + y + 2)
と書いた場合、明示的に括弧でくくるとしたら
Just 10 >>= \x -> (return (x + 1) >>= \y -> return (x + y + 2))
になりますよね?これが
Just 10 >>= \x -> return (x + 1) >>= \y -> return (y + 2)
の場合でも
Just 10 >>= \x -> (return (x + 1) >>= \y -> return (y + 2))
になるのですか?それとも
(Just 10 >>= \x -> return (x + 1)) >>= \y -> return (y + 2)
やあるいは別の場所がくくられますか?
下の場合どこでくくっても答えが同じなので混乱してきました
63:デフォルトの名無しさん
17/10/15 18:20:04.06 amy6Q4J2.net
Just 10 >>= (\x -> return (x + 1) >>= (\y -> return (x + y + 2))
64:デフォルトの名無しさん
17/10/15 18:23:23.93 amy6Q4J2.net
do
x <- Just 10
y <- return (x + 1)
return (x + y + 2)
Just 23
65:デフォルトの名無しさん
17/10/15 21:17:59.15 QaXk2fzN.net
カッコで括らない限りラムダ式のリテラルを使うとそれ以降はラムダ式の内側になるから
bindというか演算子に限らずa+\x->x+bみたいなのはa+(\x->x+b)
66:デフォルトの名無しさん
17/10/15 21:42:24.61 Fr3WOscB.net
letやcaseはあまり使わないほうが推奨なんですか?
これに書いてあったので
URLリンク(d.hatena.ne.jp)
67:デフォルトの名無しさん
17/10/15 21:44:11.18 QaXk2fzN.net
>>62
演算子の種類に限らず
68:デフォルトの名無しさん
17/10/15 22:04:25.31 pVUBwS6g.net
>>63
好き好きでいいと思う。
69:デフォルトの名無しさん
17/10/15 22:56:15.07 GYZBU1+2.net
>>63
let と where を同時に使わない、さえ守ればまあ。
URLリンク(wiki.haskell.org)
ちなみにcaseを使わないでパターンガードで書くと
ガードをまたげる where の方が書きやすいので
個人的にはまさにcaseもletも使わない
70:デフォルトの名無しさん
17/10/15 23:23:28.47 E5HePsK2.net
使う意味がわからない
局所的なスコープの中だから式でないと書けないでもなければ使わない
71:デフォルトの名無しさん
17/10/15 23:33:15.58 c/qV5Afw.net
>>66
いいこときいた!
72:デフォルトの名無しさん
17/10/16 00:02:00.30 TY5gTDK1.net
値ならlet、関数ならwhereみたいな使い分けしてるわ
両方混ざることもしばしば
caseもdo構文の中とかで普通に使わね?
73:デフォルトの名無しさん
17/10/16 03:01:45.14 Nb+0WxCX.net
左上から順番に読んで引っかかる時はlet使うかな。パターンガードはwhere一択だね。
baseパッケージを雑に調べたんだけど、総数はそれぞれ
where: 2038
let: 665
case: 979
74:デフォルトの名無しさん
17/10/16 18:36:49.72 oTRCGw1x.net
そして余計な宗教戦争へ発展
75:デフォルトの名無しさん
17/10/16 21:17:09.38 UKE6NQTo.net
foo = \ n -> let xs = map fib [0 ..] in xs !! n
bar = let xs = map fib [0 ..] in \ n -> xs !! n
宗教はいくつか掛け持ちする方がいい
nonlocalにすればlifetimeが長いとか便利な言葉が使える
76:デフォルトの名無しさん
17/10/16 21:45:30.25 Nb+0WxCX.net
宗教で思い出したんだけど、みんなエディタは何使ってる?
URLリンク(github.com)
Atom派が増えてきた気がする(Stepwise Debuggerってなんだろう)。
77:デフォルトの名無しさん
17/10/16 23:03:58.10 wsZRBdk3.net
vscode+hie
78:デフォルトの名無しさん
17/10/16 23:06:05.01 1r/tGA5g.net
vscodeいいよな
他の言語でも大活躍
79:デフォルトの名無しさん
17/10/16 23:09:52.45 wsZRBdk3.net
vimのlanguage server対応がもっと進んだらvimに戻りたい
80:デフォルトの名無しさん
17/10/16 23:13:43.26 RTfo5Gm3.net
URLリンク(wiki.haskell.org)
これ前者はクロージャみたいなものということなのかな
81:デフォルトの名無しさん
17/10/17 01:54:05.70 kmqw2VEi.net
spacemacs + intero
82:デフォルトの名無しさん
17/10/17 06:46:01.60 X7yOqbnN.net
HIE知らんかった。試してみよう。
自分もSpacemacsだわ。
83:デフォルトの名無しさん
17/10/17 08:53:48.72 NQL+y7y0.net
プログラミングに限らず、およそ文字列を編集する作業において、
vim以外のエディタは考えられない体になってしまった。
84:デフォルトの名無しさん
17/10/17 10:17:04.48 1Byit6P4.net
vscodeはvimがクソなのがな
85:デフォルトの名無しさん
17/10/17 20:53:20.25 FkVJ0QE/.net
タイプミスが多いのでキー入力コマンド操作とか誤操作ばかりで死ぬ
86:デフォルトの名無しさん
17/10/17 21:34:05.58 lwYxKvg3.net
CoqとかAgdaもやろうとしてたからEmacs一択で、
Vimの操作性も習得したいと思ってたから結果的にSpacemacsに落ち着いたわ。
87:デフォルトの名無しさん
17/10/17 21:45:06.92 dWslrgIK.net
Spacemacs知れようとして、Emacsのバージョン足りなくて死んだ
88:デフォルトの名無しさん
17/10/17 21:48:15.65 kmqw2VEi.net
静的どころか参照透明なんだし、補完は充実してほしいよなあ。
data Pen = Pineapple | Apple
apple = Apple
pen :: Pen
pen = a
もうこの時点で候補をappleに絞ってほしい。
89:デフォルトの名無しさん
17/10/17 22:31:12.09 Is39GLXq.net
異教徒間の鍔迫り合いが始まる予感です?
90:デフォルトの名無しさん
17/10/17 22:46:49.54 bTvRRU/M.net
そんな「絞り込み」はそもそもできないしすべきでもない
そもそもその例の場合なら完全に redundant だとしてむしろ積極的にappleを除外してほしい
91:デフォルトの名無しさん
17/10/17 22:58:58.88 kmqw2VEi.net
>>87
できそうな気がするけど。
…-> Pen のような関数がないって事がわかってて、
penの型定義も限定されてるから、そこに書くことのできる値は限られてる。
92:デフォルトの名無しさん
17/10/17 22:58:59.79 IqfDhIHj.net
>>85
その絞り込みの是非は置いておくとして、「参照透明」と「絞り込み」の関係がよく分からん。
その例だと、参照透明である必要はないと思うが。
93:デフォルトの名無しさん
17/10/17 23:07:03.82 kmqw2VEi.net
>>89
そうだね。絞り込みについては静的であれば充分。
参照透明なら実行中に値が変わることがないから、例えばShowしたものを補完候補としてリストアップできる。
94:デフォルトの名無しさん
17/10/17 23:16:36.80 bTvRRU/M.net
id やら const やらの問題はさておき
そこでもし仮に apple に絞られたら相当イラつく
95:デフォルトの名無しさん
17/10/17 23:25:06.39 IqfDhIHj.net
>>88
その例なら簡単にできるけど、一般的には相当厳しいと思うよ。
型がシノニムだったら、辿って元の型を探さないといけないね。
import されてたら、それも全て辿らないといけないね。
template が使われてたら、展開しないといけないね。
Cプリプロセッサが使われてたら、これも展開しないといけないね。
型を決定するのに関わる事は他にもいっぱいある (言語拡張とか)。
あと、参照透明は破られないという前提で話してると思うけど、
unsafePerformIO 関数があることを忘れないように。
96:デフォルトの名無しさん
17/10/18 11:52:10.17 LmQIn2MI.net
まずは自動車を二人で運転したり、独裁者が二人いる国を作ってみればいいのだ
それができたら一人を機械で置き換えて人間+機械のコンビを作る
97:デフォルトの名無しさん
17/10/18 22:09:24.34 XAtaZZJd.net
Haskellでウェブアプリ作れますか?
98:デフォルトの名無しさん
17/10/18 22:40:49.32 CCDizLJ7.net
>>94
作れるよ。
フレームワークもいくつかあるし、入門書もある。
99:デフォルトの名無しさん
17/10/18 23:03:06.30 449CvZ10.net
webフレームワーク周りは一時期乱立とは言わないまでもだいぶ混乱してた印象があるけど
最近の流れはどうなってるんだろうか
100:デフォルトの名無しさん
17/10/18 23:44:26.71 gezDC8oz.net
すみません、ある型とその取扱い関数の
標準・追加ライブラリでの有無の確認なのですが、
実数の範囲を表す型で(A,B)というのがあったとして
A以上B未満の範囲を示していて、
それがリストに[ s1, s2, s3, s4 ]の様に並べられているとして
その中身は[(0,1),(1,2),(2,4),(4,8)]としますと
実数「1.5」はこのリスト3番目の変数が示す範囲に
含まれますと教えてくれる関数なのですが、
このような型と関数があるライブラリを知っていましたら
教えて下さい。
101:デフォルトの名無しさん
17/10/18 23:47:55.99 gezDC8oz.net
すみません。
「リスト2番目」の間違いでした。
102:デフォルトの名無しさん
17/10/18 23:54:52.59 JBC50Xi/.net
Yesodの辛さを述べた記事を最近みた。
103:デフォルトの名無しさん
17/10/19 00:31:32.35 IrC75yTx.net
最近なら servant が多いんじゃないか?
104:デフォルトの名無しさん
17/10/19 00:42:33.76 IrC75yTx.net
>>97
ライブラリ探す暇があったら自分で書いたほうが早いだろ
import Data.List (find)
type Range = (Double,Double)
blah :: Double -> [Range] -> Maybe Range
blah x rs = find (¥(inf,sup) -> inf <= x && x <= sup) rs
ranges = [(0.0,1.0),(1.0,2.0),(2.0,4.0),(4.0,8.0)]
main = print $ blah 1.5 ranges
105:デフォルトの名無しさん
17/10/19 00:55:37.69 a0gJXcH3.net
>>97
存在しない、と思う。
URLリンク(ideone.com)
106:デフォルトの名無しさん
17/10/19 02:16:33.94 CTOkinld.net
まだイェソドが最強なのですか?
107:デフォルトの名無しさん
17/10/19 07:52:00.67 NmeCWEht.net
イェソドってセフィロトの樹と何か関係あるの?
108:デフォルトの名無しさん
17/10/19 11:32:05.27 yTKuENfR.net
辞書ファイルから欲しいデータを抜くのに使ってるけど、
Haskellだとライブラリ使うというより、
スクラッチで欲しい関数を書けるのが良いね。
調べるより作った方が早いし細かい調整がきく。
109:デフォルトの名無しさん
17/10/19 15:41:04.63 a0gJXcH3.net
>>92
参照透明性を破壊するようなunsafeの使い方はするべきじゃない。
利用者に、穴の空いたトランポリンで跳ね回れと言ってるようなもんだぞ。
110:デフォルトの名無しさん
17/10/19 18:16:54.99 XElZhSKt.net
111:>Haskellだとライブラリ使うというより、 >スクラッチで欲しい関数を書けるのが良いね。 > 調べるより作った方が早いし細かい調整がきく 小さいパーツ程度ならね
112:デフォルトの名無しさん
17/10/19 18:41:26.50 TgxB2ED8.net
>穴の空いたトランポリンで跳ね回れ
いいなこれ。今度から使わせてもらうわ
113:デフォルトの名無しさん
17/10/19 20:44:43.20 C59kUjZF.net
>>106
それは分かってる。
その意見には俺も全面的に賛成だよ。
ただ、やろうと思えばできてしまうんだよ。
例えばコマンドラインパーサーの CmdArgs パッケージでは unsafePerfirmIO が使われてる。
(なかなか使い勝手が良いライブラリなのに玉に瑕で残念)
だから、参照透明が保たれているという前提で補完機能を作るわけにはいかない。
114:デフォルトの名無しさん
17/10/19 21:28:00.48 a0gJXcH3.net
一般的には透明性が保たれてるならunsafeを使っても大丈夫だよね。
FFIでCのライブラリを使って値を取ってくる時に、引数で返り値が一意に決まるならば、必ずしもIOで包まなくてもいい。
補完システムでは、プログラミング中に値を得ることを考えてるので、制限はもっと厳しい。
悪意のある誰かがコード中にunsafePerformIOでディスクを皿にするコードを入れていたとする。
現状では実行しなければ問題ないけど、その補完システムではエディタに読み込んだ時点で… ふっ飛ぶ!
アドバイスは的を得ていると思う。指摘を受けて、SafeHaskellでのみリッチな補完が出来る。という回避を考えているよ。
115:デフォルトの名無しさん
17/10/19 21:31:47.78 a0gJXcH3.net
>>109 CmdArgs パッケージは、初見だけど… うーん。なぜこんな風になってるんだろう。
IOにするわけにはいかんのだろうか?
116:デフォルトの名無しさん
17/10/19 21:38:26.29 IrC75yTx.net
Haskell使ったプロダクションコードにしばしばあるやつね
環境変数みたいなのは Reader で引き回すよりさっくり
unsafePerformIO でアレするのがアレでね
117:デフォルトの名無しさん
17/10/19 21:41:05.61 a0gJXcH3.net
だいたい判った。この用途では仕方ない。
118:デフォルトの名無しさん
17/10/19 21:42:06.30 IrC75yTx.net
>>107
>小さいパーツ程度ならね
その小さなパーツを見通しよく組み合わせられるあたりが功徳なんでねえ
119:デフォルトの名無しさん
17/10/19 21:51:43.24 TgxB2ED8.net
unsafePerformIO取締法違反でタイポする!
120:デフォルトの名無しさん
17/10/19 22:14:05.51 n4u77snN.net
コンパイラがしゃべった!?って、ただの腹話術か
いっつも腹話術してるな
121:デフォルトの名無しさん
17/10/19 23:17:00.35 55bDTs5O.net
あれ?評価が、遅れて、されるよ?
122:97
17/10/19 23:19:50.69 q5MeOdeo.net
>>101
>>102
ありがとうございます。
書いて下さったコードを参考にし、利用させて頂きます。
123:デフォルトの名無しさん
17/10/20 09:50:03.15 Bz70yab6.net
>>112
そんな事すると、何のために Haskell を使ってるのか分からん
124:デフォルトの名無しさん
17/10/20 11:11:48.75 zpEeQZDE.net
じゃあ「分かるHaskell」と「分からんHaskell」の両方を使いこなせばいいよ
そういう多様性を何のために肯定するのかっていうと
未知の新しい言語を見た瞬間に使いこなすための練習だと思えばいいんじゃないか
125:デフォルトの名無しさん
17/10/20 13:24:48.13 f6ubOuco.net
>>120
そういうのは趣味や個人の時間にやって備えておくもので、
プロダクション(本番)でやるものではないと思う。
126:デフォルトの名無しさん
17/10/20 13:41:07.05 Lk8bVHte.net
まあ、プロダクションだとやっぱり時折 unsafe 唱えるわけだけど
どういうときに唱えても已むを得ないかの知識が秘伝のタレ化してる感はある
127:デフォルトの名無しさん
17/10/20 17:24:25.31 zpEeQZDE.net
x = unsafePerformIO m
main = do {
safe_x <- return $! x;
...
}
これで無難な値を無難なタイミングで取り出せる
ただし、mainを2回実行したらmは何回実行されるべきかの知識が秘伝
128:デフォルトの名無しさん
17/10/20 17:32:08.06 GdkUB6y1.net
unsafe* を使用する際は逐一稟議を通すこと
129:デフォルトの名無しさん
17/10/20 17:57:47.07 gxUn2vL9.net
unsafeReadとunsafeWriteの詳しい説明や使い方がわかる書籍やサイトがあれば教えてください
130:デフォルトの名無しさん
17/10/20 18:14:08.30 Vljj85av.net
グローバル定数とみなせる値を取得したい + 使う場所がMonadIOでない + 設計変更の時間はない
131:デフォルトの名無しさん
17/10/20 18:38:52.46 zpEeQZDE.net
使用したいというより読みたいんだよ
ありのままの現実を読む主義
現実を操作するつもりはない
132:デフォルトの名無しさん
17/10/20 22:15:19.17 YXH4kbKq.net
Haskellやったら特別になれるの?
133:デフォルトの名無しさん
17/10/20 22:37:34.15 rG34NDiA.net
疎外感を味わえます
134:デフォルトの名無しさん
17/10/20 23:04:24.26 Vljj85av.net
そうならなくて済むよう、普及にもう少し力を入れる必要があるよね。
何があれば賑わうかって考えたんだけど、やっぱりもっと和書が必要ではないか。
「Haskellでゲームを作る本」とか「Haskellで解る圏論入門」とかどうだろう。
135:デフォルトの名無しさん
17/10/20 23:22:26.18 ut8tKZ1b.net
Haskellなら三ヶ月後、自分で書いたコードを読めます
136:デフォルトの名無しさん
17/10/21 00:05:14.21 yOthW/dM.net
>>131
そんな楽観はできない。
3ヶ月後も読めるようにするには、それなりのコードを書かなければならない。
Haskellなら自然にそういうコードになる、なんてことは全くないよ。
1つの関数に複数の仕事をさせてしまったり、
let節やwhere節で計算のフローを書いて関数を肥大化させてしまったり、
逆に一行に押さえようとポイントフリーをやりすぎて暗号化してしまったり、
仮引数の名前を短くしすぎて役割が分からなくなってしまったり、
モナド変換子のスタックをややこしくしてしまったり。
意識していないと陥りやすい罠は幾らでもある。
137:デフォルトの名無しさん
17/10/21 00:23:56.54 4Fwr4eN0.net
URLリンク(ideone.com)
138:デフォルトの名無しさん
17/10/21 00:58:52.37 Sgt31MqE.net
>>132
いや、131は揶揄・皮肉だと思う。何スレか前にあった俗説「Haskellでは3ヶ月前に書いた自分のコードが読めなくなる」に対しての。
理由は確か、Haskellでは習熟するにつれてコードが全然違ってくるから、だったかな。
未熟だった頃の考え方とかをスッカリ忘れてしまうので、読んでも頭に入ってこない。
133のコードから漂う、Java上がり臭… 真面目に書いたのも見て取れるんだけど、標準の関数や表記法とズレているのでどうにも読みにくい。
いまstackのコードを読んでるんだけど、意図してコードのレベルを抑えてるフシがある。const を使わずに \_->... と書いてたり。
練度の高低でコードが違ってくることはある意味で良いことといえるのかもしれないけど、多人数で使う際には難しさがあるようだ。
139:デフォルトの名無しさん
17/10/21 01:24:40.12 E5Mq7+kB.net
URLリンク(ideone.com)
これは >>133 のほぼ 1/10 の行数で書かれている
solve = build “” “”
という行を見て
「ああアキュムレータが2つあるのね」
とわかるのであとはそのまま読むだけ
140:デフォルトの名無しさん
17/10/21 01:35:46.03 E5Mq7+kB.net
というか、>>133 のコードはこれはネタでわざとやってるな
141:デフォルトの名無しさん
17/10/21 04:25:54.74 Sgt31MqE.net
うひょーッ iOS & Android の ghc バイナリが来た!
URLリンク(hackage.mobilehaskell.org)
解説ページ
URLリンク(medium.com)
142:デフォルトの名無しさん
17/10/21 06:39:56.81 M5O/aj/a.net
何が始まるんです?
143:デフォルトの名無しさん
17/10/21 12:52:45.37 JKqQJ+2p.net
自分で書いたコードが、他人が書いたコードと同じに見える
これは普通
同じ書き方をしない方が異常
3ヵ月前の時点ですでに他人が書いたコードと同じに見えていい
144:デフォルトの名無しさん
17/10/21 17:28:30.51 lv/AbapF.net
>>135
Data.Mapでもっと単純に書けそうな気がしたけど気のせいだった
URLリンク(ideone.com)
145:デフォルトの名無しさん
17/10/21 21:05:29.77 sahtjmhq.net
>>124
稟議のロジックをHaskellで書いてくれ。
146:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 09:33:44.39 IsEvYiKq.net
アキュムレータのように引数で変数束縛するのはprologっぽい書き方
haskellならアキュムレータの代わりにwhereを使う手がある
makeMaximumSizeAndMinimumOrderPalindrome wordlist = xs ++ [y] ++ zs where ...
147:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 14:42:07.09 b60KFBOe.net
Intellij IDEAのIntellij-Haskellプラグインが上手く実行できなくて諦めかけてたけど改めて挑戦したらやっとできた
これで俺もIDEデビューだ
開発効率上がるといいな
148:名無しさん@そうだ選挙に行こう! Go to vote!
17/10/22 15:26:27.37 mN+j7loz.net
アキュムレータの意味がわかってないキチガイがいるのか……
149:デフォルトの名無しさん
17/10/26 22:30:22.73 /i1iouMm.net
ByteStringについて、↓の記事に
「使い方の結論を述べると、入力には正格 ByteString、出力は遅延 ByteString を用います」
と書いてあるのですがそうなんですか?
だとしたらなぜそうなるのか教えていただけますでしょうか
URLリンク(d.hatena.ne.jp)
150:デフォルトの名無しさん
17/10/27 19:45:49.01 is9IZ5oJ.net
CodinGameをHaskellで攻略した方の感想ください
URLリンク(www.codingame.com)
151:デフォルトの名無しさん
17/10/28 17:22:18.77 sV/HPdac.net
Prelude> let a = 0.3 - 0.2
Prelude> let b = 0.2 - 0.1
Prelude> let c = a == b
Prelude> print c
False
は?
Prelude> default (Rational)
Prelude> let a = 0.3 - 0.2
Prelude> let b = 0.2 - 0.1
Prelude> let c = a == b
Prelude> print c
True
満足~♪ 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
152:デフォルトの名無しさん
17/10/28 17:23:34.06 sV/HPdac.net
> 入力には正格 ByteString、出力は遅延 ByteString
これ俺も疑問に思ってた
153:デフォルトの名無しさん
17/10/28 17:37:14.16 vt4jCtcJ.net
実装上の都合です
理論的には何の根拠もございません
154:デフォルトの名無しさん
17/10/28 17:45:11.92 zE41SC6F.net
メモリ的には入力遅延のほうがよさそうだけどハンドルをすぐ解放するために正格ということかな
155:デフォルトの名無しさん
17/10/28 19:05:35.06 nHlzoa71.net
512MB of zeroes with different implementations of echo
URLリンク(i.imgur.com)
156:デフォルトの名無しさん
17/10/28 20:19:14.51 zE41SC6F.net
どの本だっけ、Real World?
157:デフォルトの名無しさん
17/10/28 20:46:38.08 DenCC8QE.net
出典はHaskell High Performance Programmingです
158:デフォルトの名無しさん
17/10/28 21:00:26.16 zE41SC6F.net
それか
読みたいと思ってたんだよなそれ
邦訳はよ
159:デフォルトの名無しさん
17/10/29 00:46:23.62 UfAXS2oV.net
>>151
正格ByteStringが遅延に買ってる部分ないのか
160:デフォルトの名無しさん
17/10/29 07:47:46.53 U58o7DSK.net
普通に配列とリストの違い
ただしリストの要素は32kの配列
161:デフォルトの名無しさん
17/10/29 09:00:08.15 vzk3gwxY.net
WAI の実装とかそういう凄え特殊な場面での話だろうな
リソース管理が死活の場面では Lazy IO がワリと死ねるので
でもそういうのはいまなら各種の streaming ライブラリでOK
162:デフォルトの名無しさん
17/10/29 22:14:12.00 HYvWAe4Y.net
foldr と foldl ってこんな風に作れるよね。
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr _ i [] = i
foldr f i (x:xs) = f x (foldr f i xs)
foldl :: (b -> a -> b) -> b -> [a] -> b
foldl _ i [] = i
foldl f i (x:xs) = foldl f (f i x) xs
なんで foldl より foldr の方がメモリ効率がいいのか分からん。
どっちも結果の値が評価されるまで式が数珠繋ぎになったままじゃね?
163:デフォルトの名無しさん
17/10/29 22:32:56.88 SX8DMS20.net
これ?
Haskell の畳み込み関数 - foldl, foldr | すぐに忘れる脳みそのためのメモ
URLリンク(jutememo.blogspot.jp)
164:デフォルトの名無しさん
17/10/30 00:11:55.76 kEApsxXD.net
競プロでhaskell使う場合の何かアドバイスください
この問題解けませんでした
URLリンク(yukicoder.me)
URLリンク(yukicoder.me)
165:デフォルトの名無しさん
17/10/30 00:12:43.74 XzbjUl3p.net
今はコンパイラに解決させるようにしているようだね
haskell - Foldl memory performance in GHC 8.0.x - Stack Overflow
URLリンク(stackoverflow.com)
166:デフォルトの名無しさん
17/10/30 00:31:06.68 VIeJ5TeT.net
中身としてはこれかな
foldlを直す - 純粋関数空間 URLリンク(tanakh.jp)
>>158のように素直に定義したらどっちでも変わらないのはその通りで、
foldlの方は末尾再帰の形になってるからseqすることでいい感じに動いてくれる
167:デフォルトの名無しさん
17/10/30 08:02:56.80 WTE/ZW3E.net
>>162
> >>158のように素直に定義したらどっちでも変わらないのはその通りで、
やっぱり。
これを聞いて安心した。
みんな、ありがと。
168:デフォルトの名無しさん
17/10/30 08:39:48.03 rELgjW3C.net
foldlを使うことってほぼない気がする
だいたいfoldl'を使ってる
169:デフォルトの名無しさん
17/10/30 08:42:25.25 WTE/ZW3E.net
>>160
その問題は、要するにグラフが準オイラー路になっているかどうかを判定するものだよ。
各駅を頂点、各路線を辺とするグラフが、
準オイラー路であれば彼らは計画達成できるし、
そうなっていなければ計画は達成できない。
グラフが準オイラー路であることと、
次数が奇数の頂点がちょうど2つ存在することとは同値。
要するに、一筆書きができるかどうかだよ。
Haskell で素直に拙くプログラムしても特に問題ないだろうね。
たとえば、N個の要素を持つInt型配列にaccumArrayで次数を集計して、
filterで奇数だけ濾し取り、要素数を調べる。
170:デフォルトの名無しさん
17/10/30 08:46:34.46 I1PPVtSx.net
>>164
最適化で正格になるはずだけど明示的に正格版使う必要ある?
171:デフォルトの名無しさん
17/10/30 08:49:38.37 WTE/ZW3E.net
>>160
すまん、準オイラー路を判定する前に、
連結グラフかどうかを調べる必要があった。
172:デフォルトの名無しさん
17/10/30 09:33:39.10 032bj4sa.net
haskellで連結判定って面倒そう
173:デフォルトの名無しさん
17/10/30 11:24:36.92 WTE/ZW3E.net
>>160
>>168
準オイラー路かどうかを判定する前にと言ったけど、
後の方がいいな。
正確には、次数が奇数の頂点がちょうど2つあることを確認した後で、
その2つの頂点間に道があればOKとする。
これなら、そう面倒でもないような気がする。
174:デフォルトの名無しさん
17/10/30 11:28:25.84 WTE/ZW3E.net
>>169
ごめん、ダメだな。
素直にシードフィルみたいに辿っていくしかないか。
175:デフォルトの名無しさん
17/10/30 11:57:14.99 I1PPVtSx.net
最適化O2からなの忘れてたすまん
176:デフォルトの名無しさん
17/10/30 12:01:00.21 WTE/ZW3E.net
>>160
Haskell が得意なアルゴリズムは分割統治なので、
できるだけ分割統治で解けないか考える、
というのが一般的なアプローチ。
だけど、この問題はそれでは解けそうもないので、
他の命令型言語と同じアルゴリズムを使うしかないと思う。
で、これは一筆書き問題なので、
「連結グラフがオイラー路かまたは準オイラー路なら一筆書き可能」
という定理を利用することになる。
オイラー路や準オイラー路の判定は簡単。
肝は連結グラフの判定だけど、これはもう素直に調べるしかない。
普通ならグラフ用ライブラリを使うところだけど、
競技ならまず使えないだろうから、2次元配列を使ってグラフを表現する。
そして頂点をひとつ決めて、そこから全頂点を辿れるか調べる。
これしかないね。
Haskellにはとことん向かない問題だと思う。
177:デフォルトの名無しさん
17/10/30 12:13:21.53 /4xzRH5O.net
Haskellわからんからわからんのだがこれとか簡単にかけてそうなんだがそうでもないのか?
URLリンク(yukicoder.me)
178:デフォルトの名無しさん
17/10/30 12:24:13.36 oL0091Lz.net
>>173
連結性の判定を忘れてた
179:デフォルトの名無しさん
17/10/30 12:25:22.45 /4xzRH5O.net
>>174
よく見たらWrong Answerだったわ...orz
180:160
17/10/30 20:27:20.42 kEApsxXD.net
>>165-175
助言ありがとうございました
Haskellは分割統治が得意、連結判定苦手で覚えます
181:デフォルトの名無しさん
17/10/30 22:41:45.81 bEDc9q0a.net
連結判定だけじゃなくてグラフがらみは総じて苦手じゃないかな
182:デフォルトの名無しさん
17/10/31 01:03:17.65 hkKKSLGp.net
コンパイラはグラフ簡約するのに言語はグラフ苦手なのかよお
183:デフォルトの名無しさん
17/10/31 01:46:52.15 HrVASABH.net
つうか制約のない連結性の判定を深さ優先探索でするのは別にHaskellのせいじゃないだろ
184:デフォルトの名無しさん
17/10/31 03:22:06.20 mBYeMGb0.net
グラフ苦手って競技プログラミングで使う場合のみやろ?普段使う分にはグラフライブラリに突っ込めばいいだけやし気にする必要無いやで!
185:デフォルトの名無しさん
17/10/31 08:27:49.90 v6NvB8KL.net
ライブラリでも、計算量は多くなるよね?
186:デフォルトの名無しさん
17/10/31 08:33:52.06 ipWwIy6g.net
わざわざ車輪の再発明させる競プロってなんなん
187:デフォルトの名無しさん
17/10/31 08:44:38.36 DbaXyY3l.net
Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
純粋な関数型言語でそんなこと可能なのですか?
188:デフォルトの名無しさん
17/10/31 08:50:21.95 DbaXyY3l.net
>>182
その方が面白いからだと思いますよ。
コードゴルフとかと同じですよ。
制約があった方が燃えます。
189:デフォルトの名無しさん
17/10/31 10:02:54.23 HrVASABH.net
>>183
>Data.Array.(!) や Data.Vector.(!) って O(1) でアクセスできるんですか?
>純粋な関数型言語でそんなこと可能なのですか?
読む分にはO(1)に決まってる
そもそもData.Vectorのドキュメントに様々な関数の計算量が書いてあるだろ
190:デフォルトの名無しさん
17/10/31 10:40:05.74 DbaXyY3l.net
>>185
要素数に依存しない計算量で構造から読み取るなんて、
純粋な関数だけでどうやって実現するの?
不思議すぎない?
191:デフォルトの名無しさん
17/10/31 11:15:03.94 HrVASABH.net
はあ?
インデクスからメモリ上の位置(たとえばポインタ)へのO(1)な関数があればいいだけだろ
通常の配列もハッシュも変わらん
192:デフォルトの名無しさん
17/10/31 11:25:52.68 u1zcRbeB.net
ライブラリとして提供されてるからそうであって、
Haskellの構文としては書けないって話では?
193:デフォルトの名無しさん
17/10/31 11:28:55.70 0GSWnPMN.net
>>187
キッシヨ
194:デフォルトの名無しさん
17/10/31 11:31:18.73 0GSWnPMN.net
ミスった
キスしよ、な
195:デフォルトの名無しさん
17/10/31 11:33:38.62 DbaXyY3l.net
>>187 そのO(1)な関数は純粋関数型でどうやって実現してるの? 俺はすげー不思議、という話だよ。
197:デフォルトの名無しさん
17/10/31 11:36:03.56 K+wdnCfv.net
純粋データ型のオブジェクトはすべて構築物
(つまり既存のオブジェクトから構築されたもの)
という視点を持たないとこの手の話は一生理解できんと思う
198:デフォルトの名無しさん
17/10/31 11:46:17.59 DbaXyY3l.net
>>192
このあたり、「純粋関数型データ構造」って本で勉強できる?
それともあの本は関係ない?
199:デフォルトの名無しさん
17/10/31 13:07:49.38 xZzZlui7.net
1 = \x _ _ ... -> x
2 = \_ x _ ... -> x
3 = \_ _ x ... -> x
~
という自然数を定義すれば
\i -> i a b c ...
で参照O(1)な配列の出来上がり
200:デフォルトの名無しさん
17/10/31 13:20:29.54 DbaXyY3l.net
>>194
それじゃあ、Data.Vector みたいに動的に生成できないでしょ。
ワザととぼけてるの?
それとも話の流れ分かってない?
201:デフォルトの名無しさん
17/10/31 13:30:02.62 xZzZlui7.net
>>195
\x y z ... -> \i -> i x y z ...
202:デフォルトの名無しさん
17/10/31 13:43:09.29 xihCdoaS.net
C言語で実装してラップしてんじゃないの(知らんけど)
203:デフォルトの名無しさん
17/10/31 13:47:50.97 DbaXyY3l.net
>>196
すげーおまえ頭いいなって思ったが、すまん、
こっちの頭が悪すぎた、まだ何となくしか理解できん。
たとえば、リストから一次元配列を作る関数をつくってくれないか?
ずうずうしいと思ったら、ヒントだけでも。
fromList :: [a] -> 配列型 a
fromList xs = ムニャムニャ
204:デフォルトの名無しさん
17/10/31 15:36:16.62 xihCdoaS.net
C言語で実装してラップしてんじゃないの(知らんけど)
205:デフォルトの名無しさん
17/10/31 15:50:28.40 xZzZlui7.net
>>198
いやチャーチエンコーディングのパクリだよ
fromList xs = foldl ($) (\x y z ... -> \i -> x y z ...) xs
実際は型チェックが通らないからアキュームレーターの関数を
data Func a b = Res b | Func (a -> Func a b)
みたいな型で作って結果をパターンマッチすればいい
206:デフォルトの名無しさん
17/10/31 16:16:10.45 DbaXyY3l.net
>>200
ありがと
あかん、頭の中で考えてても理解できん、
と言うかスッキリしない。
家に帰ったらじっくり勉強してみるよ。
207:デフォルトの名無しさん
17/10/31 18:15:23.97 gU/sNGWK.net
競プロで使えるグラフライブラリにData.Graphってのあるのな
Data.Graph
URLリンク(hackage.haskell.org)
208:デフォルトの名無しさん
17/10/31 19:08:38.44 1toVIYFj.net
>>202
上の問題でverticesとreachableの長さを比較すればと思ったら
verticesは辺の無い頂点も列挙する仕様だったわ
まあGraphの中身はリストの配列だから自分で数えればいいんだけど
209:デフォルトの名無しさん
17/10/31 21:49:16.80 uNFhbghr.net
関数合成ってhoge.piyoよかhoge . piyoの方が可読性高い?
210:デフォルトの名無しさん
17/11/01 00:06:04.05 viv8LMSD.net
>>204
スペース無しドットはモジュールの名前空間の表現に使うから
関数合成は後者で書く方がいいよ
モジュール名は大文字で関数名は小文字だからコンパイラは間違えないけど
211:デフォルトの名無しさん
17/11/01 00:26:27.90 llNAjsKg.net
hackageのソースコード見ても合成のドットは離して書いてるの多いね
212:デフォルトの名無しさん
17/11/01 00:27:10.19 WlWR964+.net
>>205
やっぱりそうですか
ありがとうございます
213:デフォルトの名無しさん
17/11/01 01:06:06.52 Fgn1cTLB.net
人間も間違えねえよってつっかかってくる人昔みかけた
そういう人が出たら、宗教戦争やめろっていうつもりだったのに
214:デフォルトの名無しさん
17/11/01 07:53:11.67 DzcCU70V.net
「大文字と小文字を間違えない」の主語は何かの戦争か
そもそも主語を書く必要がある�
215:フか
216:デフォルトの名無しさん
17/11/01 09:43:47.82 55me074h.net
データコンストラクタも大文字なので(ry
217:デフォルトの名無しさん
17/11/01 11:37:03.55 DzcCU70V.net
最初の文字が大文字やドットなら特別な意味がありそう
最初ってどこなのかは正規表現で定義すれば間違いなさそう
218:デフォルトの名無しさん
17/11/04 23:17:33.32 GxslH7p8.net
リスト内包表記がdo表記に一対一に対応するのは知っていますが、
言語拡張 TransformListComp によって拡張されたリスト内包表記も、
一対一に対応するdo表記があるのでしょうか。
then group by e using f の働きがどのような仕組みなのかよく分からないので、
対応するdo表記を調べて理解を深めたいです。
219:デフォルトの名無しさん
17/11/05 08:59:13.86 BXN9Zljm.net
>>212
>対応するdo表記を調べて理解を深めたいです。
どうぞそうなさって結果をスレにてご報告ください。
220:デフォルトの名無しさん
17/11/05 11:02:14.73 33a+kqna.net
>>213
いろいろ実験したり、GHCのユーザーガイドを読んだりしたところ、
then group by p using f の働きが理解できました。
しかし、結局のところ対応するdo表記は分かりませんでした。
そんなものはもともと無いのかもしれません。
もしかしたらCoreを出力してみると何か分かるかもしれませんが、
自分の中ではもう問題が解決しているので、そこまで調べるモチベーションがありません。
なので、ここでその結果を報告することはできません。
代わりに、then group by p using f がどのような働きになっているのか、
私の知見だけでも述べた方が良いでしょうか。
221:デフォルトの名無しさん
17/11/05 13:47:42.35 iHS/FHvi.net
知見は歓迎です
222:デフォルトの名無しさん
17/11/05 14:29:15.46 g7Wivisu.net
URLリンク(downloads.haskell.org)
> D[ e | Q then group by b using f, R ] = f (\Qv -> b) D[ Qv | Q ] >>= \ys ->
> case (fmap selQv1 ys, ..., fmap selQvn ys) of
> Qv -> D[ e | R ]
> where Qv is the tuple of variables bound by Q (and used subsequently)
> selQvi is a selector mapping Qv to the ith component of Qv
別にモナドで定義されてるからdoで定義してもいいけど
Qvから要素を取り出す方法がアドホックにしか書けないから
doを使わないにしろ一対一で対応するようには書けない
223:デフォルトの名無しさん
17/11/05 18:08:38.19 Rt4/SB7E.net
Haskellの表記を楽にする6つのghc拡張 - Qiita
URLリンク(qiita.com)
224:デフォルトの名無しさん
17/11/05 23:15:17.53 s0bBqtdw.net
>>217
MultiWayIfとBinaryLiterals以外は可読性落ちとるやないかーい
225:デフォルトの名無しさん
17/11/05 23:28:42.70 33a+kqna.net
>>212 です。
then group by p using f の働きはいろいろ不思議な部分があるのですが、
すべての疑問は、then group by p using f で使う関数 f :: (a -> t) -> [a] -> [[a]] の第1引数は
どのような関数が渡されるのか、ということに集約されました。
(それが分かって初めて、これは then f by p の f でも同じだと気づきましたが、
こちらでは理解につまづかない程度の簡単な例しか扱っていなかったので)
この関数 f は、then group by p using f が現れるより左にある全てのバインダを要素に持つ組から p への関数
と考えれば納得がいきました。
たとえば、
[ (x, y) | x <- [1,2,1], y <- "ok", then group by x using groupWith]
ですと、then より左のバインダを要素に持つ組というのは、つまり
<1, o>, <1, k>, <2, o>, <2, k>, <1, o>, <1, k> といった組です。
(実際に内部で使わ
226:れている実際のデータ型は分かりません) このような組から x への関数なので、 g <1, o> = 1 g <1, k> = 1 g <2, o> = 2 g <2, k> = 2 という関数です。 このような関数 g が groupWith 関数の第1引数に渡されると考えると辻褄が合いました。
227:デフォルトの名無しさん
17/11/13 22:38:59.83 GpiHsSLN.net
haskell始めてみたいんだけどまだプログラミング能力があまりないので不安
他の言語をどれくらい書けるようにしておくべき?
228:デフォルトの名無しさん
17/11/13 23:15:58.10 IehbHsjb.net
むしろ手続き型言語に慣れ親しんだ脳みそだと関数型は取っ付きにくいから
いきなりHaskellでいいと思うよ
229:デフォルトの名無しさん
17/11/13 23:27:39.67 ZUv/XWe7.net
>>221
Masterminds of Programming という本で Haskell 委員会のひとりが、
他言語をちゃんとできるヤツはHaskellも上手く使える、という趣旨のことを言ってた。
230:デフォルトの名無しさん
17/11/13 23:30:10.81 ZUv/XWe7.net
>>221
それどころか、いきなりHaskellをやるのはお勧めしない感じだった。
231:デフォルトの名無しさん
17/11/13 23:30:57.19 PxhTPMZi.net
>>222
「ちゃんと出来る」の意味が、常人と違う予感。
232:デフォルトの名無しさん
17/11/13 23:42:04.93 dMdke9KA.net
いきなりHaskellの難点はどのHaskell入門書籍やサイトも基本的なプログラミング知識を前提としちゃってるとこかな
変数とか関数とかリストとかマップとか
でもHaskellというか関数型パラダイムにできるだけ早い時期から触れとくのは良いことだと思う
233:デフォルトの名無しさん
17/11/14 00:36:12.17 XSI09cgL.net
>>220
『プログラミングの基礎』浅井健一
でOCamlやってからHaskellに逝くのが一番簡単な導入
234:デフォルトの名無しさん
17/11/14 00:42:09.25 Meoq/IF/.net
SICP読んでからhaskellやるのは大丈夫?
235:デフォルトの名無しさん
17/11/14 02:30:14.88 RezF4qhu.net
Haskellは日本語どころか
英語でググっても答えが見つからない問題にぶち当たる率が
他のメジャーな言語と比べると高すぎるから初学者向きじゃないよ
もくもく会に参加したり、Stack Overflowで質問したりと
双方向的な方法を挟まないと一定以上に到達するのは難しい
236:デフォルトの名無しさん
17/11/14 11:28:30.93 eZNGHHYs.net
問題自体が難しい
だから答えが見つからない
と解釈するのが自然
問題自体をよく見ようとせず、SEOや脳味噌のことを考えるのは的外れだと思う
237:デフォルトの名無しさん
17/11/14 19:55:37.30 0CBPSjnu.net
ocamlの元のmlで挫折しそうになった。
f#がたのしい
238:デフォルトの名無しさん
17/11/14 20:17:46.83 WUG8DCiI.net
例えばC言語の楽しさを1とすると
haskell,ocaml,f#の楽しさはどれぐらい?
239:デフォルトの名無しさん
17/11/14 21:11:59.47 eZNGHHYs.net
F#はC#の知識を前提とすることを許可されている感がある
箸の上げ下ろしどころか知識を得るのにも許可を必要とする異常な環境に適応したのがF#
240:デフォルトの名無しさん
17/11/14 22:22:03.84 0CBPSjnu.net
f#はなんかこう昔懐かしbasicの関数型言語版のよう
な気がする。
241:デフォルトの名無しさん
17/11/14 22:22:45.27 0CBPSjnu.net
haskell構文がやだ。
242:デフォルトの名無しさん
17/11/14 22:58:23.51 LvvrWEBo.net
>>234
たとえば、どんな構文が?
遅延評価とか参照透過性とか厳密な型付けとか、そういうのを嫌う人はいっぱいいたけど、
構文が嫌って人には初めて出会った。
243:デフォルトの名無しさん
17/11/14 22:59:13.88 wshk46M/.net
F#固有のライブラリ使ったことないな
構文的にC#よりF#楽
あとはHaskell並みの肩推論あれば文句ないんだけど
Haskellは遅延評価使いどころを見つけづらい
244:デフォルトの名無しさん
17/11/14 23:31:10.95 lH5WJrT0.net
結構凝ってるみたいっすねえ
245:デフォルトの名無しさん
17/11/15 01:49:26.34 9iJNvTMA.net
むしろ構文が好きだわ
限りなく不要な物は省く的な
246:デフォルトの名無しさん
17/11/15 07:22:37.14 1MOdQV57.net
インデントルールにたまにハマるくらいかな
一応ブレース&セミコロン方式でも書けるようだが
247:デフォルトの名無しさん
17/11/15 12:36:08.57 Lu+q1695.net
合成関数を左から右に書きたい
何か数学でそんな書き方もあったと思うんだけど忘れた
248:デフォルトの名無しさん
17/11/15 17:52:48.58 C1PNunQ6.net
Control.Arrow の (>>>) 演算子使えばいい
($) の引数入れ替えたヴァージョンなら Data.Function の (&) 演算子
249:デフォルトの名無しさん
17/11/15 17:55:11.80 C1PNunQ6.net
>>239
>一応ブレース&セミコロン方式でも書けるようだが
標準的なコーディングスタイルだと使わないからなあ……
コード生成のときなんかには便利だけど
250:デフォルトの名無しさん
17/11/15 21:31:38.92 ouxrorYh.net
Preludeに引数を入れ替えるというだけの関数なかったっけ?
マニアック過ぎて忘れてしまった
251:デフォルトの名無しさん
17/11/15 22:05:39.40 C1PNunQ6.net
つ flip
全然マニアックじゃないよ……
252:デフォルトの名無しさん
17/11/16 19:05:18.93 U25znXQF.net
Haskellが競プロで得意なグラフ問題がatcoderでマラソン形式で出題されているらしい
253:デフォルトの名無しさん
17/11/16 20:02:11.38 fiTPZdVA.net
誰もhaskell使ってないでしょ
254:デフォルトの名無しさん
17/11/16 20:10:09.25 sSGm4ReW.net
使うものじゃないからな。
255:デフォルトの名無しさん
17/11/16 20:21:11.26 F5ZZYHwp.net
競プロでHaskell使ってた人は皆Rustに移ったイメージ
256:デフォルトの名無しさん
17/11/16 20:28:57.17 BHFP68Bt.net
競プロは普通に手続き型かつ破壊的の方がいいもんな
入力範囲も固定だし、Haskellで挑む理由がない
257:デフォルトの名無しさん
17/11/16 21:32:29.59 F5ZZYHwp.net
関数型っぽく書くと実装が一瞬で完了する簡単な問題が結構あったりはする
258:デフォルトの名無しさん
17/11/16 21:43:12.74 wcx5gPy1.net
競プロより Project Euler で付けた力の方が将来の糧になりそう
259:デフォルトの名無しさん
17/11/16 22:35:40.89 1hTLcaK1.net
Haskellはアルゴリズムをうまくfold系で書ければ
融合則とかで綺麗さと速度を両立できる感じになるけど
うまく書けないとSTRefとか使うことになって
なぜHaskellやってるんだって気分になる
260:デフォルトの名無しさん
17/11/17 00:37:00.18 ehxZncBr.net
ストリーム処理的にしか使ってない
261:デフォルトの名無しさん
17/11/17 00:38:56.41 ehxZncBr.net
ストリーム処理的にしか使ってない
URLリンク(ideone.com)
262:デフォルトの名無しさん
17/11/17 11:21:31.36 7fJDQyWy.net
>>252
fold系には合わない計算があるのは分かる。
でも、なぜそれでSTRefを使うことになるのかが分からない。
263:デフォルトの名無しさん
17/11/17 12:39:19.61 edPG1sGH.net
別にIORefやSTRefを使ったっていいじゃない
FFIだってポインターだってあるじゃない
ただしStateモナド、テメーはダメだ
264:デフォルトの名無しさん
17/11/17 16:36:27.24 FedOcmK4.net
よく知らないけど
カーソル的なクラスと同じように使えるんじゃない?Stateって
Stateモナドに入るのがインスタンス生成で>>=がメソッドコール
265:デフォルトの名無しさん
17/11/17 17:56:56.51 oGefn9Ej.net
1 s -> (a, s)
2 s -> (a -> s -> s) -> s
3 (a -> s -> s) -> s -> s
4 (a -> s -> s) -> s -> [a] -> s
1がStateで4がfoldr
266:デフォルトの名無しさん
17/11/17 20:49:15.19 M/sHB851.net
Haskellって他人のコード読むと
▲ a b = □ . ○ $ map ■ $ (△ a) $ ▼ $ ◎ b []
where
◎ b xs = ~長い処理~
こんなんばかりで脳がパンクするんだが
267:デフォルトの名無しさん
17/11/17 20:52:24.67 FaJpeIXU.net
むしろ他人のコードでも割とサクサク読めるのがHaskellのメリットじゃね?
268:デフォルトの名無しさん
17/11/17 22:00:31.45 Tih5fc0e.net
>>259
せっかく参照透過性が保たれているのだから、自分が読みやすいように、
でも式の意味は変えないように変形すればいい。
複雑なコードに出会って、それでも理解したいという欲求があるのなら、
取りあえず脳がパンクしない程度の小片にまで分解してみればいいんじゃないか。
269:デフォルトの名無しさん
17/11/17 23:01:40.13 5gG4LJO3.net
なるほど処理を理解しきっていなくても
他人のコードを自分が読みやすく変形出来るのが参照透過性のメリットなのね。
その発想はなかったから今度から試してみる。
270:デフォルトの名無しさん
17/11/18 00:48:05.98 Na4dLuAE.net
>>255
foldに乗らない処理ってのが
要は愚直に再帰で書いてるループ計算で、
破壊的更新をしないとものすごいGCが走ってつらいということがあった
(データ構造にもっと工夫の余地があったとは思う)
271:デフォルトの名無しさん
17/11/18 02:53:34.88 /UaXWK/X.net
実際再帰って最終手段だよね。
入門者向けには基本みたいに言われている謎。
272:デフォルトの名無しさん
17/11/18 08:54:42.51 6/fTmZe2.net
言うほど最終手段ではないし基本なのは事実
273:デフォルトの名無しさん
17/11/18 12:58:42.16 TxAwv536.net
Haskellってループないんじゃなかったけ
再帰なしでどうやって組むんじゃ
274:デフォルトの名無しさん
17/11/18 13:13:54.77 qwbMNygr.net
>>266
リストで言うならmapとかfoldlあたりで対応できるならそれを使えばいい
ユーザー定義の再帰関数は自由度は高いけど終了条件を見落とす可能性もあるし、場合によっては末尾再帰やら正格評価やらも気にせんといかん
必要としている仕事より強く自由度が高い関数や型をあまり使わない方がいいのは他言語と同じ
275:デフォルトの名無しさん
17/11/18 13:17:08.17 6/fTmZe2.net
直近で書いた120行程度で関数定義25個を含んだコードを見返したが、確かに再帰は一箇所もなかった。
276:デフォルトの名無しさん
17/11/18 13:21:49.25 IKdiOjx3.net
要するに集合演算があるから繰り返す必要がないということか
277:デフォルトの名無しさん
17/11/18 13:59:18.87 5lmMR8NZ.net
再帰はいいんだけど関数定義をトップレベルに並べるとまるでgotoのように見える
しかしletは使うな、caseは使うなという人もいるから
消去法で高階関数かな
278:デフォルトの名無しさん
17/11/18 17:01:09.59 Sb0VMRtj.net
再帰と言えば、今 haskell.org のサイトのトップにある prime の定義って素敵だよね。
こういう宣言的で自己説明的なプログラムが普段のコードでも書けるように精進したい。
279:デフォルトの名無しさん
17/11/18 19:18:50.08 +f9/gyau.net
以下で、なぜエラーが出るのかがわからないです。
import Data.Typeable
f :: (Show a, Typeable a) => a -> String
f a = if typeOf a == typeRep (Proxy :: Proxy String) then a else show a
以下のようにすると、なぜかうまくいきます。
f a = if typeOf a == typeRep (Proxy :: Proxy String) then read $ show a else show a
280:デフォルトの名無しさん
17/11/18 20:12:39.81 Sb0VMRtj.net
>>272
前者で then a else show a としているから、a は String 型でしかありえない。
一方、型シグネチャにより、a は String 型以外の型も認めている。
矛盾している。
試しに前者を、型シグネチャを書かずに関数定義だけ書いて、ghci の :t で型を調べてみよう。
次回から、エラーの内容も書こう。
281:デフォルトの名無しさん
17/11/19 00:17:21.62 K9yRHYlu.net
そこにエラーを出してくれるのがHaskellの良い所
動かす前に叱ってくれるって素晴らしい
282:デフォルトの名無しさん
17/11/19 07:14:38.53 gzKE6jPG.net
>>273
ありがとうございます
283:デフォルトの名無しさん
17/11/19 14:3
284:4:38.43 ID:Sx00JERW.net
285:デフォルトの名無しさん
17/11/19 17:33:53.76 FtsW9SXJ.net
ちゃんと書くとこんな感じになる
primes = 2:(section [3..] composites)
where
composites = union [multiples p |p<-primes]
multiples n = map (n*) [n..]
section (x:xs) (y:ys)
| x < y = x : (section xs (y:ys))
| x == y = section xs ys
| x > y = section (x:xs) ys
union = foldr merge []
where
merge (x:xs) ys = x:merge' xs ys
merge' (x:xs) (y:ys)
| x < y = x : merge' xs (y:ys)
| x == y = x : merge' xs ys
| x > y = y : merge' (x:xs) ys
286:デフォルトの名無しさん
17/11/19 20:38:10.15 21tWIVgE.net
>>277
かっこいいコードだけど
省ける計算が多い分まだ試し割の方が速いんだな
primes = 2 : filter isPrime [3..]
isPrime x = all ((/=0) . (x`mod`)) $ takeWhile ((<=x) . (^2)) primes
数が大きくなればmodのコストが問題になるのかもしれないけど
287:デフォルトの名無しさん
17/11/19 20:53:42.98 CsMCJwUW.net
>>278
かっこいいの? どの辺りが魅力的なん?
288:デフォルトの名無しさん
17/11/19 20:54:52.08 FtsW9SXJ.net
一応言っとくと >>277 はRichard Bird がよくあるヴァージョンを批判されてきちんと篩を書いたコード
289:デフォルトの名無しさん
17/11/19 21:08:29.23 21tWIVgE.net
>>279
modを使わない所がお洒落
290:デフォルトの名無しさん
17/11/19 21:13:45.49 aWoSpo3i.net
でも解りにくいじゃん!
Haskell知らなくても何をしてるか
勝手に分かってしまうコードが宣伝用には理想
そういう視点でも
メモ化フィボナッチコードは神コードだね
291:デフォルトの名無しさん
17/11/19 22:01:10.75 3wAGigTa.net
フィボナッチってどこで使う場面があるのさ?競プロ?
292:デフォルトの名無しさん
17/11/19 22:04:47.47 CsMCJwUW.net
>>282
それは >>276 が「その代わり」ってちゃんと断ってるじゃん。
たいていの場合、両立なんてできないんだよ。
メモ化フィボナッチが希有な例なんだよ。
>>283
全くない。
だから、学ぶべきはフィボナッチ数列の作り方じゃなく、
宣言性を壊さないままメモ化する技術の方なんだが、
あの本にはその辺りのことは書かれていなかったような気がする。
メモ化フィボナッチは単なる例にとどまってたんじゃなかったか。
293:デフォルトの名無しさん
17/11/19 22:31:12.52 FtsW9SXJ.net
「あの本」?
294:デフォルトの名無しさん
17/11/20 09:32:22.51 2YC1SjJx.net
f1 = (map f1' [0..] !!)
where
f1' 0 = a
f1' n =〜
の形は
f2 n = foldl' f2' a [1..n]
where
f2' n =〜
より分かりやすい。
import Data.List (foldl')という
余計なインポートが不要なのが最高。
295:デフォルトの名無しさん
17/11/20 10:30:22.80 ybEAOaLd.net
ghcコマンドやghciコマンドの出力メッセージの中で、
引用符が倍角文字になってるんだけど、これ半角に設定できないかな。
ターミナルで使ってるフォントの関係でかなり読みにくい。
296:デフォルトの名無しさん
17/11/20 19:19:15.77 i6dwbdTS.net
わかりやすいもなにも map で畳み込み計算をどうやって書くつもりなんだろ
できなくはないけど余再帰使うはずで、そうなればもう map とかそういう問題ではない
�
297:ニいうかscanlをmapで再実装するのがそんな最高なのかしら……
298:デフォルトの名無しさん
17/11/20 23:56:42.78 POIf14n/.net
foo (x:xs) = ~(なんか関数)~ (x:xs)
と
foo a@(x:xs) = ~(なんか関数)~ a
と
したとき、前者と後者は内部的に処理違ったりする?
299:デフォルトの名無しさん
17/11/21 08:36:28.75 jCVIG8Yh.net
>>289
GHCの処理方法が分からないなかで、
それでも違うかどうかを調べるには、たとえば次の方法がある。
・Coreを比較する
・プロファイルを比較する
・バイナリを比較する
300:デフォルトの名無しさん
17/11/21 11:49:36.85 Zx2Txvw4.net
>>288
普通ならリストが空か否かの場合分けで2行ぐらい書くところを
余再帰なら1行で書けるんだろ
301:デフォルトの名無しさん
17/11/21 14:03:16.67 .net
>>224
C++ちゃんとできる
(ガサガサッ
(ビュンッ!
302:デフォルトの名無しさん
17/11/21 17:45:32.32 Ftr24wOW.net
C++ちゃんってあれだろ?
「ブーストかけるぜ」なCちゃんの別人格
Haskellちゃんも見たかったなぁ…
303:デフォルトの名無しさん
17/11/21 19:32:07.35 Egb8Rv0R.net
>>289
ghci -ddump-simpl で起動して、問題の関数定義を let 束縛してみたら
Coreのレベルで完全に同じだとわかる
まあ、そりゃそうだろって感じだが
304:デフォルトの名無しさん
17/11/21 20:06:56.72 NQH8f0G2.net
バイナリでは違いが出たよ
305:デフォルトの名無しさん
17/11/22 00:50:08.76 ovFpIkAx.net
コンパイル時刻
306:デフォルトの名無しさん
17/11/22 09:20:37.07 CArcd2ol.net
f (x:xs) = (x:xs) → case 引数 of _ -> x : xs
g a@(x:xs) = a →
だと
307:デフォルトの名無しさん
17/11/22 09:28:04.15 CArcd2ol.net
ミスった
ghci -ddump-simplだと
f (x:xs) = (x:xs) → case 引数 of _ { (x:xs) -> x:xs }
g a@(x:xs) = a → case 引数 of a { (x:xs) -> a }
みたいなのが出力されたけど・・・
308:デフォルトの名無しさん
17/11/22 10:01:50.65 KMROYMtU.net
やってみた
URLリンク(ideone.com)
@パターンは不可反駁なんで、少しだけ違うね
9行目と31行目で a は不可反駁なんでワイルド扱い
15行目と37行目もまさに同じ点が違う
309:デフォルトの名無しさん
17/11/22 10:27:32.10 DL3EaaUj.net
stackoverflowで聞けば識者が的確に答えてくれそう
310:デフォルトの名無しさん
17/11/22 18:10:15.64 ovFpIkAx.net
最適化で消えるだろう
311:デフォルトの名無しさん
17/11/23 04:31:10.10 .net
《問》(配点 10点)
\n -> 1 + n
\f n -> f 1 n
\f -> f 1 . (\g n -> g 2 n)
らはスーパーコンビネータである。しかし、
\f g -> f 1 . (\n -> g 2 n)
はスーパーコンビネータではない。何故か?
《ぼくの解答》
g がラムダ抽象のスコープ外で束縛されており、そのスコープにおいて自由変数である。
従ってこのラムダ抽象は閉じた項ではないのでコンビネータではない。
コンビネータでも定数でもないのでこのラムダ抽象はスーパーコンビネータではない。
全体としては、定数でなく、されどコンビネータではあるが、その内部にスーパーコンビネータでないものを含んでいるのでスーパーコンビネータではない。
何点貰えますか?
312:デフォルトの名無しさん
17/11/23 04:34:25.61 .net
訂正(一行目)
× g がラムダ抽象の~
○ g が括弧内のラムダ抽象の~
313:デフォルトの名無しさん
17/11/23 06:11:27.29 S1VTy0fD.net
(->) は?
314:デフォルトの名無しさん
17/11/23 09:12:04.55 GxHnNEoE.net
>>302
¥n1 n2 … -> E
がスーパーコンビネータであるのは
(1)Eに出現する自由変数が n1~n2 だけであって、かつ、
(2)Eに現れるラムダ抽象がスーパーコンビネータであるとき、
そしてそのときに限る。
¥f g -> f 1 . (¥n -> g 2 n)
の場合、 ¥n -> g 2 n は g が(1)を満たさないのでスーパーコンビネータではなく、
したがって(2)によって、それを含む全体がスーパーコンビネータではないこよになる。
スーパーコンビネータの定義ないし必要十分条件を示してないと減点するのが普通。
315:デフォルトの名無しさん
17/11/23 09:13:02.72 GxHnNEoE.net
表記ちょっとミスったけどまあ分かるでしょ
316:デフォルトの名無しさん
17/11/23 09:16:33.82 GxHnNEoE.net
ああ……
(2)Eに現れる「すべての」ラムダ抽象がスーパーコンビネータであるとき、
だ。肝腎のとこが抜けてる……寝よう……
317:デフォルトの名無しさん
17/11/25 23:17:22.88 .net
>>305
Haskell High Performance Programming には、
A supercombinator is either a constant, say 1.5 or ['a'..'z'], or a combinator whose subexpressions are supercombinators.
と説明されてますが、これは嘘なのですか?
318:デフォルトの名無しさん
17/11/26 00:11:02.93 6YUjT6hC.net
>>308
それだと
¥x y -> (x + y)
ですらsupercombinatorにならんよ
319:デフォルトの名無しさん
17/11/26 01:59:13.32 .net
むむむ…
(x+y)に現れる全てのラムダ抽象とはなんですか?
320:デフォルトの名無しさん
17/11/26 07:38:30.34 6YUjT6hC.net
>>310
この場合、(x+y)にはラムダ抽象が現れていないので条件(2)は空虚に充足されている
あとは条件(1)も充足されてるから、スーパーコンビネータになる
321:デフォルトの名無しさん
17/11/26 12:17:18.61 qOXUNg+f.net
>>308
subexpressionの定義が曖昧だな
例えば \ y -> x は \ x y -> x のsubexpressionか?
322:デフォルトの名無しさん
17/11/26 13:55:44.55 VpgSp9ND.net
純粋関数型どころか関数型言語のTDD本が無いのですが、
Java用に書かれた本に載っている方法論のどは、
Haskell で TDD を行う際にも取り入れられる事は多いですか?
例えば最近出た「テスト駆動開発」(Kent Beck著)など。
最初の方をチラ読みしたところ、大変読みやい印象を受けたので、
参考になればいいなと思いましたが、どうでしょうか。
323:デフォルトの名無しさん
17/11/26 23:25:24.41 k9PNaQXG.net
次の型があるとします。
data T = D1 {d1a :: Int, d1b :: String} | D2 {d2a :: Char, d2b :: Double, d2c :: Integer}
同じデータコンストラクタ由来の値同士の比較関数を次のように作るとします。
smallerThan :: T -> T -> Bool
smallerThan t1@(D1 _ _) t2@(D1 _ _) = d1b t1 <= d1b t2
smallerThan t1@(D2 _ _ _) t2@(D2 _ _ _) = (d2b t1, d2c t1) <= (d2b t2, d2c t2)
smallerThan _ _ = undefined
これを、D1 や D2 の定義内のフィールドの順を変えたり、フィールドの数が変わったりしても、
smallerThan 関数の定義は修正しなくても良いようにしたいのですが、方法はあるでしょうか。
要するに、パターンマッチにおいてデータコンストラクタ名のみマッチングテストをしたいのですが・・・
324:デフォルトの名無しさん
17/11/27 00:32:04.34 4PKE/tcf.net
>>314
言語拡張 PatternSynonyms,RecordWildCards を使うといけるようだよ。
pattern D1_ <- D1 {..}
pattern D2_ <- D2 {..}
として、後は t1@D1_ t2@D1_ のようにパターンマッチして利用する。
325:デフォルトの名無しさん
17/11/27 00:44:20.26 ZVUfUGVW.net
ていうか、 拡張使わなくても空レコードでパターンマッチできたはず
smallerThan (D1{}) (D1{})
みたいに。
326:デフォルトの名無しさん
17/11/27 00:51:37.87 ZVUfUGVW.net
ほれ
URLリンク(paiza.io)
327:デフォルトの名無しさん
17/11/27 07:38:07.20 ysH8mXge.net
なるほど、空レコードでマッチングできる事を知りませんでした。
ありがとうございました。
328:デフォルトの名無しさん
17/12/02 10:21:44.75 SLnkjfbB.net
ある名前の型がどのモジュールで定義されているのか、
あるいはまだ定義されていないのかを hoogle で調べる事は出来るでしょうか?
329:デフォルトの名無しさん
17/12/02 10:53:38.35 pAxOhb0h.net
実際に hoogle つかってみりゃいいじゃないか
330:デフォルトの名無しさん
17/12/02 12:27:16.11 SLnkjfbB.net
>>320
すみません、かなり恥ずかしい勘違いをしていました。
できました。
331:デフォルトの名無しさん
17/12/06 00:26:39.18 4CiAHXyH.net
tanakhにはもっとhaskellの話をしてほしいよ
332:デフォルトの名無しさん
17/12/06 00:47:59.63 IlK1069D.net
haskellよりrust
333:デフォルトの名無しさん
17/12/06 05:28:21.98 .net
tanakhには今だけはPEZYの話聞きたい
334:デフォルトの名無しさん
17/12/07 18:59:33.65 HvbKuO/f.net
GHCで、モナドの各インスタンスの(>>=)関数などの、型ではなく実装を見たい場合はどこを見ればいいのでしょうか
特にIOモナドが気になってます
335:デフォルトの名無しさん
17/12/07 20:09:35.72 RO0W0ydd.net
URLリンク(hackage.haskell.org)
IO の instances の中から Monad IO 選んで各演算子の source 見ればいい。
336:デフォルトの名無しさん
17/12/07 20:10:53.27 RO0W0ydd.net
URLリンク(hackage.haskell.org)
要するにこれね。
337:デフォルトの名無しさん
17/12/07 20:30:31.60 g7/WaViS.net
>>326
>>327
おお、ありがとうございます
重ね重ね申し訳ないのですが、これによるとIOモナドの(>>=)はbindIOでbindIOは
bindIO :: IO a -> (a -> IO b) -> IO b
bindIO (IO m) k = IO (\ s -> case m s of (# new_s, a #) -> unIO (k a) new_s)
となっているのですが、ここでcase式を使っているのはどういった意図があるのでしょうか
letと同じ使い方ですか?
338:デフォルトの名無しさん
17/12/08 00:03:17.81 Xz8G+NtW.net
caseは先に式を評価してからパターンに含まれる変数を束縛する
でもletには再帰があるかもしれないから先に変数束縛する
その変数を含むかもしれない式は遅延評価する
339:デフォルトの名無しさん
17/12/08 00:12:07.08 Hb+0BqaU.net
>>329
なるほど、そうだったんですね
勉強になりました、ありがとうございます
340:デフォルトの名無しさん
17/12/09 22:36:37.66 rGCS9XaY.net
Stack の LTS 9.17 に repa って無いのな
341:デフォルトの名無しさん
17/12/10 00:28:18.35 61nYDsc2.net
rapeならあるかも
342:デフォルトの名無しさん
17/12/13 13:00:04.55 BNG1q+wP.net
stackでパッケージをインストールする時にコンパイルしなくなったって話を聞いたけど本当ですか?
バイナリをダウンロードしてインストールするみたいな?
化石スペックの俺のパソコンでshellcheckのインストールで8時間以上かかった悪夢は解消されるの?
343:デフォルトの名無しさん
17/12/13 13:14:20.26 PKyEd910.net
【葬儀】たくさんの人があっけなく死んでいく
スレリンク(sousai板)
【応報】藤原さやか『放射脳は恥ずかしい』→急死w
スレリンク(csaloon板)
【内乱罪】フクイチで核ミサイルを製造していた疑惑
スレリンク(disaster板)
344:デフォルトの名無しさん
17/12/16 19:22:25.34 6IhxD8vU.net
abc予想の解決で再び圏論が注目を浴びそうだ
345:デフォルトの名無しさん
17/12/16 19:57:24.58 L7fV5ivU.net
Haskell->圏論って流れはあるけど
圏論やっててHaskellに興味を持つ人もいるのかな
346:デフォルトの名無しさん
17/12/16 21:07:33.28 .net
圏論が何に役立つのか知らんけど、苦労して学んだ人が振り上げた拳の行き場が見当たらなくて
たまたま目についたHaskellをぶん殴ったんじゃないの
それは道端の石ころを蹴っ飛ばすように
347:デフォルトの名無しさん
17/12/16 21:27:51.46 eb/bER4l.net
数学は案外行き当たりばったりに問題が解決されている
圏論で判明した同型について、ある分野で解決されていて
ある分野においてすっぽ抜けているところがあれば、その問題は解決できるとみなせる
このように現状のとりとめのない数学を整理するために圏論はあると言えるかもしれない
よって圏論自身から新たに得られる情報はあまりないだろう
だからあまり研究も進まない・・・
348:デフォルトの名無しさん
17/12/16 22:31:29.81 L7fV5ivU.net
Ekmettさんとかはどういうスタンスなんだろう
349:デフォルトの名無しさん
17/12/17 08:25:26.21 Rl+JU+bv.net
圏論自体はものの見方とそのための記号だから、
圏論使ってる時点で、自分の応用分野もってるでしょう。
その場合、
圏論 -> universal algebra
圏論 -> functional programming
圏論 -> categorical stochastic relations
圏論 -> haskell
のように興味の対象が増える程度でhaskellだということに意味はなさそう。
圏論的アプローチは他の言語でもライブラリ群いろいろあるしね。
350:デフォルトの名無しさん
17/12/19 05:44:21.31 LTRWN5XC.net
プログラム・プロムナード/Haskellプログラミング-情報処理学会
URLリンク(www.ipsj.or.jp)
351:デフォルトの名無しさん
17/12/19 13:25:55.10 fHF/6Dd9.net
bakeの開発が終了したようですが、
同じ趣旨のライブラリは他にありますか?
352:デフォルトの名無しさん
17/12/19 23:53:10.07 IjOdIEt7.net
この会社って言うたらそこまでの規模じゃないだろうし実態もよく分かってない感じなのに
なんつーか、『ある傾向の人間性』の社員が現時点ですら目立ち過ぎだろ…
こぃぬ㌠‏ @Altalinux
スパコンに詳しくない人間がスパコンを語って
つい昨日PEZYを知ったような人間が補助金やら助成金やらを語るんですねえ地獄のような構図ですねえ
Hideyuki Tanaka‏ @tanakh
まじで特捜は「詳しい技術者」が「使い物にならないスパコン」に「巨額の資金」が流れてるというタレコミだけで、
オッそれは絶対におかしいなとか先走ったけど、調べても思ったようなのが出てこなくて困ってるんじゃないのか。
山田てるみ‏ @telmin_orca
つまりこの件は、アベガーとかカネノナガレガーとか言っておけば良いのであって、
技術的にどうとか言った瞬間に全力で殴られる案件だということだ
Hishinuma‏ @Hishinuma_t
例のPEZYが100億円不正受給の記事が何の謝罪もなく差し変わっている。
URLリンク(www.data-max.co.jp) …
353:デフォルトの名無しさん
17/12/20 00:50:37.50 L78Bpqe7.net
まずはお前が騙し取った金返して謝罪しろよ
354:デフォルトの名無しさん
17/12/20 18:40:30.98 Qm3pwgEV.net
tanakhさんはhaskellの日本での普及に貢献された方かもしれませんが
tanakhさんが勤める会社PEZY computingはhaskellとは関係ないのでは
355:デフォルトの名無しさん
17/12/20 20:26:50.59 .net
二位じゃダメなんですか陣営に失脚させられたかな
356:デフォルトの名無しさん
17/12/20 20:29:03.05 WuO+qrMG.net
初心者なのでtanakhさんって方を知らないのですがどんな方なんですか?
357:デフォルトの名無しさん
17/12/21 00:28:08.74 vVg09BnX.net
tanakhさんは『すごい Haskell たのしく学ぼう!』の翻訳者の1人の田中英行さんのハンドルネームだよ URLリンク(twitter.com)
ちなみにもう1人の翻訳者の村主崇行さんは今年亡くなられた URLリンク(www.asj.or.jp)
358:デフォルトの名無しさん
17/12/21 00:42:32.53 X50/c3iq.net
tanakhは簡単に言うとプログラミングが得意な屑
359:デフォルトの名無しさん
17/12/21 00:46:16.46 53ydh+Pj.net
>>348
今すごいHaskellの訳者紹介見直したら村主さんのコメントがめっちゃ真面目で泣きそう
大損失だな……
360:デフォルトの名無しさん
17/12/21 03:19:48.25 .net
それでは本日の出場者を紹介してまいります。
先ずは田中英行。
tanakhでお馴染みのアカウント名は、大学時代、フルネームだかtanakahだかの取得に、被ったか弾かれたかで妥協してつけたのがその由来です。
高校の時にファミコンだかスーファミだかのエミュレーションソフトをネットワーク対戦可能な機能をつけて開発した(当時ネットワーク対戦機能を持つエミュは世界初)人で
この時学んだだろう、ファミコンの処理の仕様には一家言あり。
京都大学工学部(後期日程で合格)卒、東大院卒
競技プログラミングでは全盛期にTopCoderにてレッドコーダーまで登ったことがあり、
大学時代に大学対抗競技プログラミングの世界大会へ国内代表権を勝ち取って出場歴あり、
その頃知り合ったエリート達と Preferred Infrastructure(PFI) を創業。
後に体調不良で休職しPFIを辞めた後、Haskellで株式を取り扱うソフトウェアを開発するベンチャー(?)に就職も半年強でまた転職。その転職先がPEZY Computingであります。
Twitterではふざけてばかりおりますが、あれは頭のいい人特有の余裕みたいなもので
本当の彼は日夜PEZYのスパコンで最高のパフォーマンスを叩き出して世界ランキングを塗り替えるべく
ループ毎に20ナノ秒を削るカリカリチューニングコードを書き続けている本物のプログラマです
社長の詐欺疑惑の件で社内の様子が新聞に載った際、『5000兆FLOPS欲しい!』のパロネタを壁に掲示していたのも彼の仕業であります
すごいHaskell楽しく学ぼうの翻訳者の一人
夢はこの世からプログラマ(という職を自動化技術によって)消し去ること
猫が大好き。Haskellマスター 田中英行─
361:デフォルトの名無しさん
17/12/21 03:46:15.12 tLGR8mGR.net
つよい
362:デフォルトの名無しさん
17/12/21 04:49:39.43 UMfwMR6Z.net
京大首席合格(後期)
363:デフォルトの名無しさん
17/12/21 06:35:36.91 xu21FK50.net
プログラミングに関係ないプログラマの話は余所でやってほしい
364:デフォルトの名無しさん
17/12/21 11:23:12.31 hPrP3Uhu.net
諸君、議論したまえ
365:デフォルトの名無しさん
17/12/21 12:28:48.94 RWEMpEAi.net
競プロに出てくるような座標がコロコロ動いたり表を作るような問題をHaskellで上手く解くにはどうしたらいいでしょうか
手続き型では二次元配列を更新しまくればいいのですが
さすがに毎回takeとdropでリストを作り直すのは悪手ですよね?
366:デフォルトの名無しさん
17/12/21 12:52:34.50 xNbVMOX5.net
悪手かどうかはコンパイラに聞いてみればいいんだろ
配列を更新しまくったらコンパイルエラーになるのか?
コンパイラが信用できないならLispとかErlangとかを使えばいい
367:デフォルトの名無しさん
17/12/21 12:55:55.14 tLGR8mGR.net
関数型っぽく解決するにはどうすればいいかを聞いてるのでは
368:デフォルトの名無しさん
17/12/21 12:59:59.71 Pje/kUoS.net
競プロは時間・空間計算量にシビアだから
369:デフォルトの名無しさん
17/12/21 13:17:02.58 xNbVMOX5.net
競技プログラミングと関数型プログラミングの両立を目指すのは良いと思うよ
ついでに手続き型と関数型も両立すればもっと良い
370:デフォルトの名無しさん
17/12/21 14:20:53.11 V2XnJ2N1.net
C++でギリギリな問題でもない限りMapとかでもいけるけど
Mapで書きやすいかというとそうでもない
371:デフォルトの名無しさん
17/12/21 15:30:56.14 wep0AD/i.net
>>356
具体的な例を挙げてくれないか?
372:デフォルトの名無しさん
17/12/21 16:35:55.75 X50/c3iq.net
少なくとも報道をソースとするなら、斎藤社長は「詐欺を働いた」に等しいのよ。
平たく言うと「自分の意思で嘘をついた」と言い換えてもいい。
それを、「開発の失敗」だの「誤りやミス」だのと一緒にしようとする
ぺジー連中が馬鹿だと言ってるのよ。
失敗やミスによるものと、虚偽によるものでは明らかに
社会や法のあつかいが異なる、そんなことも知らないのか、
知ってて敢えて誤魔化そうとしてんのかよぺジーのスパコン馬鹿は、って話。
373:デフォルトの名無しさん
17/12/21 18:27:40.50 dmM+x8ix.net
>>363
Haskellと関係ない話だろ
>>354を読めない人か
374:デフォルトの名無しさん
17/12/21 18:36:28.75 MPWX0Jf6.net
釣られるな
375:デフォルトの名無しさん
17/12/21 19:45:14.05 N1FJ2XDr.net
お前はスレチの馬鹿
376:デフォルトの名無しさん
17/12/21 20:21:25.77 6NVAqFid.net
最近毛の壁みないな
377:
17/12/22 06:04:00.73 Zf+4IlSz.net
>>367
あの情熱はぜひとも獲得したいと思っているのですが…
378:デフォルトの名無しさん
17/12/22 12:35:38.59 xKTA0owB.net
情熱だけで正しい知識が伴ってないとダメ
379:デフォルトの名無しさん
17/12/22 12:46:49.98 PrEChj7V.net
f = reverse . reverse
main = print $ f [1..10]
みたいに書いたときって、reverse関数が2回実行されますか?
結果が変わらないからされないですか?
380:デフォルトの名無しさん
17/12/22 13:27:52.08 xKTA0owB.net
そのままではされてしまいます。しかしメタプログラミングを用いて reverse . reverse を 静的に除去可能です
381:デフォルトの名無しさん
17/12/22 13:46:49.38 pcrnJTeB.net
そういう除去って、reverseは逆順だっていう知識をアプリオリに与えておくの?
それとも定義から解析して無意味じゃんって判断できるの?
382:デフォルトの名無しさん
17/12/22 15:11:53.84 cEn+RgaZ.net
RULES プラグマです。
383:デフォルトの名無しさん
17/12/22 16:02:02.05 pcrnJTeB.net
りょ。
サンクス
384:デフォルトの名無しさん
17/12/22 16:36:48.40 GFPkoNql.net
>>371
ありがとうございます
さすがに出来ないだろと思ってたんですが方法はあるのですね
プラグマはまだ明るくないのでもっと勉強します
385:デフォルトの名無しさん
17/12/22 19:53:35.68 6Ry8x8A0.net
foldl f a . reverse → foldr (flip f) a
みたいなルールはあってもいいかもね
reverse = foldl (flip (:)) [] だから
reverse . reverse == foldr (:) [] == id
後者の変換はghc標準でflipは簡約で消えると思う
386:デフォルトの名無しさん
17/12/23 14:41:19.28 9K72DzOx.net
pezyは嘘ついて補助金だまし取って、一部を私的に流用したから逮捕されたのに、
まるで開発が計画通り進まなかったから逮捕されたかのように
印象操作しているから悪質
387:デフォルトの名無しさん
17/12/23 15:19:44.84 97OmZxF2.net
べつに誰も何も言ってないだろ
おまいがそう解釈しただけでは
388:デフォルトの名無しさん
17/12/23 15:21:59.98 Jhot/ru+.net
Haskellと関係ない話なんだよな
389:デフォルトの名無しさん
17/12/23 16:45:07.96 UP/Zv3hx.net
Haskell で開発されたアプリケーションのソースで、こういう形のものがある。
---[ Main.hs ]---
module Main where
import Application (runApp)
main :: IO ()
main = runApp
---[ Application.hs ]---
module Application (runApp) where
runApp :: IO ()
runApp = do
ほりゃらら
つまり、Main モジュールにはできるだけ何も書かず、別のモジュールに仕事を移譲している。
中には runApp 関数を一つ持つ Application クラスと、そのインスタンス型が一つだけ定義されている事もある。
このような実装の runApp 関数が実際に担っているロールはどれもアプリのエントリポイントだ。
しかし、これはまさに main 関数のロールではないだろうか。
main 関数が本来担う仕事を他の関数に丸投げする事にどのような意味やメリットがあるのだろうか。
390:デフォルトの名無しさん
17/12/23 17:10:50.49 E55wgL+K.net
PEZYのスレ立ててそっちでやってください
391:デフォルトの名無しさん
17/12/23 17:47:20.71 RG/9qhez.net
>>380
runAppとは別の処理をrunAppの前後に入れるときにmainに書き足すだけで楽とかじゃね?
392:デフォルトの名無しさん
17/12/23 19:57:22.35 deN0FCLD.net
おれはmainに直接書くわ。Haskell以外でもそうしてる。
393:デフォルトの名無しさん
17/12/23 20:06:53.43 ZaJB/ccT.net
stackで新規プロジェクト作成するとmainからsomeFuncに飛んでるよね
394:デフォルトの名無しさん
17/12/23 20:30:46.09 .net
そう…(無関心)
395:デフォルトの名無しさん
17/12/23 22:07:15.33 ePD34LgC.net
Advent Calendar催促おばさんが面白い
396:デフォルトの名無しさん
17/12/23 23:15:34.86 nlPzuvyg.net
>>380
runAppの処理を別のモジュールやアプリに組み込みたいとき、名前がmainだと困る、とか
397:デフォルトの名無しさん
17/12/23 23:54:48.18 UP/Zv3hx.net
>>382
楽かどうかという視点ならば、前後に入れるだけなら、
その手間は runApp 関数の中に入れるのと同程度ではないか?
別の処理だからという視点ならば、確かに一見理にかなっていそうたが、
アプリが立ち上がった直後、エントリポイントのロールよりも前に仕事をするものとは、
いったいどのようなロールなのだろう?
私が見てきたアプリでは、runApp 関数の中でコマンドライン解析や設定ファイルの読み込み、
ログシステムの構築なども行っていた。
要するにアプリを動かす準備だ。
準備をする前にすべき事とは?
>>387
runApp 関数内にそのアプリ専用のエントリポイントが書かれたものしか見たことがなく、
それを別のモジュールやアプリに組み込むという状況が想像できないのだが、
具体的にどういう事なのだろう?
その場合、関数名が main だとなぜ困るのだろう?
398:デフォルトの名無しさん
17/12/24 02:26:59.79 0qLezeKt.net
>>378
社員が総出でtwitterで開発が上手くいかなかったから詐欺にされたって
デマ流しまくっているじゃん
399:デフォルトの名無しさん
17/12/24 07:27:03.02 .net
最近毛の壁みないな
400:デフォルトの名無しさん
17/12/24 13:10:48.98 L0WbVZsM.net
壁毛ならマ板にスレあるよ
401:デフォルトの名無しさん
17/12/25 01:09:51.28 KmZOPanU.net
pythonにはxonshとかいうシェル言語があるらしい
URLリンク(vaaaaaanquish.hatenablog.com)
これのHaskellバージョンがあれば便利じゃないか。
Haskellとの親和性は高いと思う。シェルスクリプトって要はコマンドのコンビネータだし、コマンド呼び出しの構文は関数適用によく似てる。
402:デフォルトの名無しさん
17/12/25 01:12:38.31 KmZOPanU.net
ただ、ls -a -l -d hoobar みたいなのをシームレスに書くのはチャレンジングな課題だ。
引数の文字列リテラルのリストなどをコマンドラインにイチイチ打ち込むのは面倒くさい。
RebindableSyntaxでマイナスを定義し直して、、いや、悪手っぽいか。
なるべくHaskellを書いていきたい。いちばん身近なところを置き換えられたなら、とても良い。
403:デフォルトの名無しさん
17/12/25 05:14:44.74 /fea/C1E.net
haskellバージョンのイメージわかないけど
haskellシェルは何がどう便利になるというの?
404:デフォルトの名無しさん
17/12/25 12:02:29.99 EPa
405:fu7oO.net
406:デフォルトの名無しさん
17/12/25 12:28:50.13 F9gRwc9o.net
Haskellシェルだとhsshとかになるん?
407:デフォルトの名無しさん
17/12/26 01:06:43.66 ntWKYT9z.net
シェルスクリプトを使えばいいと思う
なぜコマンドの実行にHaskellを使う必要があるのか
408:デフォルトの名無しさん
17/12/26 11:29:24.52 zQBvuC0m.net
まあconfigureスクリプトにはm4とかいうプリプロセッサがあるから意外と難しいよな
409:デフォルトの名無しさん
17/12/29 04:23:00.56 PWPZaOro.net
EzoeがいつHaskellに飽きて堂々とディスり始めるのか楽しみ
410:デフォルトの名無しさん
17/12/29 05:30:43.56 dUewwmlf.net
ガチC++erから見たHaskellというのに少し興味が湧いている
411:デフォルトの名無しさん
17/12/29 05:56:52.00 xARFptR0.net
仕様壊れてるC++に慣らされきった人間にHaskellの厳格さの価値がわかるのかねぇ
静的型不要論的な妄言吐きそう
412:デフォルトの名無しさん
17/12/29 13:11:23.08 .net
江添っぽさがふんだんに盛り込まれていてよい
413:デフォルトの名無しさん
18/01/01 12:12:22.18 bFOlOWpA.net
この人は本当にプログラム書けるのかと不安になることがあるよな。
はっきり言ってc++普及に関しては逆効果をあげてるとしか思えん。
414:デフォルトの名無しさん
18/01/01 16:00:21.64 pGnY0Ifz.net
芸人だと思って見てるわ
415:デフォルトの名無しさん
18/01/01 16:42:32.16 O/UW/N2W.net
老害の見本
416:デフォルトの名無しさん
18/01/01 16:44:34.98 QrIEjumd.net
ローカルマシンにある jenkins において、haskell コードのビルドに stack を使いたいのですが、
その際に環境変数として HOME が設定されていないと使えません。
そこで、ビルド時に使うシェルスクリプト内で HOME を JENKINS_HOME に設定しましたが、
このディレクトリでは何か問題あるでしょうか。
取りあえずやってみましたら、今のところ特に問題なくビルドできていますが・・・
スレチでしたらすみません。
417:デフォルトの名無しさん
18/01/01 18:03:12.68 TBixhmIP.net
>>406
jenkinsはわからないがstackはどうやら $HOME 直下に .stack ディレクトリを作って
そこに(必要なら)ghcとかをインストールするらしい。
例えばconfig.yamlもそこに入っているので、普段の$HOMEにそれがある場合は、jenkinsでのビルドと設定が変わってしまう。
とはいえ、このファイルが働くのは特定のプロジェクトに属さない動作のとき(stack newとか)だけっぽいので、
ディスクの容量が切迫してるとかでない限り、問題ないんじゃないかな。
418:デフォルトの名無しさん
18/01/02 00:37:55.48 hQQ1WWOS.net
C#しか知らない大学生なんだが関数型を理解したいんだが何すれば
419:デフォルトの名無しさん
18/01/02 01:13:22.41 wAfZ+SpV.net
H本を読む
420:デフォルトの名無しさん
18/01/02 01:16:32.50 hQQ1WWOS.net
F#と比べてどれがいい?
421:デフォルトの名無しさん
18/01/02 01:21:41.45 wAfZ+SpV.net
は?勉強目的なら言語名でググって検索件数が多いやつのほうが解決策見つけやすいだろHaskell一択だろぉ
422:デフォルトの名無しさん
18/01/02 01:44:03.46 9JghhVFB.net
まずHの練習からしたほうがいい
423:デフォルトの名無しさん
18/01/02 01:59:58.11 hQQ1WWOS.net
>>411
そうなんですか
424:デフォルトの名無しさん
18/01/02 02:11:04.88 bfdSjs8c.net
F#もいいけどまずはHaskellの純粋さに感動してからの方が良いよ
425:デフォルトの名無しさん
18/01/02 08:11:19.29 hHAEZ1EB.net
言語仕様はもちろんとして純粋関数型のデータ構造やアルゴリズムも合わせて学習しないと手詰まりになる
426:デフォルトの名無しさん
18/01/02 13:53:49.75 2m2cwFbr.net
状態マシンでなく関数合成に持ち込む為の定番手法,
例えばiteratee?とかの知識も知りたい。
427:デフォルトの名無しさん
18/01/03 00:36:59.01 Mw/JDaoF.net
なぜ関数プログラミングは重要か
URLリンク(www.sampou.org)
428:デフォルトの名無しさん
18/01/03 00:53:21.23 EBTl2OcL.net
関数型脳を鍛えるにはHaskellがよい
429:デフォルトの名無しさん
18/01/03 01:24:32.28 wPBJzesv.net
プラグマとかシンタックスシュガーのオプションがやたらあって、
古い構文がデフォルトでなくなったり、いまだに安定してないイメージが強い
430:デフォルトの名無しさん
18/01/03 03:21:56.48 Mw/JDaoF.net
安定してるプログラミング言語ってあんの?
431:デフォルトの名無しさん
18/01/03 04:47:00.22 JH/i0Zss.net
拡張の数は標準の安定性と関係ないし非推奨になった構文も知る限り2,3個程度しかないし言うほど安定してなくはないと思うよ
主要な拡張の破壊的変更も多ければ不安定だがそこは知らん
安定してる言語の話題たまに出るけどどの言語もそれなりに不安定という結論以外になったとこ見たことない