関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/test/read.cgi/tech/1428597032/
関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
2017/01/15(日) 23:43:54.28ID:Vh4eztBk
847デフォルトの名無しさん
2017/08/13(日) 17:47:54.48ID:fRo9GRp1 関数プログラミングって文字列型って上手くあつかえるの?
オブジェクト指向の最大の欠点って「文字列を上手く扱えない」ところに
あると思うんだよね。
オブジェクト指向の最大の欠点って「文字列を上手く扱えない」ところに
あると思うんだよね。
848デフォルトの名無しさん
2017/08/13(日) 17:51:31.77ID:fRo9GRp1849デフォルトの名無しさん
2017/08/13(日) 19:22:11.54ID:zbgzOget >>842
違うよ。
ある関数の定義に使う補助的な関数の定義は、独立してトップレベルに置く事もできるし、
let や where を使って関数定義の中に置く事もできるよ、って言ってる。
関数内部で定義されていた関数を外に出して独立させることを lambda lifting と言って、
逆に外にあった関数を別の関数の内部で定義することを lambda dropping と言うんだ。
Haskell を使うだけならこんな理解で十分なんだけど、
もともとは関数型言語の処理系の研究で出てきた用語なんで、
その辺りまで深く学びたいのなら、やつぱり英語を読めないと難しいかも。
ちなみに、そのリンク先の [3 Lambda Lifting] と比べれば、
その直後の [4 Problems with where] の方が衝撃的な内容だね。
Haskell を実用的に使っている人にとってはこっちの方が大事な内容だよ。
違うよ。
ある関数の定義に使う補助的な関数の定義は、独立してトップレベルに置く事もできるし、
let や where を使って関数定義の中に置く事もできるよ、って言ってる。
関数内部で定義されていた関数を外に出して独立させることを lambda lifting と言って、
逆に外にあった関数を別の関数の内部で定義することを lambda dropping と言うんだ。
Haskell を使うだけならこんな理解で十分なんだけど、
もともとは関数型言語の処理系の研究で出てきた用語なんで、
その辺りまで深く学びたいのなら、やつぱり英語を読めないと難しいかも。
ちなみに、そのリンク先の [3 Lambda Lifting] と比べれば、
その直後の [4 Problems with where] の方が衝撃的な内容だね。
Haskell を実用的に使っている人にとってはこっちの方が大事な内容だよ。
850デフォルトの名無しさん
2017/08/13(日) 20:15:07.01ID:DrQ+cSjE Haskellという土台の上に、オレオレ言語を構築する。それがモナドだ
Haskell上で動作する『ぼくのかんがえたさいきょうのげんご』
DSLプラットフォーム
Haskell上で動作する『ぼくのかんがえたさいきょうのげんご』
DSLプラットフォーム
851デフォルトの名無しさん
2017/08/13(日) 20:19:51.10ID:qvBBF+tW >>849
衝撃だけど実際どれくらいパフォーマンス上のインパクトがあるの?
衝撃だけど実際どれくらいパフォーマンス上のインパクトがあるの?
852デフォルトの名無しさん
2017/08/13(日) 21:59:10.19ID:zbgzOget >>851
試せばすぐに分かるが、あのフィボナッチ数のサンプルでは全く大した事なかったりする。
確かに後者の方が遅い代わりにメモリ効率いいけど、ほとんど差が出ない事に驚くほどだよ。
差がはっきり出る例を作る方が難しいと思う。
衝撃なのはパフォーマンスの差じゃなくて、単に引数を省略しただけで
コンパイルの結果に差が出ることがある、という事実。
GHCにはこういうことがあると、頭の片隅にでも入れておいた方がいいね。
他にも「単に***を変えただけで何で意図したように動かないの?」
ってなるようなコンパイラの仕様があるだろうから、
それに出くわした時に、もしかしてと気づければ無駄に悩む時間が省ける。
試せばすぐに分かるが、あのフィボナッチ数のサンプルでは全く大した事なかったりする。
確かに後者の方が遅い代わりにメモリ効率いいけど、ほとんど差が出ない事に驚くほどだよ。
差がはっきり出る例を作る方が難しいと思う。
衝撃なのはパフォーマンスの差じゃなくて、単に引数を省略しただけで
コンパイルの結果に差が出ることがある、という事実。
GHCにはこういうことがあると、頭の片隅にでも入れておいた方がいいね。
他にも「単に***を変えただけで何で意図したように動かないの?」
ってなるようなコンパイラの仕様があるだろうから、
それに出くわした時に、もしかしてと気づければ無駄に悩む時間が省ける。
853デフォルトの名無しさん
2017/08/13(日) 22:05:27.98ID:IBmKuvX6 STモナドとSTArrayの理解を深めるのに向いてる書籍やサイトなどがあれば英語でもいいので教えていただきたいです
競技プログラミングで少し行き詰まってて
競技プログラミングで少し行き詰まってて
854デフォルトの名無しさん
2017/08/13(日) 22:12:47.72ID:qvBBF+tW855デフォルトの名無しさん
2017/08/13(日) 22:35:47.24ID:3dVRXwBQ >>851
fib1 40は1秒かからなかったけど
fib2 40だと37秒かかった
fib1 = (map fib1' [0 ..] !!)
where
fib1' 0 = 0
fib1' 1 = 1
fib1' n = fib1 (n - 1) + fib1 (n - 2)
fib2 x = map fib2' [0 ..] !! x
where
fib2' 0 = 0
fib2' 1 = 1
fib2' n = fib2 (n - 1) + fib2 (n - 2)
fib1 40は1秒かからなかったけど
fib2 40だと37秒かかった
fib1 = (map fib1' [0 ..] !!)
where
fib1' 0 = 0
fib1' 1 = 1
fib1' n = fib1 (n - 1) + fib1 (n - 2)
fib2 x = map fib2' [0 ..] !! x
where
fib2' 0 = 0
fib2' 1 = 1
fib2' n = fib2 (n - 1) + fib2 (n - 2)
856デフォルトの名無しさん
2017/08/13(日) 22:42:29.03ID:3dVRXwBQ857デフォルトの名無しさん
2017/08/13(日) 22:56:30.39ID:Pg7jRQiA >>849
教えてくれてありがとう
教えてくれてありがとう
858デフォルトの名無しさん
2017/08/13(日) 23:03:01.35ID:Kt+T0SXe 毎回 let 束縛し直すから遅い、って凄えなこれ
手動 eta-reduction 必須、みたいなんか
手動 eta-reduction 必須、みたいなんか
859デフォルトの名無しさん
2017/08/13(日) 23:18:59.79ID:AxVfgjdD >>855
fib3 40、fib4 40は fib2 40と同じくらい
fib3 =
let fib3' 0 = 0
fib3' 1 = 1
fib3' n = fib3 (n - 1) + fib3 (n - 2)
in (map fib3' [0 ..] !!)
fib4 x =
let fib4' 0 = 0
fib4' 1 = 1
fib4' n = fib4 (n - 1) + fib4 (n - 2)
in map fib4' [0 ..] !! x
fib3 40、fib4 40は fib2 40と同じくらい
fib3 =
let fib3' 0 = 0
fib3' 1 = 1
fib3' n = fib3 (n - 1) + fib3 (n - 2)
in (map fib3' [0 ..] !!)
fib4 x =
let fib4' 0 = 0
fib4' 1 = 1
fib4' n = fib4 (n - 1) + fib4 (n - 2)
in map fib4' [0 ..] !! x
860デフォルトの名無しさん
2017/08/13(日) 23:39:51.65ID:DrQ+cSjE >>842
なにこれこわい
なにこれこわい
861デフォルトの名無しさん
2017/08/14(月) 00:09:46.90ID:CgEdc2Wx862デフォルトの名無しさん
2017/08/14(月) 00:40:48.93ID:qlMtZwAF >>840
traceはメモ化には使えないってことですか
>>851-852
試してみた
使用メモリがだいぶ違う、低スペックPCなので20でも実行時間に差が出た
http://i.imgur.com/lJUUCAs.png
http://i.imgur.com/zXHSwNH.png
traceはメモ化には使えないってことですか
>>851-852
試してみた
使用メモリがだいぶ違う、低スペックPCなので20でも実行時間に差が出た
http://i.imgur.com/lJUUCAs.png
http://i.imgur.com/zXHSwNH.png
863デフォルトの名無しさん
2017/08/14(月) 01:18:11.31ID:BK9BhUbr モナドを取り入れると明らかに型が違うのが分かる
Identityモナドでもいいんだが
問題なのは引数の省略ではなくコンストラクタの省略ではないか
fib1 = return (map fib [0 ..] !!)
fib2 x = return (map fib [0 ..] !! x)
Identityモナドでもいいんだが
問題なのは引数の省略ではなくコンストラクタの省略ではないか
fib1 = return (map fib [0 ..] !!)
fib2 x = return (map fib [0 ..] !! x)
864デフォルトの名無しさん
2017/08/14(月) 01:40:22.76ID:tyQzDLaM 呼び出し毎の関数束縛が遅いってことかね
値の束縛やトップレベルの関数呼び出しだとどの程度だろう
値の束縛やトップレベルの関数呼び出しだとどの程度だろう
865デフォルトの名無しさん
2017/08/14(月) 03:27:39.46ID:YjoaiCYq >>861
たしかに最適化で差異がなくなった
最適化なし -O0
fib1 (sec: 0.00 mem: 3456) https://paiza.io/projects/0LYONUr9fsU2GCX0AE8A_g
fib2 (sec: 0.87 mem: 4608) https://paiza.io/projects/iNAIEVZM5IY5uLxzJ_QJ7w
最適化あり -O1
fib1 (sec: 0.00 mem: 3280) https://paiza.io/projects/XCnm40B0C1HcbuAIBGyUFw
fib2 (sec: 0.00 mem: 3312) https://paiza.io/projects/Et1N4r-vdxXjrid_7hn6PA
計測手段 /usr/bin/time -f "sec: %e\tmem: %M"
たしかに最適化で差異がなくなった
最適化なし -O0
fib1 (sec: 0.00 mem: 3456) https://paiza.io/projects/0LYONUr9fsU2GCX0AE8A_g
fib2 (sec: 0.87 mem: 4608) https://paiza.io/projects/iNAIEVZM5IY5uLxzJ_QJ7w
最適化あり -O1
fib1 (sec: 0.00 mem: 3280) https://paiza.io/projects/XCnm40B0C1HcbuAIBGyUFw
fib2 (sec: 0.00 mem: 3312) https://paiza.io/projects/Et1N4r-vdxXjrid_7hn6PA
計測手段 /usr/bin/time -f "sec: %e\tmem: %M"
866デフォルトの名無しさん
2017/08/14(月) 05:10:48.34ID:8PjQyPOp 最適化かくにん!
よかった。
よかった。
867デフォルトの名無しさん
2017/08/14(月) 12:00:31.24ID:vFMuIdhl やはり、最適化かかってんのね。
安心したけど書いてるのがもう少し速くなるかなと思ってたので、残念なような、、
linuxでgtk2hsでつくってたのをwin10に移植しようとしたら、うまくいかなかった。
gtk2hsの公式も落ちてたし、HaskellのGUIは今は何が主流 or ポテンシャル高い、なんですかね?
安心したけど書いてるのがもう少し速くなるかなと思ってたので、残念なような、、
linuxでgtk2hsでつくってたのをwin10に移植しようとしたら、うまくいかなかった。
gtk2hsの公式も落ちてたし、HaskellのGUIは今は何が主流 or ポテンシャル高い、なんですかね?
868デフォルトの名無しさん
2017/08/14(月) 14:52:12.07ID:yxoqAlkZ すまん、いろんなモナドをJavaとかPythonとかのコードで
表してくれ・・・
なんとなく言いたいことは分かったとしても、はっきりとモナドが
なんなのかが分からない。
クラスとは何が違うのか。
表してくれ・・・
なんとなく言いたいことは分かったとしても、はっきりとモナドが
なんなのかが分からない。
クラスとは何が違うのか。
869デフォルトの名無しさん
2017/08/14(月) 15:06:44.92ID:Au3l8RWH ひところ GUI の為の FRP に熱を上げていた連中は今、何に熱を上げてるの?
870デフォルトの名無しさん
2017/08/14(月) 17:17:03.93ID:emaMcYYJ >>868
>すまん、いろんなモナドをJavaとかPythonとかのコードで
>表してくれ・・・
JavaかPythonのスレ逝くべきだと思うの
>なんとなく言いたいことは分かったとしても、はっきりとモナドが
>なんなのかが分からない。
>クラスとは何が違うのか。
「なんとなく」もわかってないと思うよ
あと「モナドは自己関手の圏におけるモノイド対象以上でも以下でもない」が本質的な回答
>すまん、いろんなモナドをJavaとかPythonとかのコードで
>表してくれ・・・
JavaかPythonのスレ逝くべきだと思うの
>なんとなく言いたいことは分かったとしても、はっきりとモナドが
>なんなのかが分からない。
>クラスとは何が違うのか。
「なんとなく」もわかってないと思うよ
あと「モナドは自己関手の圏におけるモノイド対象以上でも以下でもない」が本質的な回答
871デフォルトの名無しさん
2017/08/14(月) 17:29:31.74ID:yxoqAlkZ872デフォルトの名無しさん
2017/08/14(月) 17:52:42.99ID:emaMcYYJ CSにコンプレックスでもあんの?
テクニカルな概念をバカにわかるように説明しようとしてもムダってだけ
テクニカルな概念をバカにわかるように説明しようとしてもムダってだけ
873デフォルトの名無しさん
2017/08/14(月) 18:03:28.37ID:HwAT4qGf 春先Haskell熱心にやってたが
いまはCとかアセンブラとかそんなんばっかw
いまはCとかアセンブラとかそんなんばっかw
874デフォルトの名無しさん
2017/08/14(月) 18:05:00.48ID:HwAT4qGf 圏論分からんのがここで
いくら吠えても無駄だとという…
いくら吠えても無駄だとという…
875デフォルトの名無しさん
2017/08/14(月) 20:12:02.36ID:IonSoW2j 「左辺 <- 右辺」の右辺をモナドという
左辺と右辺が等しいとは言っていないので制約が少なくて便利
左辺と右辺が等しいとは言っていないので制約が少なくて便利
876デフォルトの名無しさん
2017/08/14(月) 20:17:22.67ID:lpoYOEZY 圏論を学ぶ為の知識がない
877デフォルトの名無しさん
2017/08/14(月) 20:37:31.10ID:IonSoW2j letとwhereが炎上したのも
等しいと書いてあるのに時間とメモリの消費が違うのはおかしいって話だよな
等しいと書いてあるのに時間とメモリの消費が違うのはおかしいって話だよな
878デフォルトの名無しさん
2017/08/14(月) 20:53:52.30ID:FlMJ7oBL 圏論もモノイドもわからなくてもHaskellでコード書くくらいは出来るけどな
もっと初学者への門戸を広げないと未来がない気がする
もっと初学者への門戸を広げないと未来がない気がする
879デフォルトの名無しさん
2017/08/14(月) 22:55:23.88ID:CgEdc2Wx >>867
最適化オプションで差がほぼ無くなるんだから、
俺は、どっちの書き方でも良い ==> 読みやすい方で書けばOK となって嬉しいけどな。
GUI ライブラリの主流は知らんけど、ポテンシャル高いのは Web アプリ系だと思ってる。
Webブラウザを GUI のキャンバスにするタイプのライブラリ。
基本的にはどのプラットフォームでも同じように動く。
既存の Web アプリ用テストフレームワークが使える。
この辺り、ライブラリ開発者にもアプリ開発者にも大きなメリットで、
要するに開発がしやすい。
これからどんどん進化していく可能性が高いんじゃないかな。
そんなライブラリはいくつかあるけど、俺は threepenny-gui がおすすめ。
ヘンに小難しい EDSL が無く、概念が素直でシンプルだからプログラムしやすいよ。
stackage にも入ってるから導入が楽だしね。
最適化オプションで差がほぼ無くなるんだから、
俺は、どっちの書き方でも良い ==> 読みやすい方で書けばOK となって嬉しいけどな。
GUI ライブラリの主流は知らんけど、ポテンシャル高いのは Web アプリ系だと思ってる。
Webブラウザを GUI のキャンバスにするタイプのライブラリ。
基本的にはどのプラットフォームでも同じように動く。
既存の Web アプリ用テストフレームワークが使える。
この辺り、ライブラリ開発者にもアプリ開発者にも大きなメリットで、
要するに開発がしやすい。
これからどんどん進化していく可能性が高いんじゃないかな。
そんなライブラリはいくつかあるけど、俺は threepenny-gui がおすすめ。
ヘンに小難しい EDSL が無く、概念が素直でシンプルだからプログラムしやすいよ。
stackage にも入ってるから導入が楽だしね。
880デフォルトの名無しさん
2017/08/14(月) 23:10:56.01ID:/MmIRMIQ881デフォルトの名無しさん
2017/08/15(火) 02:45:23.70ID:NWVlMToc >>842
2014年とかめっちゃ情報古いのでアテにならんだろ
Revision history of "Let vs. Where" - HaskellWiki
https://wiki.haskell.org/index.php?title=Let_vs._Where&action=history
2014年とかめっちゃ情報古いのでアテにならんだろ
Revision history of "Let vs. Where" - HaskellWiki
https://wiki.haskell.org/index.php?title=Let_vs._Where&action=history
882デフォルトの名無しさん
2017/08/15(火) 16:18:56.38ID:5CT1InAk Chris Okasakiの純粋関数型データ構造
Haskellを志すキッズはマストバイだわ
まだ3章だけど、木の値の更新でどうやって効率良く(更新しない部分を)扱ってるのか解ったわ
根元から辿って、毎回関係ない方を共有してけば確かに辿るステップ分のコピーしか発生しないわけだわ
対数オーダーになるわけだわ
なるほどなるほど
SML記法で書いてあるけどHaskell式としてもすぐに頭に入るわ
Haskellを志すキッズはマストバイだわ
まだ3章だけど、木の値の更新でどうやって効率良く(更新しない部分を)扱ってるのか解ったわ
根元から辿って、毎回関係ない方を共有してけば確かに辿るステップ分のコピーしか発生しないわけだわ
対数オーダーになるわけだわ
なるほどなるほど
SML記法で書いてあるけどHaskell式としてもすぐに頭に入るわ
883デフォルトの名無しさん
2017/08/15(火) 17:50:51.72ID:ukf6/i16 ステマステマス
884デフォルトの名無しさん
2017/08/16(水) 10:19:38.26ID:WjjZTNlo smlnj入れたけど全然勉強進んでないなそういえば
885デフォルトの名無しさん
2017/08/16(水) 15:19:53.05ID:CVOJ5+kj ニュージャージーSMLは大学時代情報科学実験だか演習だかの簡易コンパイラ作製でひどい目にあった
Haskellに出逢えなかったら危うく関数型アレルギーになるところだった
Haskellに出逢えなかったら危うく関数型アレルギーになるところだった
886デフォルトの名無しさん
2017/08/16(水) 17:48:37.53ID:i974/+KY stackで、stack buildしても上書きされなかったりします?
stack execしても、新しいのにならない、、
stack execしても、新しいのにならない、、
887デフォルトの名無しさん
2017/08/16(水) 20:37:22.91ID:DL/Olpzx >>885
どんなとこが合わなかったの?
どんなとこが合わなかったの?
888デフォルトの名無しさん
2017/08/16(水) 23:08:21.23ID:CVOJ5+kj ・怒涛の再帰再帰再帰再帰の思考枠組みに悲鳴を上げる、手続き脳だった当時のボクの頭が
・末尾再帰最適化など実際(パフォーマンス)的なことを教えてくれず、代入なし、変更はコピーでやるとふわふわっと説明され、
(時間・空間)計算量的に現実には使い物にならないんじゃないかという疑念を払拭してくれなかった当時の講師(ボクはC++のように本格的でないものにはやる気が出ない性格)が
・演習に遅刻した奴への嫌がらせかと疑わしい程に沢山埋め込んであるレジュメの誤植を、口頭でちょろちょろっと訂正するだけのおざなり風土(レジュメだけでなくちゃんと教科書で進めろ)が
・できあがる、四則演算しかできない(途中アセンブリ言語に少し触れたのは良かったが)面白くもなんともない(ボクは本格的でないものにはやる気が出ない性格)糞仕様の言語(とそれ用コンパイラ)が
…ん? なんかほとんどニュージャージーのせいじゃないな
・末尾再帰最適化など実際(パフォーマンス)的なことを教えてくれず、代入なし、変更はコピーでやるとふわふわっと説明され、
(時間・空間)計算量的に現実には使い物にならないんじゃないかという疑念を払拭してくれなかった当時の講師(ボクはC++のように本格的でないものにはやる気が出ない性格)が
・演習に遅刻した奴への嫌がらせかと疑わしい程に沢山埋め込んであるレジュメの誤植を、口頭でちょろちょろっと訂正するだけのおざなり風土(レジュメだけでなくちゃんと教科書で進めろ)が
・できあがる、四則演算しかできない(途中アセンブリ言語に少し触れたのは良かったが)面白くもなんともない(ボクは本格的でないものにはやる気が出ない性格)糞仕様の言語(とそれ用コンパイラ)が
…ん? なんかほとんどニュージャージーのせいじゃないな
889デフォルトの名無しさん
2017/08/16(水) 23:58:51.50ID:t3qJKwuj そういうの、よそのスレでやってくれないか
890デフォルトの名無しさん
2017/08/17(木) 07:36:41.55ID:+LfjPFPQ すいません許してください。何でもしますから
891デフォルトの名無しさん
2017/08/18(金) 00:54:02.54ID:/Ug8Ilbd モナドってインタフェースみたいなもんでいいのか?
つまりなんでもアリにしちゃうと、設計上様々な不整合があるから
「こういうモナド」を最初に規定してしまい、「モナドに合致しない」記述は
コンパイルで弾いてくれるの?
つまりなんでもアリにしちゃうと、設計上様々な不整合があるから
「こういうモナド」を最初に規定してしまい、「モナドに合致しない」記述は
コンパイルで弾いてくれるの?
892デフォルトの名無しさん
2017/08/18(金) 01:40:52.19ID:DcI2Tm3Y モナドはDSLプラットフォーム
893デフォルトの名無しさん
2017/08/18(金) 08:52:35.38ID:JMfuFDdS 文脈だって言ってんダロ
文脈を保ちながら普通の値と同じように扱うための規則を定めたものがモナド
文脈を保ちながら普通の値と同じように扱うための規則を定めたものがモナド
894デフォルトの名無しさん
2017/08/18(金) 09:06:56.52ID:t41bY7Zb haskellはモナドじゃないものもコンパイル通しちゃうよ
モナドであることの保証は自分でするしか
モナドであることの保証は自分でするしか
895デフォルトの名無しさん
2017/08/18(金) 09:22:11.27ID:xzRfloCT >>891
モナドってより型クラスがインターフェースに近い。
んで、モナドは型クラスの一つでしかない。
等値を司るEq型クラスのインスタンスになれば=が使える。
大小比較を司るOrd型クラスのインスタンスになれば<や<=が使える。
それと同じ。
逐次処理を司るMonad型クラスのインスタンスになれば>>=とreturnが使える。
IOモナドはIO型を受け取るモナドってだけ。
素のモナドを使うのがほぼIO型しかないからIOモナドって一緒くたにされるけど、IOとモナドは分けて考える。
リストやMaybeもモナドのインスタンスなので、モナドでもある。
モナドが他の型クラスと違うのは、メソッド定義(インターフェースになる関数や演算子をインスタンスになる型で定義)の時にモナド則に則って書く必要があるということ。
それとモナド則を正しく定義できたかは型クラスには無関係なので、定義した人が正しさを保証する必要があるということ。
モナドってより型クラスがインターフェースに近い。
んで、モナドは型クラスの一つでしかない。
等値を司るEq型クラスのインスタンスになれば=が使える。
大小比較を司るOrd型クラスのインスタンスになれば<や<=が使える。
それと同じ。
逐次処理を司るMonad型クラスのインスタンスになれば>>=とreturnが使える。
IOモナドはIO型を受け取るモナドってだけ。
素のモナドを使うのがほぼIO型しかないからIOモナドって一緒くたにされるけど、IOとモナドは分けて考える。
リストやMaybeもモナドのインスタンスなので、モナドでもある。
モナドが他の型クラスと違うのは、メソッド定義(インターフェースになる関数や演算子をインスタンスになる型で定義)の時にモナド則に則って書く必要があるということ。
それとモナド則を正しく定義できたかは型クラスには無関係なので、定義した人が正しさを保証する必要があるということ。
896デフォルトの名無しさん
2017/08/18(金) 09:38:38.34ID:pIYVRSo1 万能で汎用のDSLも作れるけどそれは手続き型言語と同じだから作らないんだよ
IOはごく一部で使われるDSLであるべき
他のところではIOとは別のDSLを使うべきという設計
IOはごく一部で使われるDSLであるべき
他のところではIOとは別のDSLを使うべきという設計
897デフォルトの名無しさん
2017/08/18(金) 13:45:01.90ID:/WLuQhbG Haskellによる手続き型言語の
分かりやすくて面白い実装きぼん
(学習用のおもちゃでよろし)
分かりやすくて面白い実装きぼん
(学習用のおもちゃでよろし)
898デフォルトの名無しさん
2017/08/18(金) 20:36:40.41ID:2JfViLUf899デフォルトの名無しさん
2017/08/18(金) 21:42:29.70ID:XJnMHx6C ListTの使い方ようわかりまへん
do
x <- [1..9]
なんちゃらかんちゃら x
って、リスト感覚で使いたいんですが
do
x <- [1..9]
なんちゃらかんちゃら x
って、リスト感覚で使いたいんですが
900デフォルトの名無しさん
2017/08/19(土) 23:56:10.44ID:3LWi1RRc 直受けの50万 客:いつまでもうちにいていいよ
3次受けの50万(客は70万払ってる) 客:短期延長していい?
5次受けの50万(客は110万払ってる) 客:作り終わったらとっと出てけ できなかったら即退場だ
長時間労働 高稼働 高スキル要求が多い
零細フリーランスサイトは5次受けから誰もできない難易度の高い仕事 余り物の仕事を紹介してくる。40万円代でやってくれと
これならJIETから3次でいったほうがいいな
446非決定性名無しさん2017/08/02(水) 22:12:48.95
JIETに毎月5千円払えば3次から入場できるだろ?
高額をうたうフリーランスのサイトはだいたい5次から45万円
JIETで閲覧応募できる末端価格からさらに搾取するのが高額をみせつけるフリーランスサイトでした
高額案件をみせつけるフリーランスサイトも案件の取得はJIETでした
473非決定性名無しさん2017/08/03(木) 15:21:30.71
JIETに加入すれば誰でも3次60万からスタートだ。フリーランスのサイトをやってる
自称エージェントもそこから案件情報を取得しきてる。サイトで60万で釣って40万から55万の
間でやらしている。
372仕様書無しさん2017/08/11(金) 10:31:43.41
フリーランスで検索すると引っかかる零細ITがやっているフリーランスのサイトはだめだ。
高額に見せているけど実際は50万前後
JIET加入した方がいいよ。案件は毎日千件以上末端価格は60万円 平凡な稼働時間の80万円の案件もある。
ユー子も求人をだしてる。名刺も渡せる。ユー子に名刺が渡せるんだぞ。夢のようだ
それらの案件まさぐってHPで転売していたのが零細ITがやるフリーランスサイト
自称エージェントはJIETから流れてくる案件を転売してるだけだった。
JIETに加入すれば誰でも案件に応募することができた。収入が40万50万台にならなくて済む
3次受けの50万(客は70万払ってる) 客:短期延長していい?
5次受けの50万(客は110万払ってる) 客:作り終わったらとっと出てけ できなかったら即退場だ
長時間労働 高稼働 高スキル要求が多い
零細フリーランスサイトは5次受けから誰もできない難易度の高い仕事 余り物の仕事を紹介してくる。40万円代でやってくれと
これならJIETから3次でいったほうがいいな
446非決定性名無しさん2017/08/02(水) 22:12:48.95
JIETに毎月5千円払えば3次から入場できるだろ?
高額をうたうフリーランスのサイトはだいたい5次から45万円
JIETで閲覧応募できる末端価格からさらに搾取するのが高額をみせつけるフリーランスサイトでした
高額案件をみせつけるフリーランスサイトも案件の取得はJIETでした
473非決定性名無しさん2017/08/03(木) 15:21:30.71
JIETに加入すれば誰でも3次60万からスタートだ。フリーランスのサイトをやってる
自称エージェントもそこから案件情報を取得しきてる。サイトで60万で釣って40万から55万の
間でやらしている。
372仕様書無しさん2017/08/11(金) 10:31:43.41
フリーランスで検索すると引っかかる零細ITがやっているフリーランスのサイトはだめだ。
高額に見せているけど実際は50万前後
JIET加入した方がいいよ。案件は毎日千件以上末端価格は60万円 平凡な稼働時間の80万円の案件もある。
ユー子も求人をだしてる。名刺も渡せる。ユー子に名刺が渡せるんだぞ。夢のようだ
それらの案件まさぐってHPで転売していたのが零細ITがやるフリーランスサイト
自称エージェントはJIETから流れてくる案件を転売してるだけだった。
JIETに加入すれば誰でも案件に応募することができた。収入が40万50万台にならなくて済む
901デフォルトの名無しさん
2017/08/20(日) 03:21:02.15ID:ZIcYkpAE902デフォルトの名無しさん
2017/08/21(月) 00:38:33.62ID:JGSk0hSy >>901
ListTには失望しました。もう積むのやめます
ListTには失望しました。もう積むのやめます
903デフォルトの名無しさん
2017/08/21(月) 01:01:09.86ID:JGSk0hSy そもそもやろうとしてることに(よくよく考えたら)モナド変換必要なかった
本当に必要だったのは foldl でした
一方ロシアは鉛筆を使った
本当に必要だったのは foldl でした
一方ロシアは鉛筆を使った
904デフォルトの名無しさん
2017/08/24(木) 13:28:03.79ID:CtBOeO2p 以下のhogeを定義してください
foldl' f a xs = foldr1 seq $ hoge $ scanl f a xs
hoge xs = ???
foldl' f a xs = foldr1 seq $ hoge $ scanl f a xs
hoge xs = ???
905デフォルトの名無しさん
2017/08/24(木) 19:41:48.97ID:QM9NdRuY906905
2017/08/24(木) 20:30:17.00ID:QM9NdRuY >>905は事故解決しました
907905
2017/08/24(木) 20:49:44.49ID:QM9NdRuY 引数の適用順序の理解が足りないだけでした
f x = id id id id id id x
というのがあったら
f x = (((((id id) id) id) id) id) x
という感じに左から順番に適用されるんですね
foldr f g [1..9] 707 も (foldr f g [1..9]) 707 と括れば理解できました
f x = id id id id id id x
というのがあったら
f x = (((((id id) id) id) id) id) x
という感じに左から順番に適用されるんですね
foldr f g [1..9] 707 も (foldr f g [1..9]) 707 と括れば理解できました
908デフォルトの名無しさん
2017/08/24(木) 23:08:48.67ID:RV3Vojhw Data.Map.findWithDefault について質問です
マップに存在しなかったからデフォルト値を返したのか、それともマップに存在したからそれを返したのか
一目判らないとき、デバッグでどうやって判定しますか?
マップに存在しなかったからデフォルト値を返したのか、それともマップに存在したからそれを返したのか
一目判らないとき、デバッグでどうやって判定しますか?
909デフォルトの名無しさん
2017/08/24(木) 23:40:45.91ID:Drr24sOi 判定不可能でありそれが意図するところじゃね?
変な値をデフォルトに入れておくか
a->k->Map k a->Either a a的なのを用意するしかないんじゃ
変な値をデフォルトに入れておくか
a->k->Map k a->Either a a的なのを用意するしかないんじゃ
910デフォルトの名無しさん
2017/08/25(金) 00:15:34.79ID:eQ9TUNW0 findWithDefault d k m = maybe (trace "default" d) (trace "existed") $ Map.lookup k m
911デフォルトの名無しさん
2017/08/25(金) 05:39:52.91ID:Qp5pyEwS >>910
やったぜ。ドバァーっとヒット/ミス/更新がその時の検索キーと共に時系列で出てきた。 もう気が狂う程気持ちええんじゃ。
ログまみれのコンソールを見つめてメモ化再帰の効果を確認したりした。ああ〜〜たまらねえぜ。(ありがとうございました)
やったぜ。ドバァーっとヒット/ミス/更新がその時の検索キーと共に時系列で出てきた。 もう気が狂う程気持ちええんじゃ。
ログまみれのコンソールを見つめてメモ化再帰の効果を確認したりした。ああ〜〜たまらねえぜ。(ありがとうございました)
912デフォルトの名無しさん
2017/08/25(金) 06:18:21.22ID:eQ9TUNW0 わろた
913デフォルトの名無しさん
2017/08/26(土) 04:35:19.01ID:gyHjYOL6 >>910
ポイントフリー化に成功しました
findWithDefault = curry.(.uncurry Map.lookup).(`maybe` trace "existed").(trace "default")
https://ideone.com/RVpv4o
ポイントフリー化に成功しました
findWithDefault = curry.(.uncurry Map.lookup).(`maybe` trace "existed").(trace "default")
https://ideone.com/RVpv4o
914デフォルトの名無しさん
2017/08/29(火) 10:59:59.32ID:4lrctZxR 新しい言語を勉強してると「Haskellならこう書けるのになんだかな〜」となってしまう
915デフォルトの名無しさん
2017/08/29(火) 14:36:34.73ID:Qxc6OkmQ Haskell書いてると「OCamlならこう書けるのになんだかな〜」となってしまう
916デフォルトの名無しさん
2017/08/29(火) 14:47:58.47ID:Ca4b6AZL そま?例えば?
917デフォルトの名無しさん
2017/08/29(火) 16:59:34.07ID:weKjOry2 岡村の方が速いらしいっすよ。でも、そうですね…やっぱり僕は、王道を征く、Haskell系ですか
918デフォルトの名無しさん
2017/08/29(火) 19:06:06.26ID:Qxc6OkmQ 多相ヴァリアント
919デフォルトの名無しさん
2017/08/30(水) 16:54:11.68ID:osPI36Tt 双方向リンク系のデータ構造って、Haskell で作るのムズいね。
作るだけなら良いけど、更新時の処理で頭こんがり。
任意のノードに外部からアクセス用リンクが張ってあると
もう訳分からん。
作るだけなら良いけど、更新時の処理で頭こんがり。
任意のノードに外部からアクセス用リンクが張ってあると
もう訳分からん。
920デフォルトの名無しさん
2017/08/30(水) 17:07:44.85ID:YH54NEsT そういうことするなっていう設計の言語で強引にしようとしたらわけわからなくなるよ
921デフォルトの名無しさん
2017/08/30(水) 17:18:14.50ID:osPI36Tt >>920
そういうことするなってのは入門書には書いてないじゃん。
じゃあ、ちょっくらやってみようか、ってなるのがプログラマでしょ。
できるかもしれんし、できんかもしれん。
まぁ、かなりムズいなってのは体験して分かった。
そういうことするなってのは入門書には書いてないじゃん。
じゃあ、ちょっくらやってみようか、ってなるのがプログラマでしょ。
できるかもしれんし、できんかもしれん。
まぁ、かなりムズいなってのは体験して分かった。
922デフォルトの名無しさん
2017/08/30(水) 17:24:15.30ID:YH54NEsT >>921
あー。Haskellでは状態を変更しない為に単方向リストを用いるって書いてなかった?
あー。Haskellでは状態を変更しない為に単方向リストを用いるって書いてなかった?
923デフォルトの名無しさん
2017/08/30(水) 17:35:40.48ID:osPI36Tt >>922
リストの定義とか使い方とかは載ってたけど、
なんで単方向のなのかの説明は無かったよ。
「Haskell:The Craft of Functional Programming」
「Beginning Haskell: A Project-Based Approach」
リストの定義とか使い方とかは載ってたけど、
なんで単方向のなのかの説明は無かったよ。
「Haskell:The Craft of Functional Programming」
「Beginning Haskell: A Project-Based Approach」
924デフォルトの名無しさん
2017/08/30(水) 17:47:54.21ID:YH54NEsT マジかぁ……
925デフォルトの名無しさん
2017/08/31(木) 03:30:11.22ID:lYwDQiZm Purely Functional Data Structuresなら触れられてるかと思って探してみたけど
そもそも双方向連結リスト出てこないな(´・ω・`)
でも永続データ構造の概念を知ればなぜ扱われていないかが分かるだろう多分
そもそも双方向連結リスト出てこないな(´・ω・`)
でも永続データ構造の概念を知ればなぜ扱われていないかが分かるだろう多分
926デフォルトの名無しさん
2017/08/31(木) 05:24:22.47ID:8YNqT7yd 何で双方向リストの必要なんかあるんですか
途中で戻るとか男らしくないっすよ
途中で戻るとか男らしくないっすよ
927デフォルトの名無しさん
2017/08/31(木) 07:18:24.63ID:3UP7YVEo >>926
巨大な双方向グラフを作ることになったんだけど、 使い方は次の通りちょっと特殊。
* あるノードにアクセスしたら、その近隣のノードも集中的にアクセスすることが多い
* ノードが持つ値の読み書きアクセスが圧倒的に多く、グラフの形を変えることは少ない
* ノードの値の書き込みアクセスよりは読み取りアクセスの方が多い
既存の汎用的なグラフ ライブラリと、双方向リンクで自作したグラフ ライブラリとで、
どっちが効率いいか実験してみようと思ったんだ。
でも双方向リンクは、ひとつのノードの値を変えるためにどうしてもグラフ全体を作り直す羽目になる。
どうにかならんものかと考えてたけど、どうにもならんね・・・
巨大な双方向グラフを作ることになったんだけど、 使い方は次の通りちょっと特殊。
* あるノードにアクセスしたら、その近隣のノードも集中的にアクセスすることが多い
* ノードが持つ値の読み書きアクセスが圧倒的に多く、グラフの形を変えることは少ない
* ノードの値の書き込みアクセスよりは読み取りアクセスの方が多い
既存の汎用的なグラフ ライブラリと、双方向リンクで自作したグラフ ライブラリとで、
どっちが効率いいか実験してみようと思ったんだ。
でも双方向リンクは、ひとつのノードの値を変えるためにどうしてもグラフ全体を作り直す羽目になる。
どうにかならんものかと考えてたけど、どうにもならんね・・・
928デフォルトの名無しさん
2017/08/31(木) 09:37:24.20ID:z8GPJM/w 「doubly linked list haskell」でググって適当な実装拾う
929デフォルトの名無しさん
2017/08/31(木) 11:49:25.22ID:lYwDQiZm すごハスにあるようなZipper構造かな必要なのは
930デフォルトの名無しさん
2017/08/31(木) 12:38:50.35ID:cadjyHiv 書き換えしないんだったら ([a], a, [a]) みたいなので充分なんだよな
コモナドにしてどうたらとか余計な話も無視して
コモナドにしてどうたらとか余計な話も無視して
931デフォルトの名無しさん
2017/08/31(木) 12:49:49.13ID:3UP7YVEo あの、欲しいのはリストじゃなくてグラフなんだ。
だから、zipper 系とは違う。
だから、zipper 系とは違う。
932デフォルトの名無しさん
2017/08/31(木) 14:03:01.85ID:UJfUdOL2 最低限木じゃないと効率的かつ単純なのは無理なんじゃないかな?
あんま自信ないけど
あんま自信ないけど
933デフォルトの名無しさん
2017/08/31(木) 14:05:39.83ID:3UP7YVEo 皆のレスがどうも勘違いしてると思ってたら、
俺が最初に双方向リンクと言ってしまったからか。
ごめん、相互リンクだ。
俺が最初に双方向リンクと言ってしまったからか。
ごめん、相互リンクだ。
934デフォルトの名無しさん
2017/08/31(木) 14:16:21.20ID:3UP7YVEo >>932
木構造でも、親ノードへのリンクを入れると相互リンクになって難しくなるよね。
ひとつのノードの値を変えるためには、
ツリー全体を作り直すことになるんじゃないかな。
HaskellのDOMツリーのデータ構造とかどうなってるんだろ・・・
木構造でも、親ノードへのリンクを入れると相互リンクになって難しくなるよね。
ひとつのノードの値を変えるためには、
ツリー全体を作り直すことになるんじゃないかな。
HaskellのDOMツリーのデータ構造とかどうなってるんだろ・・・
935デフォルトの名無しさん
2017/08/31(木) 14:36:16.80ID:3UP7YVEo よく考えたら、リストとかツリーでも、
途中のノードの値を変えたかったら、
そのノードまでリンクで繋がってる全ノードは、
新しくリンクを張り直さなくちゃいけないんだね。
途中のノードの値を変えたかったら、
そのノードまでリンクで繋がってる全ノードは、
新しくリンクを張り直さなくちゃいけないんだね。
936デフォルトの名無しさん
2017/08/31(木) 16:07:16.49ID:ByIgTrbm そうです。途中の値の変更は
リストならO(n)
ツリーならO(log n)
リストならO(n)
ツリーならO(log n)
937デフォルトの名無しさん
2017/08/31(木) 17:20:58.63ID:UJfUdOL2938デフォルトの名無しさん
2017/09/01(金) 01:21:03.60ID:5J9AnuIe 何が何でも1つのプログラミング言語で何とかしようとするのって
異国に行っても母国語で通そうとする観光客と同じ
異国に行っても母国語で通そうとする観光客と同じ
939デフォルトの名無しさん
2017/09/01(金) 06:41:46.01ID:YbmVmXZP940デフォルトの名無しさん
2017/09/02(土) 01:43:24.06ID:6rFZUKZZ >何が何でも1つのプログラミング言語で何とかしようとするのって
>異国に行っても母国語で通そうとする観光客と同じ
こういうやつにかぎってポリグロッタルコストを甘く見てる
>異国に行っても母国語で通そうとする観光客と同じ
こういうやつにかぎってポリグロッタルコストを甘く見てる
941デフォルトの名無しさん
2017/09/02(土) 02:26:59.07ID:zv/5K5Jn 私はHaskell以外のプログラミング言語で書く気はありません
942デフォルトの名無しさん
2017/09/02(土) 03:52:13.44ID:qGW8qyv/ 慣れるまで大変だけど、慣れたら居心地いい気がする
943デフォルトの名無しさん
2017/09/02(土) 07:28:06.22ID:pdF7ruXY 困ったらFFIでC呼び出せばいいだけだから助かる
944デフォルトの名無しさん
2017/09/08(金) 23:35:36.55ID:r8Qtf4kd ICFP 2017 で発表された資料、成果や知見はどこかで後悔されたりしないんですか?
動画が公開されてるんなら、有料でも見たいです。
動画が公開されてるんなら、有料でも見たいです。
945デフォルトの名無しさん
2017/09/09(土) 18:15:24.47ID:lkyt770O 発表者各自が公開してるの地道に探すしかねーんでないの
ICFP Conference(@icfp_conference)さん | Twitter
https://twitter.com/icfp_conference
ICFP Conference(@icfp_conference)さん | Twitter
https://twitter.com/icfp_conference
946デフォルトの名無しさん
2017/09/09(土) 20:11:43.28ID:TPWLKlk7 >>945
やはりそうですか。
毎年そうやって発表者や参加者の発信を探すのですが、
分散しており、詳しいことは書いてないことも多く、
情報集めに苦労する割には、たいてい徒労に終わります。
有料でいいので公式がまとめて公開してくれるといいのにと
ここ数年つたない英語でメールを出しているのですが、
相手にしてもらえませんね。
すいません、愚痴でした。
やはりそうですか。
毎年そうやって発表者や参加者の発信を探すのですが、
分散しており、詳しいことは書いてないことも多く、
情報集めに苦労する割には、たいてい徒労に終わります。
有料でいいので公式がまとめて公開してくれるといいのにと
ここ数年つたない英語でメールを出しているのですが、
相手にしてもらえませんね。
すいません、愚痴でした。
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 【無言】中国怒らせた高市首相→1週間だんまり、国民に実害も説明なし 中国問題を避けてスルー… ★3 [BFU★]
- 止まらぬ「日本売り」 高市財政への懸念で進む金利上昇と円安 [蚤の市★]
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- 【音楽】『日本レコード大賞』各賞発表! 大賞候補にILLIT、M!LK、ふるっぱー、幾田りら、アイナ、ミセスら… 作詩賞は指原莉乃 [冬月記者★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★10 [樽悶★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 中国、レアアース輸出制限wwwwwwwwwwwwwwwwwwwwwwww🎌 [329329848]
- 中国「高市が謝罪しなければ、ハニトラに引っかかった日本の政治家を公表する」 [804169411]
- 【35🌸専】なんG さくらみこ桃鉄配信実況スレ🏡【ホロライブ▶】
- 【実況】博衣こよりのえちえちカービィのエアライダー🧪★3
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
