関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/01/15(日) 23:43:54.28ID:Vh4eztBk
関数型プログラミング言語 Haskell について語るスレです。

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

前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/test/read.cgi/tech/1428597032/
2017/02/24(金) 11:52:40.03ID:e/BP7pNw
最新のGHCは簡単な余再帰が末尾再帰に変換されて最適化かかるの?
2017/02/25(土) 01:04:24.08ID:wcM+rtIC
>>182

http://melpon.org/wandbox/permlink/2dkmGhuBxpuIXnLU



http://melpon.org/wandbox/permlink/zMLvKlMSoP1i5EFb
2017/02/25(土) 06:14:09.47ID:rUogqkUr
これがアスペか
2017/02/25(土) 06:24:01.20ID:E4CT8R9/
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

フィボナッチは前スレのこれが美しすぎた。
これを見た後では
zipWithのフィボナッチとか完全に霞んで見える。
2017/02/25(土) 11:33:38.62ID:J8MTJSeU
数式に近いから美しいって言ってるのかもしれないけど
それは
fib_mem :: Int -> Integer
fib_mem x = _fibs !! x
_fibs = map _fib [0..]
_fib 0 = 1
_fib 1 = 1
_fib n = fib_mem (n-2) + fib_mem (n-1)
みたいに一時データがユニークになるって話だから
メモ化されるって言ってもO(n^2)だけどな
2017/02/25(土) 12:20:37.16ID:5RveVCtH
こんな所で感動しちゃってどうするの
そういうのは万策尽きて神頼みするような時だけいい
数学に感情は不要
2017/02/25(土) 18:51:36.03ID:A0aZ5Z9S
初歩的なメモ化で感動できた頃の心の輝きは大切にしていきたい
2017/02/25(土) 18:58:12.64ID:A0aZ5Z9S
メモ化してトップダウンするより足していってボトムアップの要領の良さが勝つ回
2017/02/26(日) 22:44:13.60ID:+sRU0DuI
stack new して作ったプロジェクトでライブラリを作りました。
(cabal ファイルに executable の代わりに library の項目を書いた)

stack build して正しくビルドされたことを確認してから stack install しました。

この後、別の stack new したプロジェクトで、先程 stack install したライブラリを使用するには、
どうすればよいのでしょうか。
2017/02/27(月) 10:48:09.56ID:TbO8J9W/
stack.yamlのpackagesから設定できるよ、stack installはしなくて良い https://docs.haskellstack.org/en/stable/yaml_configuration/
2017/02/27(月) 22:42:50.07ID:6zX/SjR0
>>192
出来ました。
ありがとうございました。
2017/03/01(水) 13:33:54.14ID:5kGyNHm4
諸君、議論したまえ
195デフォルトの名無しさん
垢版 |
2017/03/02(木) 08:35:24.25ID:jHvj97KG
http://tamae.2ch.net/test/read.cgi/prog/1475046306/812n

Haskellerが現れた
2017/03/06(月) 19:44:44.66ID:BYkqMHF2
新しく出たHaskell本の感想クレクレ
2017/03/06(月) 20:21:59.21ID:j+wBUtqM
前書きだけ立ち読みしたけど
あれ関数プログラミング入門を書き直したものなんだな
2017/03/06(月) 20:28:33.59ID:MHxEW6Wj
古い方持ってたら不要なのね
2017/03/06(月) 23:01:20.41ID:WL27y1mu
マジかよ危うく買うところだった
2017/03/07(火) 00:14:37.81ID:+xePePxn
かなり書き直してるよ
2017/03/07(火) 10:44:02.94ID:mr++RUpk
Bird氏の本の第三版か。
あの人、Functional Programmingの大御所なんだね。
すごいHやGraham氏、その他日本人著者の書いたのをいろいろ読んだけど、
コアな部分を理解するならBird氏の本だと思った。
翻訳第二版のファンシーな表紙をやめて、
原著の表紙の虎を持ってきたのは何かあったのだろうか?ww
2017/03/07(火) 13:07:01.84ID:H+HmLSCA
>>201
コアと言うのは、例えばどんな部分?
2017/03/07(火) 13:38:15.87ID:fYd9KAIw
と思ったらそもそも関数プログラミング入門買ってなかったのでこれを機会に買おう
2017/03/07(火) 17:44:15.63ID:rdG5C9r5
kinkyな表紙にしてくれ
2017/03/07(火) 17:49:10.46ID:mr++RUpk
>202
最初から正格、非正格を念頭に置いた上で議論が進んでいく。その時点で既に毛色が違う。
豆知識として、リスト内包表記とdo構文の<-の関係も載ってた。
証明問題が多く、数学がわかんないときつい感じ。
2017/03/07(火) 20:23:58.44ID:36OrCepo
>>205
あぁなるほど、そう言うのを一般に「コア」って言うのか

