関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part31
https://mevius.5ch.net/test/read.cgi/tech/1506447188/
関数型プログラミング言語Haskell Part32
■ このスレッドは過去ログ倉庫に格納されています
2019/01/29(火) 09:05:47.90ID:gJP/u7IJ
451デフォルトの名無しさん
2019/08/26(月) 18:35:14.67ID:FuRqq0AU そもそも
b <- m
if b then ~
と書かなきゃいけない言語に贅沢言っちゃいかん
b <- m
if b then ~
と書かなきゃいけない言語に贅沢言っちゃいかん
452デフォルトの名無しさん
2019/08/26(月) 20:58:49.90ID:JCuV3Nd8 ifはアプリカティブを使ってはいけない例か
意図的に書いてるなら頭いいな
意図的に書いてるなら頭いいな
453デフォルトの名無しさん
2019/08/27(火) 11:02:46.95ID:LbNJg1Kq C++のnewも一個ずつだ
多変数関数の存在自体がバグみたいなもの
多変数関数の存在自体がバグみたいなもの
454デフォルトの名無しさん
2019/08/27(火) 13:49:23.94ID:aYd+hskG たしかにむずかしいね。
455デフォルトの名無しさん
2019/08/27(火) 14:01:37.09ID:aYd+hskG レコードでなくMap型ならモノイドで足して上書きしていけるのに。
456デフォルトの名無しさん
2019/08/29(木) 12:53:50.13ID:eXCPAcGY Haskellは数学者のおもちゃの域を超えてないな
実用を考えたらライブラリの豊富なPythonに勝るものはない
実用を考えたらライブラリの豊富なPythonに勝るものはない
457デフォルトの名無しさん
2019/08/29(木) 13:19:40.08ID:VY7wxkJm python にまけるなんていわれるとは
458デフォルトの名無しさん
2019/08/29(木) 17:00:49.94ID:ssy8xOLs >>456
> Haskellは数学者のおもちゃの域を超えてないな
本当の数学者はHaskellなんて相手にしないよ
Haskellという玩具で喜んで遊ぶのは数学者じゃなくて数学者にあこがれてるだけの単なるプログラマ
> Haskellは数学者のおもちゃの域を超えてないな
本当の数学者はHaskellなんて相手にしないよ
Haskellという玩具で喜んで遊ぶのは数学者じゃなくて数学者にあこがれてるだけの単なるプログラマ
459デフォルトの名無しさん
2019/08/29(木) 19:08:34.02ID:qkTKPz6x じゃあ本当の数学者が相手にしてるプログラミング言語はなんなの?
460デフォルトの名無しさん
2019/08/29(木) 19:11:37.53ID:CAV+1+Xc 本物の数学者はパソコン苦手な人も結構いる
461デフォルトの名無しさん
2019/08/29(木) 19:43:16.59ID:mkieRkek そこは計算機科学者と読み替えてさしあげろ
462デフォルトの名無しさん
2019/08/29(木) 21:23:41.46ID:LSvsCn45 数学基礎論とか論理でしょ
記号遊びに興じてる人々
記号遊びに興じてる人々
463デフォルトの名無しさん
2019/08/30(金) 00:01:54.88ID:+2ynYkfN うちの大学の数学科の計算機系(論理とか統計とか確率とか)の教授はhaskellやってるらしい
あと数学科でやるプログラミングの授業はhaskellらしい
あと数学科でやるプログラミングの授業はhaskellらしい
464デフォルトの名無しさん
2019/08/30(金) 00:34:37.35ID:CazA1DNP おもちゃとは記号だったのか
記号などなくても実物だけがあればいいという
いわば実物指向
記号などなくても実物だけがあればいいという
いわば実物指向
465デフォルトの名無しさん
2019/08/31(土) 23:29:39.55ID:DBlAufLH GHC8.8.1リリースされたね。ナガカッタ
stackで使えるようになるのはいつ頃か
stackで使えるようになるのはいつ頃か
466デフォルトの名無しさん
2019/09/01(日) 00:15:49.52ID:3Spoi/4/467デフォルトの名無しさん
2019/09/11(水) 19:32:14.82 ああ!型システム入門─プログラミング言語と型の理論─が埃被ってる!
何年眠っていたんだ!
何年眠っていたんだ!
468デフォルトの名無しさん
2019/09/15(日) 12:27:59.45ID:vZVyiJhM 日系メーカで残業続きの日々です。C++を使っています。
Haskell覚えたらスマートな職場に転職するチャンスありますか?
Haskell覚えたらスマートな職場に転職するチャンスありますか?
469デフォルトの名無しさん
2019/09/15(日) 13:02:40.03 Javaでないだけマシでしょう
欲張っては全てを失います
胸を張ってC++コードを書き続けましょう
欲張っては全てを失います
胸を張ってC++コードを書き続けましょう
470デフォルトの名無しさん
2019/09/15(日) 13:26:30.70ID:vZVyiJhM でも所詮日系メーカでプログラミングの向上心持ってるやつなんて上司含めてほとんどおらん
そういう中で品質いいコード書く努力が虚しいんや
そういう中で品質いいコード書く努力が虚しいんや
471デフォルトの名無しさん
2019/09/15(日) 14:38:10.94ID:CYqvBFjr 転職を強く推奨します
472デフォルトの名無しさん
2019/09/15(日) 14:45:40.26ID:x41usVyI まあたとえ誰も評価してくれなくとも
品質のいいコード書いておけばあとでデバッグやリファクタするときに自分が楽よ
Haskell覚えても転職に良いかはわかりませんが
C++の品質は多分上がる
品質のいいコード書いておけばあとでデバッグやリファクタするときに自分が楽よ
Haskell覚えても転職に良いかはわかりませんが
C++の品質は多分上がる
473デフォルトの名無しさん
2019/09/15(日) 19:41:31.15 Haskellは一体いつになったら速くなるんだ
現状Javaにすら勝ててないじゃないか
関数型お得意の『最適化の余地』を永遠に残したままフィニッシュか!?
現状Javaにすら勝ててないじゃないか
関数型お得意の『最適化の余地』を永遠に残したままフィニッシュか!?
474デフォルトの名無しさん
2019/09/15(日) 20:15:28.04ID:q43bIxju こんな非効率な言語がPythonよりは速いって思われてる時点で最適化の賜物だろ
475デフォルトの名無しさん
2019/09/16(月) 08:42:30.15ID:N3Stq9G0 関数型言語の最適化の話はOcamlにまかせてある
476デフォルトの名無しさん
2019/09/16(月) 20:50:11.40ID:QCellAQp そういうことならclaspでいいわ
477デフォルトの名無しさん
2019/09/16(月) 21:37:02.25ID:7YJTuf9D >>475
call-by-valueのOCamlとcall-by-needのHaskellとでは実装法は大きく異なるから最適化技術も両者で大きく異なる
関数的プログラミング言語でもML系諸言語(OCamlやStandard MLなど)やSchemeなどのcall-by-valueセマンティックスに基づく言語の実装は
手続き的(あるいは命令的)プログラミング言語の実装にかなり近いし、例えば命令的言語では最も重要な操作である変数への破壊的代入や
例外処理を言語仕様に追加し組み込むことも特に困難ではない(実際、ML系諸言語やSchemeなどLisp系諸言語は変数への破壊的代入の
プリミティブを有しているし、Standard MLなどは例外処理も言語仕様に最初から組み込まれている)
だが変数への破壊的代入や例外処理といった言語機能をHaskellのようなcall-by-needセマンティックスの関数的プログラミング言語に
追加しようとすると途端にセマンティックスを整合的にすることが困難になる
call-by-valueのOCamlとcall-by-needのHaskellとでは実装法は大きく異なるから最適化技術も両者で大きく異なる
関数的プログラミング言語でもML系諸言語(OCamlやStandard MLなど)やSchemeなどのcall-by-valueセマンティックスに基づく言語の実装は
手続き的(あるいは命令的)プログラミング言語の実装にかなり近いし、例えば命令的言語では最も重要な操作である変数への破壊的代入や
例外処理を言語仕様に追加し組み込むことも特に困難ではない(実際、ML系諸言語やSchemeなどLisp系諸言語は変数への破壊的代入の
プリミティブを有しているし、Standard MLなどは例外処理も言語仕様に最初から組み込まれている)
だが変数への破壊的代入や例外処理といった言語機能をHaskellのようなcall-by-needセマンティックスの関数的プログラミング言語に
追加しようとすると途端にセマンティックスを整合的にすることが困難になる
478デフォルトの名無しさん
2019/09/18(水) 22:01:35.11ID:lvPVUcx3 既出ですかね
プログラミングHaskell第2版、いかがですか?
プログラミングHaskell第2版、いかがですか?
479デフォルトの名無しさん
2019/09/18(水) 22:33:30.71ID:EDnCRaxi >>478
買ったばかりでまだほとんど読めてないけど、教科書としてよさげ。
GHC前提になったし、古い記法は一掃されたし、分量も増えてる。
第I部はかなり平易な基礎と型クラスあたりまで。
第II部に対話系からモノイドまで持ってきて充実させてる。
ただ如何せん、出版社が弱すぎて、普通の書店になかなか並ばない。
ネット直販ならいいんだけどね。
買ったばかりでまだほとんど読めてないけど、教科書としてよさげ。
GHC前提になったし、古い記法は一掃されたし、分量も増えてる。
第I部はかなり平易な基礎と型クラスあたりまで。
第II部に対話系からモノイドまで持ってきて充実させてる。
ただ如何せん、出版社が弱すぎて、普通の書店になかなか並ばない。
ネット直販ならいいんだけどね。
480デフォルトの名無しさん
2019/09/18(水) 22:46:56.61ID:sk3yb4Af 東京だと
ジュンク堂や紀伊国屋でさくっと手に入ったけど
まあ普通じゃないな
ジュンク堂や紀伊国屋でさくっと手に入ったけど
まあ普通じゃないな
481デフォルトの名無しさん
2019/09/18(水) 23:07:44.70ID:lvPVUcx3482デフォルトの名無しさん
2019/09/19(木) 11:55:27.58 第一版持ってて尚第二版買うとかハスケルガチ勢かよ
483デフォルトの名無しさん
2019/09/19(木) 21:57:13.69ID:Vqj74yRo >>482
ページ数は1.5倍位になってるみたいだし、かなり増補されてたからさ
ページ数は1.5倍位になってるみたいだし、かなり増補されてたからさ
484デフォルトの名無しさん
2019/09/20(金) 00:33:53.77 入門はすっとばしてLensとかConduitとか流行ったライブラリの実践例集みたいな本が欲しい
クックブックっていうのかね
なぜ出版社は入門書ばかり刷りたがるのか
クックブックっていうのかね
なぜ出版社は入門書ばかり刷りたがるのか
485デフォルトの名無しさん
2019/09/20(金) 00:45:38.23 入門はいいから初心者を鍛えてくれよ
将棋ウォーズでいうと3〜1級を初段〜三段に上げてくれる本がないよなぁ
将棋ウォーズでいうと3〜1級を初段〜三段に上げてくれる本がないよなぁ
486デフォルトの名無しさん
2019/09/20(金) 06:27:12.22ID:fTWLEX/y 並列並行haskellは面白かったな
英語苦手なのに無料公開されてた英語版全部読んじゃった
英語苦手なのに無料公開されてた英語版全部読んじゃった
487デフォルトの名無しさん
2019/09/26(木) 05:11:57.59ID:dzbET3Zy 結局のところ、rigid type variable ってどんな type variable のことなの?
488デフォルトの名無しさん
2019/09/26(木) 14:20:58.03ID:iXd9J4xZ skolem type variable のことだよ^^
489デフォルトの名無しさん
2019/09/26(木) 15:49:58.48ID:fwWuWasU >>484
取り敢えず使ってみよう勉強してみようという人間は多いので入門書にはそれなりの部数の需要があるが
実際に入門レベルをクリアしてその先に進む人数は一気に減少するから、その先の技術レベルの内容を扱う書籍は
よほどメジャーな言語でない限り商業ベースには乗らない
それも世界中がマーケットになる英語ならまだしも日本国内しかマーケットのない日本語の書籍となれば尚更ね
取り敢えず使ってみよう勉強してみようという人間は多いので入門書にはそれなりの部数の需要があるが
実際に入門レベルをクリアしてその先に進む人数は一気に減少するから、その先の技術レベルの内容を扱う書籍は
よほどメジャーな言語でない限り商業ベースには乗らない
それも世界中がマーケットになる英語ならまだしも日本国内しかマーケットのない日本語の書籍となれば尚更ね
490デフォルトの名無しさん
2019/09/26(木) 18:11:59.76ID:6j3rqQh6 入門書はどうでもいいことばかり書いてるから買わないことが多い
491デフォルトの名無しさん
2019/09/26(木) 19:57:03.06ID:dzbET3Zy >>488
じゃあ、rigid = skolem なのか?
ghc のコンパイルエラーメッセージに
rigid で skolem な型変数がどうとか言う文言があるから、
両者は別物のような気がするのだが。
で、skolem とは何なのだ?
じゃあ、rigid = skolem なのか?
ghc のコンパイルエラーメッセージに
rigid で skolem な型変数がどうとか言う文言があるから、
両者は別物のような気がするのだが。
で、skolem とは何なのだ?
492デフォルトの名無しさん
2019/09/26(木) 20:24:22.90ID:iXd9J4xZ >>491
rigid=skolemだよ
昔skolemとだけ表示されてたんだが、それじゃ分かりにくいというissueが立ってrigidが併記されるようになったらしい
俺もあれがなんなのか知りたい
俺としてはexists a. aみたいな型のことじゃないかと思ってるんだけどよくわからん
わかったら教えて
rigid=skolemだよ
昔skolemとだけ表示されてたんだが、それじゃ分かりにくいというissueが立ってrigidが併記されるようになったらしい
俺もあれがなんなのか知りたい
俺としてはexists a. aみたいな型のことじゃないかと思ってるんだけどよくわからん
わかったら教えて
493デフォルトの名無しさん
2019/09/27(金) 03:35:50.99ID:cVD6n+mn494デフォルトの名無しさん
2019/09/27(金) 22:06:15.87495デフォルトの名無しさん
2019/10/05(土) 11:54:01.11ID:7g/R2uPo 型aがMonadならApplicativeでもあるわけですが、
実用的にreturnとpureが異なるというのは有り得るのでしょうか?
実用的にreturnとpureが異なるというのは有り得るのでしょうか?
496デフォルトの名無しさん
2019/10/05(土) 14:04:06.04ID:bu+J3s1i >>495
Monad版とApplicative版とで効率化のため内部実装が異なるということは
もしかしたらあるかもしれない(実例は知らないけど)
Monadが自然に誘導するApplicativeなら振る舞いが異なるということはないはず
(標準的なリストモナドに対するZipListみたいな話を気にしている)
Monad版とApplicative版とで効率化のため内部実装が異なるということは
もしかしたらあるかもしれない(実例は知らないけど)
Monadが自然に誘導するApplicativeなら振る舞いが異なるということはないはず
(標準的なリストモナドに対するZipListみたいな話を気にしている)
497デフォルトの名無しさん
2019/10/07(月) 22:45:01.48ID:E8UVlk39498デフォルトの名無しさん
2019/10/08(火) 09:34:32.63ID:pe44plco モナドでアクションを繋げるってのは何がうれしいの?
参照透過のために仕方なくやってるだけ?
参照透過のために仕方なくやってるだけ?
499デフォルトの名無しさん
2019/10/08(火) 10:35:16.66ID:pF665SWr みんなが使う言語の約束事が変更されるまで何年も待つか
一個人が関数を2つ定義するだけで解決するかの違い
一個人が関数を2つ定義するだけで解決するかの違い
500デフォルトの名無しさん
2019/10/08(火) 16:25:57.34ID:ELFSZFvj 同じことの繰り返しを書かなくて済むのが大きいかな。
例えばEitherとIOの組み合わせのモナドでハードとの通信を
書いた時,割り込みプロセスを考えなくてもLeftで返せば
後続コードを飛ばしてエラーを返せるし,コード量が減った
だけ,ミスの発生率も低くなる。
これがモナドなしだとハードとの通信をするたびにエラー
確認コードをいれて例外処理やなんやかやをしないといけ
なくなる。
例えばEitherとIOの組み合わせのモナドでハードとの通信を
書いた時,割り込みプロセスを考えなくてもLeftで返せば
後続コードを飛ばしてエラーを返せるし,コード量が減った
だけ,ミスの発生率も低くなる。
これがモナドなしだとハードとの通信をするたびにエラー
確認コードをいれて例外処理やなんやかやをしないといけ
なくなる。
501デフォルトの名無しさん
2019/10/08(火) 17:47:38.95ID:pF665SWr EitherにもIOにもなるような万能のinstanceにロックイン?してよければclass不要
その気になれば任意の言語で応用可能ということ
その気になれば任意の言語で応用可能ということ
502デフォルトの名無しさん
2019/10/08(火) 18:00:48.37ID:pe44plco 結果的にHaskellの生産性は高いの?
ライブラリや学習情報の充実度を無視するとして
ライブラリや学習情報の充実度を無視するとして
503デフォルトの名無しさん
2019/10/08(火) 18:17:24.58ID:ELFSZFvj 少なくともタイプする文字数はめっちゃ減る
504デフォルトの名無しさん
2019/10/08(火) 18:27:09.94ID:gcgHRAAu もう生産性高いとは誰も言わなくなったね
505デフォルトの名無しさん
2019/10/08(火) 19:31:45.70ID:pe44plco 文字数が減るのは高階関数のおかげ?
参照透過性によるバグの低減やコーディングのしやすさはどの程度あるんだろうか?
参照透過性によるバグの低減やコーディングのしやすさはどの程度あるんだろうか?
506デフォルトの名無しさん
2019/10/08(火) 19:37:25.99ID:4CpPhkv4 巨大になっても線型に複雑度が増加するから他より有利とは言われるが
そこまで大きいの触ったことない
そこまで大きいの触ったことない
507デフォルトの名無しさん
2019/10/08(火) 20:09:52.92ID:pF665SWr PythonでもHaskellでも、タプルを使うなとか誰も言わなくなれば文字数は減る
508デフォルトの名無しさん
2019/10/08(火) 20:44:34.15ID:kGAGzuS0 文字数減ればいいってんならシェルスクリプトかperlが最適だな。
509デフォルトの名無しさん
2019/10/08(火) 21:24:42.66ID:ELFSZFvj >> 505
モナドや高階関数のおかげもあるけど文字数が減るのは
つきつめると言語全体に貫かれた表現の簡潔さ志向の仕様によるかな
参照透過性のおかげで副作用を気にせず共通部分を
気軽に関数としてまとめられるとか
ブロック前後の括弧がいらないとか
再利用や多様な型に適合するように引数や関数の名前を短めにするとか
局所変数がないとか
簡単に二引数の演算子を記号を使って定義できるので
関数名を何度も書かなくて済むとか
いろいろ
書く部分が少なくなるとそれだけケアレスミスの入り込む余地は少なくなるね。
それとS/N比がよくなってロジックを追いやすい。
モナドや高階関数のおかげもあるけど文字数が減るのは
つきつめると言語全体に貫かれた表現の簡潔さ志向の仕様によるかな
参照透過性のおかげで副作用を気にせず共通部分を
気軽に関数としてまとめられるとか
ブロック前後の括弧がいらないとか
再利用や多様な型に適合するように引数や関数の名前を短めにするとか
局所変数がないとか
簡単に二引数の演算子を記号を使って定義できるので
関数名を何度も書かなくて済むとか
いろいろ
書く部分が少なくなるとそれだけケアレスミスの入り込む余地は少なくなるね。
それとS/N比がよくなってロジックを追いやすい。
510デフォルトの名無しさん
2019/10/08(火) 21:32:14.39ID:nLwShu/0 何冊か本を読んだけど、Haskell の気持ちがなかなか分からん…
511デフォルトの名無しさん
2019/10/08(火) 21:39:47.76ID:ELFSZFvj 何か書いてみた?
自分はRWHとかPCHとか読みながらオレオレプロジェクトを仕立てて
書き進めていったらある日を堺に急にこういうことかと理解が進んだ。
自分はRWHとかPCHとか読みながらオレオレプロジェクトを仕立てて
書き進めていったらある日を堺に急にこういうことかと理解が進んだ。
512デフォルトの名無しさん
2019/10/08(火) 22:21:53.53ID:nLwShu/0 やはりどんどん書かないとダメですよね…
おかげさまで、本業とする言語でのコーディングには有意義なフィードバックができてはいるのですが
そもそも GHC が吐き出すエラーメッセージがなぁ〜
おかげさまで、本業とする言語でのコーディングには有意義なフィードバックができてはいるのですが
そもそも GHC が吐き出すエラーメッセージがなぁ〜
513デフォルトの名無しさん
2019/10/08(火) 23:04:55.55ID:ELFSZFvj 自分もエラーが何を意味しているのか最初はわからなかった。
ただほとんどのエラーは型の不一致由来。
だから何行目のどこでエラーが出ているかだけわかればあとは
型を順番に調べていって解決できるようになった。
スペルを間違えたり似たような目的で使う別の型と勘違いしていたり
とかそれなりの理由でエラーが出ているはず。後者は代数データ型を
適当にその場で作ったりしてた頃によくやってた。
ただほとんどのエラーは型の不一致由来。
だから何行目のどこでエラーが出ているかだけわかればあとは
型を順番に調べていって解決できるようになった。
スペルを間違えたり似たような目的で使う別の型と勘違いしていたり
とかそれなりの理由でエラーが出ているはず。後者は代数データ型を
適当にその場で作ったりしてた頃によくやってた。
514デフォルトの名無しさん
2019/10/08(火) 23:09:06.98ID:DA/zVK7z LispとHaskellの間には謎の暗黒時代があるから
結果がすべての人にはそれがわからんのです
結果がすべての人にはそれがわからんのです
515デフォルトの名無しさん
2019/10/08(火) 23:13:57.88ID:ELFSZFvj その暗黒時代にSMLの本を店頭で見かけて気になった記憶がある。
結局買わなくていきなり普通のHaskellまでとんだ。
ソースから実行コードにどんなふうにおとしていってるのか最近
気になってきたのでそのうち古本でMLの本でも手に入れるか
GHCのが吐くコードを追っかけてみたい。
結局買わなくていきなり普通のHaskellまでとんだ。
ソースから実行コードにどんなふうにおとしていってるのか最近
気になってきたのでそのうち古本でMLの本でも手に入れるか
GHCのが吐くコードを追っかけてみたい。
516デフォルトの名無しさん
2019/10/08(火) 23:33:07.01ID:nLwShu/0517デフォルトの名無しさん
2019/10/08(火) 23:42:31.20ID:ELFSZFvj どういたしまして!
基本文法は簡単だから文法エラーはすぐにほとんど出なくなります。
そこまでいったら初級編終了。
基本文法は簡単だから文法エラーはすぐにほとんど出なくなります。
そこまでいったら初級編終了。
518デフォルトの名無しさん
2019/10/09(水) 00:44:23.02ID:UKqTo/lR 圏論の本を読もうと思ったら数学地獄にはまる
519デフォルトの名無しさん
2019/10/09(水) 22:12:42.71ID:wrHKsVK1 VIMで関数名にカーソル合わせると自動で型シグネチャ動的推論して表示してくれる機能ありませんか?
520デフォルトの名無しさん
2019/10/10(木) 00:08:02.64ID:TcPJYaG5 ダイクストラのアルゴリズム
優先度付きキューの手作りから始めて一週間かかってやっと完成した
あたまわーるわるわーるーわる〜♪
sm32181836
脳裏に流れてる
優先度付きキューの手作りから始めて一週間かかってやっと完成した
あたまわーるわるわーるーわる〜♪
sm32181836
脳裏に流れてる
521デフォルトの名無しさん
2019/10/10(木) 09:37:00.35ID:yMym0WfO 善意的に解釈してアルゴリズムの方の動画だと思ったが
案の定あたまわるい方の動画だった
案の定あたまわるい方の動画だった
522デフォルトの名無しさん
2019/10/10(木) 19:26:23.87ID:yuHTWGdR practical haskell second edition読み終わった
523デフォルトの名無しさん
2019/10/11(金) 18:25:28.60ID:NJkU4MQ7 Haskell Wiki
!haskellwiki
Hayoo
!hayoo
Hoogle
!h
Hackage
!hkg
Hoogle at Stackage
!stackage
https://duckduckgo.com/bang?c=Tech&sc=Languages+(Haskell)
!haskellwiki
Hayoo
!hayoo
Hoogle
!h
Hackage
!hkg
Hoogle at Stackage
!stackage
https://duckduckgo.com/bang?c=Tech&sc=Languages+(Haskell)
524デフォルトの名無しさん
2019/10/11(金) 20:15:13.77ID:NJkU4MQ7525デフォルトの名無しさん
2019/10/12(土) 00:29:02.70ID:mt88ZJv+ >>510
mylist 3 = [[1,2,3],[4,5,6],[7,8,9]]
みたいなリストを作る関数をHaskellで作ってみれば関数脳に目覚める。
割とマジで。
Haskell入門以前って電子書籍で書いたが、自力で目覚めるなら買わなくても良い。
(Haskell入門書読んでも宣言的とは?関数脳とは?がピンと来なかった経験から書いた)
mylist 3 = [[1,2,3],[4,5,6],[7,8,9]]
みたいなリストを作る関数をHaskellで作ってみれば関数脳に目覚める。
割とマジで。
Haskell入門以前って電子書籍で書いたが、自力で目覚めるなら買わなくても良い。
(Haskell入門書読んでも宣言的とは?関数脳とは?がピンと来なかった経験から書いた)
526デフォルトの名無しさん
2019/10/12(土) 00:42:17.63ID:67yl+yJ3 パッと思いついたのはこんな感じ?
添削してくれたら嬉しい
HaskellでなくPureScriptだが
mylist :: Int -> Array (Array Int)
mylist n = do
i <- 1..n
pure [i*3 + 1, i*3 + 2, i*3 + 3]
添削してくれたら嬉しい
HaskellでなくPureScriptだが
mylist :: Int -> Array (Array Int)
mylist n = do
i <- 1..n
pure [i*3 + 1, i*3 + 2, i*3 + 3]
527デフォルトの名無しさん
2019/10/12(土) 01:48:37.28ID:gzpbrH7N528デフォルトの名無しさん
2019/10/12(土) 02:00:10.51ID:iYZ0+U57 >>527
うーん・・・。
貴方はまだ手続き脳ですね。
(その手順でも関数脳を実感する人は実感するのでしょうが)
罰としてHaskell入門以前をご購入下さい。
IOの純粋は、「プログラマーのための圏論」と言うPDFがネットにあるのでググって読んでみると良いです。
うーん・・・。
貴方はまだ手続き脳ですね。
(その手順でも関数脳を実感する人は実感するのでしょうが)
罰としてHaskell入門以前をご購入下さい。
IOの純粋は、「プログラマーのための圏論」と言うPDFがネットにあるのでググって読んでみると良いです。
529デフォルトの名無しさん
2019/10/12(土) 02:20:05.14ID:CTFV4tiX (n: number) => Array.from(Array(n).keys()).map(
i => Array.from(Array(n).keys()).map(
j => n * i + j + 1
)
)
i => Array.from(Array(n).keys()).map(
j => n * i + j + 1
)
)
530デフォルトの名無しさん
2019/10/12(土) 02:25:29.50ID:gzpbrH7N531デフォルトの名無しさん
2019/10/12(土) 02:33:17.76ID:gzpbrH7N532デフォルトの名無しさん
2019/10/12(土) 08:28:10.44ID:oBt8QHPo >>530
ちょっとchopと[1..]から離れましょう。
そして、[1..n]に何をすれば次のリストを得られるか考えましょう。
プレリュードの(入門以前と書かれた通り)基本関数の組み合わせだけで書けます。
IOと言うより入力ですが、関数の引数か、外部からの入力かだけで中身の処理は普通の関数と同じと捉えましょう。
そうするとreadLine関数が部分適用で見た目の引数の減った普通の関数に見えて来ませんか?
圏論で謳っているのは、どこから来たかが違っていても同じ事をするなら、同じ関数と見なそう。
そう言う、ある着目点以外の差異を無いものとするという事です。
ちょっとchopと[1..]から離れましょう。
そして、[1..n]に何をすれば次のリストを得られるか考えましょう。
プレリュードの(入門以前と書かれた通り)基本関数の組み合わせだけで書けます。
IOと言うより入力ですが、関数の引数か、外部からの入力かだけで中身の処理は普通の関数と同じと捉えましょう。
そうするとreadLine関数が部分適用で見た目の引数の減った普通の関数に見えて来ませんか?
圏論で謳っているのは、どこから来たかが違っていても同じ事をするなら、同じ関数と見なそう。
そう言う、ある着目点以外の差異を無いものとするという事です。
533デフォルトの名無しさん
2019/10/12(土) 11:27:51.29ID:/Y14moqf >>510 です
mylist n = take n $ f [[1..n]]
where
f [ns] = ns : f [g ns]
g ns = map (+3) ns
としたところで、要素に f を繰り返し適用して無限リストを作る関数があることを思い出し、思い出せずにカンニングして iterate を発見
mylist n = take n $ iterate f [1..n]
where
f ns = map (+n) ns
map (+n) 辺りがどうも…
mylist n = take n $ f [[1..n]]
where
f [ns] = ns : f [g ns]
g ns = map (+3) ns
としたところで、要素に f を繰り返し適用して無限リストを作る関数があることを思い出し、思い出せずにカンニングして iterate を発見
mylist n = take n $ iterate f [1..n]
where
f ns = map (+n) ns
map (+n) 辺りがどうも…
534デフォルトの名無しさん
2019/10/12(土) 11:28:38.29ID:/Y14moqf インデントの空白が消えるのか
535デフォルトの名無しさん
2019/10/12(土) 11:30:28.30ID:/Y14moqf 間違えた、先の関数の (+3) は (+n) でした
536デフォルトの名無しさん
2019/10/12(土) 14:40:27.19ID:IkOZzxfL 文字数が減る主義を粛清した結果がこの関数脳内革命なのか?
文字数が減るでよかったのに
文字数が減るでよかったのに
537デフォルトの名無しさん
2019/10/12(土) 19:37:37.13ID:Qwy8j330538デフォルトの名無しさん
2019/10/13(日) 08:24:39.79ID:joWtBDzr 競プロでもあるまいしアルゴリズムを非直観的なものに変形させる必要がどこにある?
そんなに漸化式が好きなら iterate (\xs -> [last xs+1,last xs+2..last xs+n]) でもやってろ
そんなに漸化式が好きなら iterate (\xs -> [last xs+1,last xs+2..last xs+n]) でもやってろ
539デフォルトの名無しさん
2019/10/13(日) 12:28:55.45ID:vnXjj3sR プログラミング運算やると計算量がオーダーレベルで変わるよみたいな話もあるから
非直感的な宣言をすることがいつも無駄とは限らないだろう
今スレで話題になってる例が教育的によいかどうかはわからんが
非直感的な宣言をすることがいつも無駄とは限らないだろう
今スレで話題になってる例が教育的によいかどうかはわからんが
540デフォルトの名無しさん
2019/10/13(日) 12:35:18.14ID:rWBm0O/W 効率的な計算量になるようにコンピュータが計算して最適化してくれたらいいのに
541デフォルトの名無しさん
2019/10/13(日) 14:20:50.34ID:8ABqNncq なにしてんの
mylist n = [ [(m - 1) * n + 1 .. m * n] | m <- [1 .. n] ]
とかじゃだめなの
mylist n = [ [(m - 1) * n + 1 .. m * n] | m <- [1 .. n] ]
とかじゃだめなの
542デフォルトの名無しさん
2019/10/13(日) 14:25:29.07ID:8ABqNncq ただでさえO(n^2)なのにiterateとかやったらO(n^3)じゃん
543デフォルトの名無しさん
2019/10/13(日) 15:19:23.66ID:joWtBDzr mylist n = take n $ chunksOf n [1..]
がダメらしいからそれもダメなんじゃない?知らないけど
がダメらしいからそれもダメなんじゃない?知らないけど
544デフォルトの名無しさん
2019/10/14(月) 07:17:52.00ID:Foao1gEl545デフォルトの名無しさん
2019/10/14(月) 13:10:48.92ID:dTytwEqk n個の品物が入るナップサックがn個あって
1,2,3...と番号の書かれた品物を順番にいれていく
等々いくらでも行動的比喩が可能な問題に対して数式的に考えることが自然ねぇ・・・
まあ人間の思考傾向を議論するつもりはないけど
少し考えればシンプルに解ける問題は少し考えろと主張をしたいんだとしても
我々手続き的ゾンビにとってmylistの例が「直観性」を犠牲にするほどシンプルだとは思えないけどね
1,2,3...と番号の書かれた品物を順番にいれていく
等々いくらでも行動的比喩が可能な問題に対して数式的に考えることが自然ねぇ・・・
まあ人間の思考傾向を議論するつもりはないけど
少し考えればシンプルに解ける問題は少し考えろと主張をしたいんだとしても
我々手続き的ゾンビにとってmylistの例が「直観性」を犠牲にするほどシンプルだとは思えないけどね
546デフォルトの名無しさん
2019/10/15(火) 00:51:42.29ID:ojqSK/Hb チューリング完全なもの同士は等価である
Haskellと他の言語が等価であることを直感的に表現しているのがモナドだ
この文脈ではモナドが直感的だと思わない奴の直感はあてにならない
プログラミング未経験者ってのは文脈無視するのを正当化するための道具にされてるだけだろう
Haskellと他の言語が等価であることを直感的に表現しているのがモナドだ
この文脈ではモナドが直感的だと思わない奴の直感はあてにならない
プログラミング未経験者ってのは文脈無視するのを正当化するための道具にされてるだけだろう
547デフォルトの名無しさん
2019/10/15(火) 08:43:19.81ID:NwqFzBSd 隠そうとして隠し切れなかったのがモナド
548デフォルトの名無しさん
2019/10/16(水) 01:24:19.49ID:N7kCHTAD モナドっていうネーミングも謎
549デフォルトの名無しさん
2019/10/16(水) 01:58:12.16ID:1kZaANyW ニョモレとかムニャンプの方が良かった?
550デフォルトの名無しさん
2019/10/16(水) 02:26:39.80ID:lWzU93N+ モノ モノイド
551デフォルトの名無しさん
2019/10/16(水) 22:21:13.29ID:N7kCHTAD モナド=単一子=世界の究極の根本要素
でもHaskellのモナドは外部とのやり取りを隠蔽してる脇役みたいなものでしょ
でもHaskellのモナドは外部とのやり取りを隠蔽してる脇役みたいなものでしょ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★9 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 ★2 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 【高市核兵器】 小泉コメ防衛大臣「民主党政権 岡田外務大臣の “非核三原則” に関する国会答弁を引き継いでいる」 政策堅持を明言 [485983549]
- 海産物は雄の生殖器の方が美味しいの人体のバグだろ
- 【高市賃上げ】 自民党&維新の会「国会議員の給与を 月5万円アップさせる!」 今国会で歳費法改正。 月129万円→月134万円に [485983549]
- Apple Arcade凄い。ゲーム遊び放題。言うなればゲームの食べ放題。サブスク
- 犯罪者たち「刑事罰受けて罪は償った!被害者への賠償金?もう反省済みだから一円も払わねーよばーかwww」 [177178129]
- ㊗157円 [194819832]
