関数型プログラミング言語Haskell Part31©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part30
http://mevius.2ch.net/test/read.cgi/tech/1484491434/ 質問させてください
Stringの配列xsを1つの要素につき1行ずつ画面に出力する場合、
mapM_ putStrLn xs
と
putStr.unlines $ xs
ならどちらの方がいいのでしょうか? https://ideone.com/hreKZz
前スレの分割集合のアルゴリズムをdp風にしてみたけど
結局リストを作るコストは同じだからむしろ遅くなったわ Haskell 入門書の新刊が、今日付で発売。
『Haskell入門 関数型プログラミング言語の基礎と実践』技術評論社、¥3,280(税別)
http://gihyo.jp/book/2017/978-4-7741-9237-6 (一部ページのサンプルpdfあり)
https://www.amazon.co.jp/dp/4774192376 日本人の書くHaskell本は入門書ばっか。
ダメとは言わんが、バラエティーがないね。 だって関数プログラミングについて深い内容を書けるだけの知識と見識のある人間なんて日本にはいない
実務家も大学の先生もね 誰か、競プロを生き抜くためのHaskell TipsをKindle出版してくれ
できればUnlimited 対応で >>10
haskell-masterことtanakh大先生に頼むしかないな Glorious haskell-master tanakh is crazy about Rust these days. >>11
何を以て中級と言えるか分からんが、
実用的なアプリを作るのに欠かせない技術や考え方を学ぶという観点なら
http://www.apress.com/us/book/9781430262503 を勧める。
タイムマシンを販売するWebストアを作るという体で解説が進む。
(なぜタイムマシンなのかは最後に分かる)
名前に Beginning とあるが、Beginning なのは第1部だけで、
第2部以降は実戦色が強くなる。
この本の大きな特徴は、第2部以降は必要性が出てきた段階で、
必要な分だけ Haskell の構文やライブラリや技術などの解説がされることが多いこと。
たとえばアプリのリソースの扱い方を学ぶ段階で初めて
IOモナドによる入出力の解説が登場するのは当たり前だが、
それと同じ章で Conduit や Binary Serialization の解説が登場する。
実用的なアプリの作成において、これらでリソースを扱うのが非常に有用だからだ。
入門書では前半で出てくるような型がこの本では後半で出ることもある。
入門書をしっかり理解できているのなら適当に読み飛ばしたくなる所もあると思うが、
そこで作った型や関数は後で使うことが多いので、復習と思ってぐっと我慢すべし。
個人的には、アーキテクチャレベルの章が無いのが残念。 新しくでたHaskell本、田舎に住んでる自分的にはいい感じだわ。
著者の方をみると、東京とかの勉強会はこの辺を踏まえてるんだなと勝手に思ってる。
周りにHaskellerがおらず独りでやってるけど、実践的な面で何か取りこぼしがないかとの疑問が頭に残ってたから、これで安心。 例えば、undefinedをAgdaのホールみたいに使えるとか知らんかった。 実際何か作ろうとなったときに今どのライブラリでどう作ればいいかの道筋を示す本はないから
そこをわかって出してくれてそうな今回の入門書に期待 >>19
ないね。
理論的な部分はこれまでの良書で固めて、
上で書いたような、俗っぽい(悪い意味ではない)部分を補充、といった感じかと。 ところで、今Webアプリってブームなの?
みんなWebアプリを作りたくてウズウズしてんの? ゲーム作るならFRPなの?
どのパッケージがいいの? ヘルムって奴?
それ以前にFRPってどこで勉強すればいいの? Elm、FRPやめたってよ
FRPと関数型のことは忘れろ えええ。。。じゃあHaskellでゲームって、なんのライブラリ使って作るの 自分で作ってみるのはどうでしょうか?
良いライブラリができたら公開してね!! HaskellによるゲームプログラミングにFRPを使うメリットがない。 みんなhaskellで何するの?
haskellのためのhaskellしてるみたいなイメージ stackがあればハスケルコンパイラーインストール必要ないんやな。
全部消してやったぜ。 神様ありがとう、ハスケルに会わせてくれて
君は眠っていたね >>32
C言語の倒し方を発見する
またはC言語を倒せないことを証明する >>32
あえて言おう
自分自身の処理系を記述できない処理系はクソ Eq クラスや Show クラスのように default deriving として使えるクラスを自作することはできますか? Haskellによる関数プログラミングの思考法
Richard Bird (著), 山下伸夫 (翻訳)
https://www.amazon.co.jp/dp/4048930532/
この本ていいの?
すぐ教えろ C++ Rust Haskellは言語とライブラリを見るだけで楽しめるが
言語とライブラリはすぐ古くなるのがこわくて手を出せないやつが多いんだろうね >>39
ありがとうございます。
その本を借りてみます。 >>40
「関数プログラミング 珠玉のアルゴリズムデザイン」のための良い入門書って感じ REPLでlet文ごっそり複数行貼れるんだね。
ちまちま一行ずつコピペしててバカみたいだったww
自分みたいなアホはあまりいないと思うけど、一応の注意喚起。 Data.MapのfromListとtoListはキーが例えば自然数なら自動で昇順になるのですか?
確実を期すのであればfromAscListやtoAscListを使うべきですか? Functional Pearl って何? 自分で名乗ってもいいの? vectorパッケージでリスト内包表記的なのってありますかね?
また、ああいうsyntax sugarてユーザーが定義できるんでしょうか? 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)
やあるいは別の場所がくくられますか?
下の場合どこでくくっても答えが同じなので混乱してきました Just 10 >>= (\x -> return (x + 1) >>= (\y -> return (x + y + 2)) do
x <- Just 10
y <- return (x + 1)
return (x + y + 2)
Just 23 カッコで括らない限りラムダ式のリテラルを使うとそれ以降はラムダ式の内側になるから
bindというか演算子に限らずa+\x->x+bみたいなのはa+(\x->x+b) >>63
let と where を同時に使わない、さえ守ればまあ。
https://wiki.haskell.org/Let_vs._Where
ちなみにcaseを使わないでパターンガードで書くと
ガードをまたげる where の方が書きやすいので
個人的にはまさにcaseもletも使わない 使う意味がわからない
局所的なスコープの中だから式でないと書けないでもなければ使わない 値ならlet、関数ならwhereみたいな使い分けしてるわ
両方混ざることもしばしば
caseもdo構文の中とかで普通に使わね? 左上から順番に読んで引っかかる時はlet使うかな。パターンガードはwhere一択だね。
baseパッケージを雑に調べたんだけど、総数はそれぞれ
where: 2038
let: 665
case: 979 foo = \ n -> let xs = map fib [0 ..] in xs !! n
bar = let xs = map fib [0 ..] in \ n -> xs !! n
宗教はいくつか掛け持ちする方がいい
nonlocalにすればlifetimeが長いとか便利な言葉が使える 宗教で思い出したんだけど、みんなエディタは何使ってる?
https://github.com/rainbyte/haskell-ide-chart
Atom派が増えてきた気がする(Stepwise Debuggerってなんだろう)。 vimのlanguage server対応がもっと進んだらvimに戻りたい HIE知らんかった。試してみよう。
自分もSpacemacsだわ。 プログラミングに限らず、およそ文字列を編集する作業において、
vim以外のエディタは考えられない体になってしまった。 タイプミスが多いのでキー入力コマンド操作とか誤操作ばかりで死ぬ CoqとかAgdaもやろうとしてたからEmacs一択で、
Vimの操作性も習得したいと思ってたから結果的にSpacemacsに落ち着いたわ。 Spacemacs知れようとして、Emacsのバージョン足りなくて死んだ 静的どころか参照透明なんだし、補完は充実してほしいよなあ。
data Pen = Pineapple | Apple
apple = Apple
pen :: Pen
pen = a
もうこの時点で候補をappleに絞ってほしい。 そんな「絞り込み」はそもそもできないしすべきでもない
そもそもその例の場合なら完全に redundant だとしてむしろ積極的にappleを除外してほしい >>87
できそうな気がするけど。
…-> Pen のような関数がないって事がわかってて、
penの型定義も限定されてるから、そこに書くことのできる値は限られてる。 >>85
その絞り込みの是非は置いておくとして、「参照透明」と「絞り込み」の関係がよく分からん。
その例だと、参照透明である必要はないと思うが。 >>89
そうだね。絞り込みについては静的であれば充分。
参照透明なら実行中に値が変わることがないから、例えばShowしたものを補完候補としてリストアップできる。 id やら const やらの問題はさておき
そこでもし仮に apple に絞られたら相当イラつく >>88
その例なら簡単にできるけど、一般的には相当厳しいと思うよ。
型がシノニムだったら、辿って元の型を探さないといけないね。
import されてたら、それも全て辿らないといけないね。
template が使われてたら、展開しないといけないね。
Cプリプロセッサが使われてたら、これも展開しないといけないね。
型を決定するのに関わる事は他にもいっぱいある (言語拡張とか)。
あと、参照透明は破られないという前提で話してると思うけど、
unsafePerformIO 関数があることを忘れないように。 まずは自動車を二人で運転したり、独裁者が二人いる国を作ってみればいいのだ
それができたら一人を機械で置き換えて人間+機械のコンビを作る >>94
作れるよ。
フレームワークもいくつかあるし、入門書もある。 webフレームワーク周りは一時期乱立とは言わないまでもだいぶ混乱してた印象があるけど
最近の流れはどうなってるんだろうか すみません、ある型とその取扱い関数の
標準・追加ライブラリでの有無の確認なのですが、
実数の範囲を表す型で(A,B)というのがあったとして
A以上B未満の範囲を示していて、
それがリストに[ s1, s2, s3, s4 ]の様に並べられているとして
その中身は[(0,1),(1,2),(2,4),(4,8)]としますと
実数「1.5」はこのリスト3番目の変数が示す範囲に
含まれますと教えてくれる関数なのですが、
このような型と関数があるライブラリを知っていましたら
教えて下さい。 ■ このスレッドは過去ログ倉庫に格納されています