ありがと
2017/03/08(水) 06:06:40.10ID:XWjfITmE
https://stackoverflow.blog/2017/02/07/what-programming-languages-weekends/
2017/03/08(水) 06:44:38.74ID:KZ+JXzQR
今更すぎる
和訳で知ったのに原文貼って物知り顔するな
2017/03/08(水) 12:31:57.39ID:RBmx3E25
>>207
週末に人気のあるプログラミング言語(StackOverflow調べ)
https://developers.srad.jp/story/17/02/09/0354232/
週末にいちばん多く使われるプログラミング言語は?
http://postd.cc/what-programming-languages-weekends/
210デフォルトの名無しさん
垢版 |
2017/03/11(土) 21:23:14.84ID:uo9d8gfu
Haskellにも依存型があと数年以内に組み込まれるらしいですが、使用目的は専ら型安全性を得るためなのでしょうか?
2017/03/11(土) 23:30:29.33ID:UHyrmxcZ
定理証明支援系はいつですか?
212resumi
垢版 |
2017/03/12(日) 01:08:56.73ID:f0Kjw9v5
これ普通にショックだね。。
本当なの??
https://goo.gl/RB0asw
2017/03/12(日) 01:54:17.97ID:kqHBJY7y
見てないけどグロ
2017/03/12(日) 22:59:29.77ID:fpOKmvSG
最新のGHCだと余再帰が可能な限り自動で末尾再帰に変換されて最適化がかかるって聞いたんですけど本当すか?
2017/03/13(月) 08:05:36.75ID:0mFH2buk
tanakhに訊け
2017/03/13(月) 10:55:02.44ID:dlgNAjv1
tanakhとかうざ
2017/03/14(火) 22:01:52.58ID:EYcQAf3p
Data.Setをモナドにしたい場合はどうしてますか?
GADTsを使ったものと
https://wiki.cse.unsw.edu.au/cs4181/13s2/Schedule?action=AttachFile&;do=get&target=thum460.pdf
type familyを使ったものと
https://hackage.haskell.org/package/constrained-categories-0.3.0.1/docs/Control-Monad-Constrained.html#g:1
もしくはそれ以外にも方法はあるのでしょうか
2017/03/16(木) 21:36:03.95ID:4z74DpyU
使う型がInt32なら32を、Int64なら64をコンパイル時に決定してソースコードに埋め込むメタプログラミングな関数を書くにはどうしますか?
2017/03/16(木) 22:28:40.43ID:4z74DpyU
Int に 対する read が遅くて困っています。
80万個のInt型をreadするのに、10^9付近の整数ばかりの場合と、1とか10とか小さな整数ばかりの場合とで 2 倍も処理時間が違ってきます。(2秒が4秒です!)
もっと速く読み込む方法はありませんか?
(但し標準入力からとします)
220デフォルトの名無しさん
垢版 |
2017/03/16(木) 23:18:00.86ID:xmljzEMX
readInt
221デフォルトの名無しさん
垢版 |
2017/03/16(木) 23:20:30.52ID:xmljzEMX
ByteStringのreadInt
222デフォルトの名無しさん
垢版 |
2017/03/16(木) 23:21:15.32ID:xmljzEMX
readIntegerだった
うろ覚えだったすまん
2017/03/17(金) 00:45:32.34ID:gNJfFjGV
http://melpon.org/wandbox/permlink/Uii2xmdQFxxnwLS4
2017/03/17(金) 00:46:54.92ID:gNJfFjGV
これは全然メタじゃない
2017/03/18(土) 18:18:35.73ID:bH58Sv6/
>>221
ありがとうございます。10倍速く動くようになりました
2017/03/18(土) 19:37:41.00ID:bH58Sv6/
ひょっとして、foldl か foldl' かよりも、そこに渡す二項関数の方を正格にするか遅延のまま
かが速度に関わっているのでしょうか?

※二項関数は(+)やmaxのように単純であるとする
2017/03/19(日) 04:00:42.66ID:o/zGHEH2
ん、何言ってんだ。二項関数の問題じゃなくて二項関数に渡す『二つの引数が今すぐどちらも値まで評価されるかどうか』が問題なのか。
される場合、foldl'の方がサンクなしの省メモリ(定数空間?)で処理が進むのか。
foldl'で正格に評価するといってもWHNFで止まるんですもんね

サンクが要らないからその部分(サンクの作成と破棄)のオーバーヘッドがなくなってちょっとだけ速くなるのか。でもあくまで foldl' の利点は省メモリの方か
2017/03/19(日) 10:06:06.54ID:awlj00/Y
https://github.com/google/codeworld
http://code.world/

これに関する質問ってこのスレでいいの?
2017/03/19(日) 10:30:10.95ID:fNC16+Hl
速度の比較をしたいならまずプロファイルを取りなさい
2017/03/19(日) 14:43:43.30ID:qjqnp6Y8
V8エンジンで無茶苦茶速くなったことだし、もうTypeScriptでいいやと思うようになった。
231デフォルトの名無しさん
垢版 |
2017/03/20(月) 20:37:53.08ID:H6ds3WUf
教えてください

何らかの型の巨大データがメモリ内にあったとして、データが用済みになった時に手動で解放する方法がHaskellにありますか?

そもそもそういう発想が間違いかも?
2017/03/20(月) 22:25:28.88ID:THpWaU1J
mark&sweepいらないなと思った時に参照カウントに変更する方法
言語を変えなくてもコンパイラを変えるだけでできそう(できたとは言ってない)
2017/03/20(月) 22:42:41.03ID:tOiVLltG
>>231
用済みになった時に手動で解放というのが、

1) たとえどこかから参照されていようが強制的に解放する
2) 参照がなく解放できる時にスケジューリングを待たずにGCを強制する

どちらの意味なのか分からん。

前者のつもりなら、たしか方法はなかったような気がする。
この発想は間違っていると思う。
自分が仕込んだメモリリークの問題を隠しているだけ。

後者なら、base パッケージの Systwm.Mem モジュールを調べてみて。
これなら分かる。
例えばゲームで、できるだけステージ途中で時間かかかるGCが起動しないように、
ステージ開始直前に強制的にGCさせたい、とか。
234デフォルトの名無しさん
垢版 |
2017/03/20(月) 22:58:59.79ID:H6ds3WUf
>>233
ありがとう。質問してよかった。

こちらのイメージ的にはCで言うところのfreeで1)が近いと思うが、GCを強制する
発想がそもそもなかったです

断続的にでかいデータを扱うので、次のロードまでにメモリを解放しておく必要
がありまして。

Systwm.Memを調べてみます。
235デフォルトの名無しさん
垢版 |
2017/03/21(火) 07:16:46.72ID:RPjo5BAn
演算子の部分適用の書き方で
演算子との間にスペースを書かないのはHaskellの作法?
(+ 3) (3 +) じゃなく (+3) (3+) って書くじゃんみんな
2017/03/21(火) 09:36:45.55ID:bH1u/9cj
みんなそうしてるから真似してそうしてるだけだろ。
わからないことは調べるのはめんどくさいから真似しておこうとか思ってそう。
2017/03/21(火) 13:49:23.04ID:L0SduR/f
>>235
普通に2項演算子として用いている場合は項と演算子とが独立してる感があるが、
部分適用した場合は「3を加える関数」という一塊の概念というイメージが強い
なんとなくだけどそんな使い分けではないかと思ってる
2017/03/21(火) 13:55:43.06ID:TPAad80u
GUIには等幅ではないフォントがあるから
1ピクセル単位でスペースを描く作法とかありそう
2017/03/21(火) 14:18:51.18ID:kbUhzU5T
Lispの関数 1+ とかの影響でない?
2017/03/21(火) 14:46:18.79ID:LpaugWCV
逆にHaskellでだけスペース挟んだりしたくないだろ
2017/03/21(火) 19:57:22.30ID:zopuGVTD
人間は文章を読むのに時間がかかる筈なので、質問と同時にGCを強制発動して、ユーザが質問を理解し返答を入力するまでの間にGCを終えたい
242デフォルトの名無しさん
垢版 |
2017/04/02(日) 18:01:47.89ID:HoO7tpUE
「関数プログラミングの思考法」で勉強してるんですが
「たのしく学ぼう!」は楽しく理解できる内容で
こちらは余計な表現は省いている硬派な文体ですね。
そのため反ってサクサク理解していけるのですが
皆さんどうでしょうか。
2017/04/02(日) 19:10:13.29ID:y9d2jD+G
>>242
分かる。ノイズが多い本は理解を妨げる面があるよな。
2017/04/02(日) 19:17:33.68ID:W6VXUIjv
ノイズが多い本……land of lispかな?
2017/04/03(月) 17:43:18.72ID:n+rAkf5b
軽妙な喩えならいいんだがセンスない人がやると惨憺コース
2017/04/03(月) 18:24:45.70ID:Qx3jr0sY
H本に影響を受けて書かれたE本はセンスないし痛々しいしで読むのが辛かった
変な色気出して慣れないことをしないでくれ
2017/04/03(月) 20:16:55.66ID:uUmwarja
>>244
Land of Lisp は何故か許せる
2017/04/03(月) 22:01:45.88ID:cuuaF505
ノイズじゃなくて冗長性だろ。
冗長性が多いほど失った記憶を復元しやすいから覚えやすいんだぞ。
そんなことも知らないのか馬鹿だなぁ。
2017/04/03(月) 22:37:33.25ID:uw3ZIsiG
暗記法かな?
2017/04/04(火) 01:02:45.85ID:Zl9hd3NS
ラノベじゃないんだ。インクと紙の無駄遣いは止してくれ
251デフォルトの名無しさん
垢版 |
2017/04/07(金) 19:19:25.31ID:sbHW0sIW
ラノベで気軽にHaskellを覚えられたらいいんだけどな
2017/04/07(金) 20:38:50.80ID:hQkI4asK
むしろHaskelでラノベ全文を書いたらいいんだけどな
2017/04/07(金) 20:56:28.47ID:lfhJbqMl
>>251
「Haskellを覚える」の意味が分からん

Haskellの何が覚えられないんだ?
文法一覧表とか入門書をいちいち見ないとコーディングできないとか?
それなら、たとえラノベに分かり易く書かれていようと、読むだけじゃ憶えられんぞ
2017/04/07(金) 21:28:25.18ID:TruQxjxN
英語で遠回りして結局覚えられない奴
2017/04/07(金) 21:40:36.27ID:aTgPduXz
Haskellをというか、ライブラリの便利な使い方を覚えるってことかな

ライブラリの型シグネチャとチョロチョロっとした英語の説明読んで、想像力働かせて『これは今までの処理がこうこう、こういう書き方でできるようになって便利ですね』と理解するのが難しい

<* や *> のパーサーでの使い方(認識だけして捨てる)を知った時はアハ体験だった

こういうのをドキュメント読んだだけで気付くということができない
2017/04/07(金) 21:44:12.76ID:aTgPduXz
基礎ライブラリは抽象的なので、そこから応用的具象化を想像する能力が足りない

初めてApplicativeのドキュメントを読んでその有用性に気付く奴はIQ高過ぎだろ
頭がpureだった俺は戦意喪失したものだよ
2017/04/07(金) 21:57:17.10ID:oAg/9XNg
誰かHaskellで萌える関数型プログラミング入門書いてくれ。
2017/04/07(金) 22:45:53.56ID:961Byv/H
>>257
本当に買ってくれるのか?
買ってくれるならKindleで出すかな
2017/04/07(金) 23:09:24.70ID:lfhJbqMl
>>255
ライブラリドキュメントを眺めていて、どんな使い方ができるんだろと想像するのは、そりゃ難しいよ。
それはドキュメントの使い方を間違っていると思う。

俺はアプリケーションを作っている時、

1. こういう引数からこういう結果になる関数が欲しい
2. 1の計算を分解すると A、B、C という計算の組み合わせになりそうだ
3. A、B、C を計算する関数をすでに誰か作っていないだろうか?

という順に考えて、A、B、C をドキュメントから探す、という使い方をしてる。


*> の例なら、誰かがパーサーで認識だけして捨てるのに使っているのを見てアハ体験をするのではない。

そうじゃなくて、初めにパーサーを作っていて認識だけして捨てたいという欲求が湧いてきて、
じゃあどうするかと考えた時に、まず「認識だけして捨てる」とはどういう計算なのかを分析する。
そうして事の本質を捉えてからドキュメントから求めるものを探す。

その時、たまたま既にパーサーの構造を Applicative で表現していれば、
ドキュメントの Control.Applicative モジュールの項を真っ先に探して *> を見つけるだろうし、
別の方法で実装していれば、実現する関数はライブラリには無さそうだなと諦めて自作するかも知れない。
何れにしてもアハ体験の出番はない。


言っておくが、アハ体験が悪いわけではないぞ。
他人の解説やソースコードを見て、そういう使い方もできるのかと学ぶ事は大事だ。
ただ、ドキュメントをそのように使うのは違うだろ、つまり(ライブラリ)ドキュメントは
解説書でも読み物でもないだろ、と言いたいんだ。
2017/04/07(金) 23:36:42.37ID:+bl73oc8
本来であれば入門編は有用性ではなく単相型の欠陥に気付かせるべきなんだよ
VectorInt型とかVectorChar型とか再発明を繰り返すループに気付け
その後でパラメータ多相編とアドホック多相編をやるべき
2017/04/08(土) 01:14:10.72ID:7QsPN9bB
>>258
買う買う。
2017/04/08(土) 20:59:41.01ID:gcfXcmks
>>258
かうぞー!
2017/04/09(日) 00:41:02.14ID:jUVd4dkj
萌は興味を引かせる手段にはなれても、理解を深める手段にはなれんよ
2017/04/09(日) 01:31:48.04ID:cVuKvPJL
Kindleで、標準ライブラリの一つにつき一冊かけて特集した本を電子書籍で出して

抽象的な基礎ライブラリはその応用可能性をねっとりと絡み付くまでに例示して
2017/04/09(日) 01:36:18.18ID:xs3hgIsU
いいっすね読んでみたい
GitBookあたりで無料で
266デフォルトの名無しさん
垢版 |
2017/04/09(日) 06:15:21.14ID:bWQLB/aV
HaskellはHOW TO本が少な過ぎる
写経するだけでサクッと実用アプリを作れるような本が欲しいよね
IOが七章や八章から登場する入門書とか
Haskellを普及させる気ねぇだろw
2017/04/09(日) 11:16:11.13ID:6mlbYxYb
>>266
他言語でもそんな本は無いんじゃないか?
「サクッと」と「実用」がどんなレベルか知らんけど。

一応 Beginning Haskell が Web 系で実用的で、
入門者がアプリケーションを作るまでを指導してくれるが、洋書だ。
2017/04/09(日) 13:25:40.09ID:k7pBYoHG
Pythonなんかは
サンプルコードを書き書きしてるだけで
機械学習が出来ちゃう本なんかが出てるね
2017/04/09(日) 14:32:15.66ID:h7Zssp3Z
Haskellでエロイベント満載の
エロゲーを作る入門書が欲しい
2017/04/09(日) 22:07:49.23ID:iyanZMWu
Haskellってゲーム創るのに向いてるの?
2017/04/10(月) 00:42:05.83ID:6CfyD+kA
エロゲー作るのに大事なのはエロ絵だけ、プログラミング言語なんて全く関係ない
2017/04/10(月) 01:04:16.20ID:rMcgJXKg
圧縮した画像を取り出したりするのはC言語だと思う
他の言語を混ぜても、小規模ならC言語の占める割合が高い
だから他の言語はスケーラビリティがーと言って大規模化しようとする
2017/04/10(月) 02:02:19.00ID:U7/Um2af
C言語開発はストレスで禿げるから嫌だ
居玉で横歩取りするような将棋は嫌だ
2017/04/10(月) 03:00:41.47ID:IhGuSZfb
>>270
モナディウスあるから作れないことはないけど、C/C++のが向いてる。
Haskellに限らずJavaやC#みたいなGC使ってるのはタイミングがシビアなゲームには向かない。
(やるとしても場面切り替えのタイミングまでGC止めたりと、工夫が必要)
シビアじゃないゲームならUnityの公式言語だったり、PS VitaのSDKもC#だし、ゲームプラットフォームの選択肢多いC#じゃね?
2017/04/10(月) 03:05:43.30ID:Zvy/cqZx
とはいえ今時ゲームというばスマホだから
スマホ対応の難しい言語は論外だろうな
2017/04/10(月) 03:14:10.80ID:IhGuSZfb
ゲームとは言わんが、Haskellでスマフォアプリ作れたらなぁ。。。
Webアプリを作って、URLをスマフォの画面に置くのが関の山だろう。
Yesod本の和訳早よ。
2017/04/10(月) 03:52:14.23ID:mPsedSNt
同系統の言語のCleanはIDEに標準で付いてくるサンプルに
2D横スクロールアクションみたいなゲームとかTCPとかあるから
そっち使うとかは?
2017/04/10(月) 03:58:17.94ID:U7/Um2af
Androidで動くHaskellの話はどうなったの?
2017/04/10(月) 05:18:31.19ID:t1irNdwQ
どの言語でも無理矢理Androidで動かす狂人はいるけど
実用性はというと・・・お察しください
2017/04/10(月) 08:42:46.72ID:qzcpQwFo
>>271
声優だって大事
2017/04/10(月) 11:21:56.58ID:QIjIFLSF
purescriptとりあえず入れてみたけど、コンパイラしかないのな
2017/04/10(月) 21:28:48.23ID:490JO927
arrayの要素数を型に含めることはできないの?
それがあれば、行列の積とかで便利だと思うんだけど
オレ頭が悪いんで言っている意味が分からないかな…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況