関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part31
https://mevius.5ch.net/test/read.cgi/tech/1506447188/
探検
関数型プログラミング言語Haskell Part32
レス数が1000を超えています。これ以上書き込みはできません。
2019/01/29(火) 09:05:47.90ID:gJP/u7IJ
2019/01/29(火) 09:06:37.34ID:gJP/u7IJ
過去スレ一覧
30) http://mevius.2ch.net/test/read.cgi/tech/1484491434/
29) http://peace.2ch.net/test/read.cgi/tech/1436869629/
28) http://peace.2ch.net/test/read.cgi/tech/1428535861/
27) http://peace.2ch.net/test/read.cgi/tech/1420718555/
26) http://peace.2ch.net/test/read.cgi/tech/1406436392/
25) http://peace.2ch.net/test/read.cgi/tech/1393313450/
24) http://toro.2ch.net/test/read.cgi/tech/1382705669/
23) http://toro.2ch.net/test/read.cgi/tech/1376111807/
22) http://toro.2ch.net/test/read.cgi/tech/1364009659/
21) http://toro.2ch.net/test/read.cgi/tech/1358702176/
20) http://toro.2ch.net/test/read.cgi/tech/1350428908/
19) http://toro.2ch.net/test/read.cgi/tech/1340760070/
18) http://toro.2ch.net/test/read.cgi/tech/1331902463/
17) http://toro.2ch.net/test/read.cgi/tech/1325510368/
16) http://toro.2ch.net/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.net/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.net/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.net/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.net/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.net/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.net/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.net/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.net/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.net/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.net/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.net/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.net/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.net/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.net/test/read.cgi/tech/1013846140/
01) http://pc.2ch.net/tech/kako/996/996131288.html
30) http://mevius.2ch.net/test/read.cgi/tech/1484491434/
29) http://peace.2ch.net/test/read.cgi/tech/1436869629/
28) http://peace.2ch.net/test/read.cgi/tech/1428535861/
27) http://peace.2ch.net/test/read.cgi/tech/1420718555/
26) http://peace.2ch.net/test/read.cgi/tech/1406436392/
25) http://peace.2ch.net/test/read.cgi/tech/1393313450/
24) http://toro.2ch.net/test/read.cgi/tech/1382705669/
23) http://toro.2ch.net/test/read.cgi/tech/1376111807/
22) http://toro.2ch.net/test/read.cgi/tech/1364009659/
21) http://toro.2ch.net/test/read.cgi/tech/1358702176/
20) http://toro.2ch.net/test/read.cgi/tech/1350428908/
19) http://toro.2ch.net/test/read.cgi/tech/1340760070/
18) http://toro.2ch.net/test/read.cgi/tech/1331902463/
17) http://toro.2ch.net/test/read.cgi/tech/1325510368/
16) http://toro.2ch.net/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.net/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.net/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.net/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.net/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.net/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.net/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.net/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.net/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.net/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.net/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.net/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.net/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.net/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.net/test/read.cgi/tech/1013846140/
01) http://pc.2ch.net/tech/kako/996/996131288.html
2019/01/29(火) 09:07:46.66ID:gJP/u7IJ
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
https://en.wikibooks.org/wiki/Haskell
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters
Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/
(以下、日本語)
Haskell入門 5ステップ - 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
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
https://en.wikibooks.org/wiki/Haskell
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters
Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/
(以下、日本語)
Haskell入門 5ステップ - 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
2019/01/31(木) 07:01:01.92
手続き型でゴリゴリやってきた人にとって関数型は
マラソンの選手に、匍匐前進と水泳で近道するよう強制しているかのようです
マラソンの選手に、匍匐前進と水泳で近道するよう強制しているかのようです
5デフォルトの名無しさん
2019/01/31(木) 07:24:27.44ID:4JULsXj72019/01/31(木) 20:10:32.50ID:KXLDvKfy
IOモナドは手続きモナド
2019/02/01(金) 07:26:12.68ID:L0GRy80q
初心者がHaskellでオンライン問題集みたいなの解いてんだけど
Haskellでやるとこういうの楽しくてええな
Haskellでやるとこういうの楽しくてええな
2019/02/02(土) 00:12:37.55
CPS書き換えドリル
次の英文を○○構文を用いて同じ意味の英文に書き換えなさい的な
次の英文を○○構文を用いて同じ意味の英文に書き換えなさい的な
2019/02/03(日) 12:58:27.43ID:5bolWXfM
haskell紹介してるブログとか色々あるけどどこも肝心要のところがすっぽり抜けててイライラするな・・
例えば
fact 0 = 1
fact n = n * fact(n - 1)
これ無限ループになっちゃって終わらないでしょ終端条件も書いてないし。
fact 3を展開すると
3 * ( 2 * ( 1 * ( 1 * ………
0を入力すれば1になるってことはこの先ずーっと1が繰り返されるだけだし。
同じ値が2度続いたら処理を止めるとか変な仕組みでも入ってるのかねー
例えば
fact 0 = 1
fact n = n * fact(n - 1)
これ無限ループになっちゃって終わらないでしょ終端条件も書いてないし。
fact 3を展開すると
3 * ( 2 * ( 1 * ( 1 * ………
0を入力すれば1になるってことはこの先ずーっと1が繰り返されるだけだし。
同じ値が2度続いたら処理を止めるとか変な仕組みでも入ってるのかねー
2019/02/03(日) 14:29:08.38ID:0VpSvizO
>>9
>無限ループになっちゃって終わらないでしょ終端条件も書いてないし。
いえいえ、終端条件が
>fact 0 = 1
です、n ∈ N たる n からはじまって 0 で終わる、と読みます
fact 3 = 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
で止まります.
>無限ループになっちゃって終わらないでしょ終端条件も書いてないし。
いえいえ、終端条件が
>fact 0 = 1
です、n ∈ N たる n からはじまって 0 で終わる、と読みます
fact 3 = 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
で止まります.
2019/02/03(日) 15:10:17.81ID:DVkCUlxV
2019/02/03(日) 20:51:10.38ID:5bolWXfM
2019/02/03(日) 21:08:06.34ID:RwDwNYzW
2019/02/03(日) 21:13:08.06ID:5bolWXfM
2019/02/03(日) 21:15:44.35ID:DVkCUlxV
2019/02/03(日) 21:18:28.59ID:DdA3Wm74
>>15
バカで思い込みが激しいって最悪だぞ?どっちかにしろ。
バカで思い込みが激しいって最悪だぞ?どっちかにしろ。
2019/02/03(日) 21:19:06.57ID:5bolWXfM
>>16
それじゃ終わらない
終了条件が書いていないから
なんどもいうように * 1がずーっと続くようにしか見えない
だからこの例題見たときにイライラしてたんだよね
前提となってる仕様があるけど説明省いたとかそれ系かなと
それじゃ終わらない
終了条件が書いていないから
なんどもいうように * 1がずーっと続くようにしか見えない
だからこの例題見たときにイライラしてたんだよね
前提となってる仕様があるけど説明省いたとかそれ系かなと
2019/02/03(日) 21:20:07.09ID:RwDwNYzW
>>15
ほとんど同じ説明だが…
関数の定義が
fact 0 = 1
fact n = n * fact(n - 1)
となっている。
このとき、左辺が右辺に置き換えられる (簡約という)
つまり fact 3 は 3 * fact 2 に置き換えられる
そして fact 2 は 2 * fact 1 に置き換えられる
そして fact 1 は 1 * fact 0 に置き換えられる
ひとつめの関数の定義により、fact 0 は 1 に置き換えられるので
置き換えはここでとまる
以上をまとめると
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
ほとんど同じ説明だが…
関数の定義が
fact 0 = 1
fact n = n * fact(n - 1)
となっている。
このとき、左辺が右辺に置き換えられる (簡約という)
つまり fact 3 は 3 * fact 2 に置き換えられる
そして fact 2 は 2 * fact 1 に置き換えられる
そして fact 1 は 1 * fact 0 に置き換えられる
ひとつめの関数の定義により、fact 0 は 1 に置き換えられるので
置き換えはここでとまる
以上をまとめると
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
21デフォルトの名無しさん
2019/02/03(日) 21:22:45.27ID:I0qputsI >>18
終了条件は
>fact 0 = 1
です。関数 fact の引数が 0 なら、1 を関数の値として返し、fact の求値作業は終了します。
fact への入力が 1 でないならば
>fact n = n * fact(n - 1)
の定義をつかって、最初の入力 n よりも小さい値 n - 1 (< n) を使った関数定義がつかえるように変換します
終了条件は
>fact 0 = 1
です。関数 fact の引数が 0 なら、1 を関数の値として返し、fact の求値作業は終了します。
fact への入力が 1 でないならば
>fact n = n * fact(n - 1)
の定義をつかって、最初の入力 n よりも小さい値 n - 1 (< n) を使った関数定義がつかえるように変換します
2019/02/03(日) 21:25:18.35ID:5bolWXfM
2019/02/03(日) 21:26:42.72ID:DVkCUlxV
いやだから
fact 1 で1が出てくる でまた、fact 1になって永遠に続くとかの勝手な思い込みでしょ
あるいは、
fact 0 =1 になるから、また fact 1 -1 になると思ってるとか
だから、永遠に1が続くと勘違いしちゃっている
fact 1 で1が出てくる でまた、fact 1になって永遠に続くとかの勝手な思い込みでしょ
あるいは、
fact 0 =1 になるから、また fact 1 -1 になると思ってるとか
だから、永遠に1が続くと勘違いしちゃっている
2019/02/03(日) 21:27:00.44ID:5bolWXfM
2019/02/03(日) 21:28:01.94ID:DVkCUlxV
27デフォルトの名無しさん
2019/02/03(日) 21:29:01.89ID:I0qputsI 途中で。。。
まあいい。
Pythonでも再帰出来る。
特別な話じゃない。
def fact(n):
if n == 0:
return 1
else:
return (n * fact(n - 1))
まあいい。
Pythonでも再帰出来る。
特別な話じゃない。
def fact(n):
if n == 0:
return 1
else:
return (n * fact(n - 1))
2019/02/03(日) 21:29:11.55ID:RwDwNYzW
2019/02/03(日) 21:30:12.31ID:RwDwNYzW
>>25
そうそう。そのとおり。
そうそう。そのとおり。
>>23
>1 - 1で fact 0をevalしてまたfact(1)になる
>fact 0 = 1
というのは、関数 fact のうち fact(0) (引数が 0) のときの値は 1 である、と確定的な記述をしています。ここで答えが決まったので、さらに答えを求めるための関数適用作業には入りません、それはそういう意味です
どうして eval したあと fact(1) になる、と判断したのでしょうか?
fact(0) = 1 の 1 というのは fact() の値であって、fact の引数ではなく、また fact の引数になりうる記述は 「fact 0 = 1」という記述の中には見つからないのですが
>fact n = n * fact (n - 1)
この記述のなかには、たとえば 引数が 7 だとすると「 fact 8 を fact 7 の値をつかって表現する」ということですから、fact 8 を eval する「途中で」 fact 7 を eval しようとする、ということは書かれています
>1 - 1で fact 0をevalしてまたfact(1)になる
>fact 0 = 1
というのは、関数 fact のうち fact(0) (引数が 0) のときの値は 1 である、と確定的な記述をしています。ここで答えが決まったので、さらに答えを求めるための関数適用作業には入りません、それはそういう意味です
どうして eval したあと fact(1) になる、と判断したのでしょうか?
fact(0) = 1 の 1 というのは fact() の値であって、fact の引数ではなく、また fact の引数になりうる記述は 「fact 0 = 1」という記述の中には見つからないのですが
>fact n = n * fact (n - 1)
この記述のなかには、たとえば 引数が 7 だとすると「 fact 8 を fact 7 の値をつかって表現する」ということですから、fact 8 を eval する「途中で」 fact 7 を eval しようとする、ということは書かれています
31デフォルトの名無しさん
2019/02/03(日) 21:32:49.38ID:I0qputsI >>25
その考えであってる。
その考えであってる。
2019/02/03(日) 21:33:05.02ID:5bolWXfM
>>28
いやいやfact(1)の評価は0なんだし
fact 0の定義があるからまた1
どう考えても続くんだよね
そもそも再起から脱出するためのコードがどこにもないから怪しいとも踏んでる
何か前提となってる仕様がありそうだ
いやいやfact(1)の評価は0なんだし
fact 0の定義があるからまた1
どう考えても続くんだよね
そもそも再起から脱出するためのコードがどこにもないから怪しいとも踏んでる
何か前提となってる仕様がありそうだ
2019/02/03(日) 21:34:47.28ID:5bolWXfM
2019/02/03(日) 21:35:32.72ID:RwDwNYzW
>>33
>いやいやfact(1)の評価は0なんだし
ここが違っています。
fact(1) の評価は 1 * fact(0) であって、 0 じゃないです
fact(0) の値が具体的になにかは、fact(0) を意識しはじめた時点では分からないのですよ
>いやいやfact(1)の評価は0なんだし
ここが違っています。
fact(1) の評価は 1 * fact(0) であって、 0 じゃないです
fact(0) の値が具体的になにかは、fact(0) を意識しはじめた時点では分からないのですよ
2019/02/03(日) 21:37:12.79ID:PKgH5/Eo
バカ過ぎて泣けてくる…
2019/02/03(日) 21:37:24.99ID:DVkCUlxV
>>33
おもろいな だんだんネタに思えてきた
fact nの定義をよく見ろ
fact 0 = 1 で再帰していないじゃん ここで止まるだろ 普通に考えれば
他の言語も一緒だろ ただそれをパターンマッチでやってるだけ
おもろいな だんだんネタに思えてきた
fact nの定義をよく見ろ
fact 0 = 1 で再帰していないじゃん ここで止まるだろ 普通に考えれば
他の言語も一緒だろ ただそれをパターンマッチでやってるだけ
2019/02/03(日) 21:37:39.39ID:RwDwNYzW
40デフォルトの名無しさん
2019/02/03(日) 21:38:05.69ID:I0qputsI2019/02/03(日) 21:39:25.68ID:RwDwNYzW
2019/02/03(日) 21:39:35.29ID:5bolWXfM
2019/02/03(日) 21:41:09.23ID:RwDwNYzW
2019/02/03(日) 21:41:42.22ID:5bolWXfM
2019/02/03(日) 21:43:10.37ID:RwDwNYzW
>>42
>1で再起が止まる仕様なら納得だし
理解が不十分じゃないかと危惧します、その台詞「1 で再起がとまる」という言葉ですが、「何が」 1 で再起が止まる、と考えているのですか?
あなたの発言は、いちいち「何が」「どうだ」の「何が」が欠けているので不安です
>1で再起が止まる仕様なら納得だし
理解が不十分じゃないかと危惧します、その台詞「1 で再起がとまる」という言葉ですが、「何が」 1 で再起が止まる、と考えているのですか?
あなたの発言は、いちいち「何が」「どうだ」の「何が」が欠けているので不安です
>>44
覚える、という言葉はこういうときに使うものではないと思いますよ
覚える、という言葉はこういうときに使うものではないと思いますよ
2019/02/03(日) 21:44:56.66ID:RwDwNYzW
2019/02/03(日) 21:46:13.57ID:PKgH5/Eo
釣り宣言マダー?
2019/02/03(日) 21:46:48.03ID:5bolWXfM
2019/02/03(日) 21:49:35.33ID:DdA3Wm74
2019/02/03(日) 21:49:54.21ID:5bolWXfM
2019/02/03(日) 21:49:57.06ID:DVkCUlxV
2019/02/03(日) 21:51:42.20ID:5bolWXfM
>>50
>この記述だと無限に *1が続くわけだから
あなたの理解になにが足りないのかがわかるような気がしてきました。
「fact の引数が 1 である」と「fact の求値が 1 である」とを区別していないようですね
この二つは厳然として異なります
fact 0 = 1
は、fact(0) の「求値が」1 である、といっているのです
fact n = n * fact (n - 1)
は、たとえば
fact 8 = 8 * fact 7
fact 7 = 7 * fact 6
fact 6 = 6 * fact 5
fact 5 = 5 * fact 4
fact 4 = 4 * fact 3
fact 3 = 3 * fact 2
fact 2 = 2 * fact 1
という記述を纏めて表現しているのであり、これは fact n の「求値」は fact (n - 1) という、もともとの引数 n とは違う n - 1 という引数を使った fact の求値で定義しているのです
>この記述だと無限に *1が続くわけだから
あなたの理解になにが足りないのかがわかるような気がしてきました。
「fact の引数が 1 である」と「fact の求値が 1 である」とを区別していないようですね
この二つは厳然として異なります
fact 0 = 1
は、fact(0) の「求値が」1 である、といっているのです
fact n = n * fact (n - 1)
は、たとえば
fact 8 = 8 * fact 7
fact 7 = 7 * fact 6
fact 6 = 6 * fact 5
fact 5 = 5 * fact 4
fact 4 = 4 * fact 3
fact 3 = 3 * fact 2
fact 2 = 2 * fact 1
という記述を纏めて表現しているのであり、これは fact n の「求値」は fact (n - 1) という、もともとの引数 n とは違う n - 1 という引数を使った fact の求値で定義しているのです
2019/02/03(日) 21:53:28.07ID:RwDwNYzW
もしかすると、だけど
fact 0 = 1
を実行した直後に
fact 1 = 1 * fact 0
が続くと考えている?
もうしそうだとしたらそこが間違いで
fact 0 = 1
fact n = n * fact(n - 1)
はそのどちらかしか実行されない
fact 0 = 1
を実行した直後に
fact 1 = 1 * fact 0
が続くと考えている?
もうしそうだとしたらそこが間違いで
fact 0 = 1
fact n = n * fact(n - 1)
はそのどちらかしか実行されない
>>54
>fact 0で1が出てきたら、
何が 1 となるのか、そこをはっきり書いてください、「出てきたら」っていいますが、「何が」 1 と出てきたら、なんでしょうか?
>また、勝手に再帰させて
何が 1 となるのか、0 となるのか、そこをはっきりさせないことには、それ以降の思考は不可能ですよ、あなたには「また勝手に再帰させて」とかいうことを考える段階ではありません
>fact 0で1が出てきたら、
何が 1 となるのか、そこをはっきり書いてください、「出てきたら」っていいますが、「何が」 1 と出てきたら、なんでしょうか?
>また、勝手に再帰させて
何が 1 となるのか、0 となるのか、そこをはっきりさせないことには、それ以降の思考は不可能ですよ、あなたには「また勝手に再帰させて」とかいうことを考える段階ではありません
2019/02/03(日) 21:57:58.25ID:5bolWXfM
2019/02/03(日) 21:58:56.17ID:DVkCUlxV
>>61
これは失礼…
これは失礼…
2019/02/03(日) 22:00:18.19ID:RwDwNYzW
>>60
ああ、良かった
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
そうだよ。そして fact 0 は 1 を返すから、もう再帰呼出しは起こらないよね?
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
ああ、良かった
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
そうだよ。そして fact 0 は 1 を返すから、もう再帰呼出しは起こらないよね?
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
2019/02/03(日) 22:02:19.10ID:5bolWXfM
>>63
いやいや終了条件が何も書かれてないから結局は続くよ
どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
間違ってないはずなんだけど何か使ってる人には常識的なお約束事とかあるのかな
いやいや終了条件が何も書かれてないから結局は続くよ
どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
間違ってないはずなんだけど何か使ってる人には常識的なお約束事とかあるのかな
2019/02/03(日) 22:02:55.82ID:DVkCUlxV
>>60
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
ようするにそこでとまる
数学の階乗だから fact nの引数は再帰する度に-1される。
どこかで、factの引数が0になったら、それ以上は再帰しない
難しい話じゃないし、他の言語で再帰理解していたら、分かるはず
自分で落ち着いて考えてごらん
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
ようするにそこでとまる
数学の階乗だから fact nの引数は再帰する度に-1される。
どこかで、factの引数が0になったら、それ以上は再帰しない
難しい話じゃないし、他の言語で再帰理解していたら、分かるはず
自分で落ち着いて考えてごらん
2019/02/03(日) 22:06:24.90ID:5bolWXfM
2019/02/03(日) 22:07:56.45ID:DdA3Wm74
>>64
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
2019/02/03(日) 22:08:07.10ID:RwDwNYzW
>どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
fact 1 = 1 * fact (1-1) = 1 * fact 0
となるけど、これは fact 1 の時の処理だね
fact 0 の場合は 1 を返すだけだから、fact(1-1) という処理はもう出てこないよ
今の話は
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
のうち
3 * 2 * 1 * fact 0
が
3 * 2 * 1 * 1
に変化するところだよ
fact 1 = 1 * fact (1-1) = 1 * fact 0
となるけど、これは fact 1 の時の処理だね
fact 0 の場合は 1 を返すだけだから、fact(1-1) という処理はもう出てこないよ
今の話は
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
のうち
3 * 2 * 1 * fact 0
が
3 * 2 * 1 * 1
に変化するところだよ
2019/02/03(日) 22:08:36.79ID:DVkCUlxV
>>66
だとすると文法自体理解していない あるいは関数自体
もっと、詳しく書くと
>どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
定義を見てごらん
fact 0 = 1 でこれは、=の右にfactが無いからこれで再帰はしないで、ここで終了
fact n = n * fact n-1 で=の右にfactがあるから再帰する
だとすると文法自体理解していない あるいは関数自体
もっと、詳しく書くと
>どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
定義を見てごらん
fact 0 = 1 でこれは、=の右にfactが無いからこれで再帰はしないで、ここで終了
fact n = n * fact n-1 で=の右にfactがあるから再帰する
2019/02/03(日) 22:10:11.03ID:5bolWXfM
>>67
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact( 1 - 1 )
= 3 * 2 * 1 * 1 * 1 * fact ( 1 - 1)
どこまでも続くじゃない・・
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact( 1 - 1 )
= 3 * 2 * 1 * 1 * 1 * fact ( 1 - 1)
どこまでも続くじゃない・・
2019/02/03(日) 22:11:04.78ID:DdA3Wm74
>>70
これはアカンよ…
これはアカンよ…
2019/02/03(日) 22:13:50.28ID:DdA3Wm74
>>70
中学校の数学でそうはならないってことは習うから、学校の数学でそこまで勉強してからプログラミングに手を出しても遅くないのでは?
中学校の数学でそうはならないってことは習うから、学校の数学でそこまで勉強してからプログラミングに手を出しても遅くないのでは?
2019/02/03(日) 22:14:19.16ID:5bolWXfM
>>69
fact 0 = 1で終了するというのが納得いってない
もしそうであれば1を返せば再帰は終了すると仮定したんだ
そもそもfact 0 = 1ってマクロ定義みたいなもんだし
直ちに評価されて式に代入されるよね
fact 0 = 1で終了するというのが納得いってない
もしそうであれば1を返せば再帰は終了すると仮定したんだ
そもそもfact 0 = 1ってマクロ定義みたいなもんだし
直ちに評価されて式に代入されるよね
2019/02/03(日) 22:17:47.65ID:DVkCUlxV
>>73
他の言語で再帰ってのは理解しているの?
fact 0 = 1で=の右にfactが無いから、再帰は終了 だから、終了条件は書かれている。
もしこれが理解できないのなら、関数定義とか、パターンマッチとかもっと基本的なことに
戻らないと理解できないと思う
他の言語で再帰ってのは理解しているの?
fact 0 = 1で=の右にfactが無いから、再帰は終了 だから、終了条件は書かれている。
もしこれが理解できないのなら、関数定義とか、パターンマッチとかもっと基本的なことに
戻らないと理解できないと思う
2019/02/03(日) 22:18:13.63ID:5bolWXfM
>>72
プログラミング言語は数学じゃないから
再帰から脱出するならそのためのコードは絶対必要なはずなんだ
それがないってことは仕掛けがあるはずで
その仮定が1を返せば再帰から脱出できるという考え
でも違うらしいから大混乱してる
プログラミング言語は数学じゃないから
再帰から脱出するならそのためのコードは絶対必要なはずなんだ
それがないってことは仕掛けがあるはずで
その仮定が1を返せば再帰から脱出できるという考え
でも違うらしいから大混乱してる
2019/02/03(日) 22:19:53.64ID:RwDwNYzW
2019/02/03(日) 22:21:37.72ID:5bolWXfM
>>74
Cで再帰させるなら終了条件にヒットしたらフラグたててreturnで戻ってく
関数定義の仕方ならサッと見たけど特に疑問はなかったよ
パターンマッチっていってもマクロ定義みたいなもんだし特にどうということも
Cで再帰させるなら終了条件にヒットしたらフラグたててreturnで戻ってく
関数定義の仕方ならサッと見たけど特に疑問はなかったよ
パターンマッチっていってもマクロ定義みたいなもんだし特にどうということも
2019/02/03(日) 22:22:31.24ID:RwDwNYzW
>>75
上に書いたけど、漸化式は理解している?
同じ書き方をします
Haskellは数学を基盤としているので、数学的な記述方法でプログラムが書けます
「再帰から脱出するならそのためのコードは絶対必要なはずなんだ」とあるけど、
もう書かれているよ
fact 0 = 1 って
上に書いたけど、漸化式は理解している?
同じ書き方をします
Haskellは数学を基盤としているので、数学的な記述方法でプログラムが書けます
「再帰から脱出するならそのためのコードは絶対必要なはずなんだ」とあるけど、
もう書かれているよ
fact 0 = 1 って
2019/02/03(日) 22:24:44.77ID:5bolWXfM
2019/02/03(日) 22:25:28.82ID:RwDwNYzW
>fact 0は1なんだからその次はfact(1)になるでしょ
その次はもうないよ
その次はもうないよ
2019/02/03(日) 22:26:23.52ID:5bolWXfM
2019/02/03(日) 22:26:31.18ID:DdA3Wm74
>>79
ならないよ。そこが間違ってるんだよ。
ならないよ。そこが間違ってるんだよ。
2019/02/03(日) 22:28:21.00ID:RwDwNYzW
84デフォルトの名無しさん
2019/02/03(日) 22:28:40.54ID:I0qputsI >>42
1で止まる仕様と言うか。。。
掛け算だから1を返すだけ(掛けても変わらない数)で、足し算なら0を返すよ。
sum1toN 0 = 0
sum1toN n = n + sum1toN (n - 1)
1で止まる仕様と言うか。。。
掛け算だから1を返すだけ(掛けても変わらない数)で、足し算なら0を返すよ。
sum1toN 0 = 0
sum1toN n = n + sum1toN (n - 1)
2019/02/03(日) 22:28:53.80ID:DdA3Wm74
2019/02/03(日) 22:30:37.00ID:5bolWXfM
2019/02/03(日) 22:30:46.46ID:o+jOfHnE
この人の脳内だと、
fact 0 = 1
が
fact 0 = fact 1
になってるんじゃないだろうか
fact 0 = 1
が
fact 0 = fact 1
になってるんじゃないだろうか
2019/02/03(日) 22:32:38.86ID:5bolWXfM
>>85
PythonやJavaは知らないのでなんとも
PythonやJavaは知らないのでなんとも
2019/02/03(日) 22:33:23.20ID:DVkCUlxV
この人 77で書いてるけど、文法まともに読んでないんだよ
Haskell 文法自体は一見綺麗で簡単そうに見えるけど
実際には、理解するのが非常に難しい(今回の再帰のとこじゃないんだけど)
適当に文法流し読みして理解しようとするのが 間違っている
もっとも、階乗の再帰は、他の人の説明で理解できるだろうと思うが
Haskell 文法自体は一見綺麗で簡単そうに見えるけど
実際には、理解するのが非常に難しい(今回の再帰のとこじゃないんだけど)
適当に文法流し読みして理解しようとするのが 間違っている
もっとも、階乗の再帰は、他の人の説明で理解できるだろうと思うが
2019/02/03(日) 22:34:03.06ID:DdA3Wm74
>>86
fact 0は1なんだから、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
はい!ここで一旦休憩!君に問題。
3 * 2 * 1 * 1はいくつだ?
fact 0は1なんだから、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
はい!ここで一旦休憩!君に問題。
3 * 2 * 1 * 1はいくつだ?
2019/02/03(日) 22:34:30.64ID:RwDwNYzW
うーん、C言語だと
int fact(int n)
{
if (n == 0) return 1;
else return n * fact (n - 1);
}
と書くのと同じなんだけどねえ
int fact(int n)
{
if (n == 0) return 1;
else return n * fact (n - 1);
}
と書くのと同じなんだけどねえ
2019/02/03(日) 22:37:00.44ID:5bolWXfM
>>90
だから
=3 * 2 * 1 * 1 * fact(1-1)
=3 * 2 * 1 * 1 * 1*fact(1-1)
=3 * 2 * 1 * 1 * 1*1*fact(1-1)
という具合にいつまでもfactは続くよ
だから色々納得いかないことあるんだけど
だから
=3 * 2 * 1 * 1 * fact(1-1)
=3 * 2 * 1 * 1 * 1*fact(1-1)
=3 * 2 * 1 * 1 * 1*1*fact(1-1)
という具合にいつまでもfactは続くよ
だから色々納得いかないことあるんだけど
2019/02/03(日) 22:37:36.15ID:QPZpvG6g
もうHaskellはあきらめるんだ……
2019/02/03(日) 22:39:05.88ID:RwDwNYzW
>>92
この1行目はどこから出てきたの?
=3 * 2 * 1 * 1 * fact(1-1)
この辺を脳内でテキトーに処理してるからわからないんだよ
fact 3
のところから地道に書きながら置き換えてみな
この1行目はどこから出てきたの?
=3 * 2 * 1 * 1 * fact(1-1)
この辺を脳内でテキトーに処理してるからわからないんだよ
fact 3
のところから地道に書きながら置き換えてみな
2019/02/03(日) 22:41:48.43ID:5bolWXfM
2019/02/03(日) 22:42:17.34ID:DdA3Wm74
>>92
算数のテストで
3 * 2 * 1 * 1は?って問題に、
3 * 2 * 1 * 1 * fact(1-1)って答えるの?
それは算数でも数学でもプログラミング言語でも間違いだよ。
算数でも数学でもプログラミング言語でも答えは6だよ。
算数のテストで
3 * 2 * 1 * 1は?って問題に、
3 * 2 * 1 * 1 * fact(1-1)って答えるの?
それは算数でも数学でもプログラミング言語でも間違いだよ。
算数でも数学でもプログラミング言語でも答えは6だよ。
2019/02/03(日) 22:42:33.19ID:RwDwNYzW
2019/02/03(日) 22:43:47.92ID:5bolWXfM
>>96
そこはどうでもいいところだから書かなかった
そこはどうでもいいところだから書かなかった
2019/02/03(日) 22:43:59.88ID:RwDwNYzW
100デフォルトの名無しさん
2019/02/03(日) 22:44:48.18ID:RwDwNYzW >>98
どうでもよくないから君は間違っている
どうでもよくないから君は間違っている
101デフォルトの名無しさん
2019/02/03(日) 22:45:27.31ID:5bolWXfM102デフォルトの名無しさん
2019/02/03(日) 22:45:46.73ID:wI7xL3t+ >>95
左辺から右辺に書き換えるって分かってる?
左辺から右辺に書き換えるって分かってる?
103デフォルトの名無しさん
2019/02/03(日) 22:49:36.42ID:5bolWXfM >>99
=3 * 2 * 1 * 1
=3 * 2 * 1 * 1 * 1
=3 * 2 * 1 * 1 * 1 * 1
・・・
やっぱり変わんないよ?
何かやってる人には常識だからあえて書いていないとかのお約束ごととかある言語なんじゃないかなぁ・・
パッと見た感じそんなに難しい言語には見えないけど内容に納得できない
=3 * 2 * 1 * 1
=3 * 2 * 1 * 1 * 1
=3 * 2 * 1 * 1 * 1 * 1
・・・
やっぱり変わんないよ?
何かやってる人には常識だからあえて書いていないとかのお約束ごととかある言語なんじゃないかなぁ・・
パッと見た感じそんなに難しい言語には見えないけど内容に納得できない
104デフォルトの名無しさん
2019/02/03(日) 22:50:08.66ID:PKgH5/Eo >>98
どうでもよくないよ。正しい流れは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
なのに、>>92によるとあなたは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * 1 * fact(1-1)
であるという。
正しい答え6にたどり着かない原因はあなたが
3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
と変形(?)してしまっているところなのは明らか。
どうでもよくないよ。正しい流れは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
なのに、>>92によるとあなたは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * 1 * fact(1-1)
であるという。
正しい答え6にたどり着かない原因はあなたが
3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
と変形(?)してしまっているところなのは明らか。
106デフォルトの名無しさん
2019/02/03(日) 22:51:48.54ID:5bolWXfM >>102
普通にやったけど特に問題なかったよ
普通にやったけど特に問題なかったよ
>>79
>fact 0は1なんだからその次はfact(1)になるでしょ
ちがいますよ。なんども言っていますが「fact 0 は 1 」、っていう言葉が不正確ですね、fact 0 の「何が」 1 なんでしょうか?
>fact 0は1なんだからその次はfact(1)になるでしょ
ちがいますよ。なんども言っていますが「fact 0 は 1 」、っていう言葉が不正確ですね、fact 0 の「何が」 1 なんでしょうか?
108デフォルトの名無しさん
2019/02/03(日) 22:54:17.35ID:5bolWXfM111デフォルトの名無しさん
2019/02/03(日) 22:56:02.92ID:5bolWXfM >>107
不正確と言われても他に言いようがないし
不正確と言われても他に言いようがないし
112デフォルトの名無しさん
2019/02/03(日) 22:56:26.62ID:o+jOfHnE Cでこんな感じに書いてあげれば分かるのだろうか。
int fact(int n) {
switch(n) {
case 0: return 1; // fib 0 = 1
default: return n * fact(n-1); // fib n = n * fact (n-1)
}
}
int fact(int n) {
switch(n) {
case 0: return 1; // fib 0 = 1
default: return n * fact(n-1); // fib n = n * fact (n-1)
}
}
113デフォルトの名無しさん
2019/02/03(日) 22:57:55.66ID:o+jOfHnE あっとボケた。>>112のfibはfactの間違い
114デフォルトの名無しさん
2019/02/03(日) 22:58:05.17ID:5bolWXfM >>111
あなたは 「fact 0 が 1 」といっていますが、我々は「fact 0 の値が 1」と「fact の引数が 1」とを別のものとして区別しているのです
あなたは区別していますか?あるいは「fact 0 が 1」というけれども fact 0 の何が 1 なんですか?
あなたは 「fact 0 が 1 」といっていますが、我々は「fact 0 の値が 1」と「fact の引数が 1」とを別のものとして区別しているのです
あなたは区別していますか?あるいは「fact 0 が 1」というけれども fact 0 の何が 1 なんですか?
116デフォルトの名無しさん
2019/02/03(日) 22:59:39.94ID:RwDwNYzW118デフォルトの名無しさん
2019/02/03(日) 23:01:37.23ID:5bolWXfM119デフォルトの名無しさん
2019/02/03(日) 23:01:49.80ID:PKgH5/Eo >>108
> fact 0 = 1とか定義されちゃってるから変形もなにもあの形にしかならんでしょう
いいえその形には絶対になりません。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * fact 0
は
= 3 * 2 * 1 * 1
になります。うん、これはいい。次。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * 1
は
= 3 * 2 * 1 * 1 * fact(1-1)
になります?いいえ、なりません。勝手に足した「 * fact(1-1)」どっから出てきたんだ。
3 * 2 * 1 * 1は6です。
> fact 0 = 1とか定義されちゃってるから変形もなにもあの形にしかならんでしょう
いいえその形には絶対になりません。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * fact 0
は
= 3 * 2 * 1 * 1
になります。うん、これはいい。次。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * 1
は
= 3 * 2 * 1 * 1 * fact(1-1)
になります?いいえ、なりません。勝手に足した「 * fact(1-1)」どっから出てきたんだ。
3 * 2 * 1 * 1は6です。
120デフォルトの名無しさん
2019/02/03(日) 23:03:02.44ID:RwDwNYzW 理解できたようで良かったけど、結局は
>>57 がわかってなかったということだなあ
>>57 がわかってなかったということだなあ
121デフォルトの名無しさん
2019/02/03(日) 23:03:24.76ID:5bolWXfM これは説明書きに書いておいて欲しかったなー
これじゃわかりようがないわ
これじゃわかりようがないわ
122デフォルトの名無しさん
2019/02/03(日) 23:03:29.59ID:PKgH5/Eo >>118
よかったね。君へのレスで「パターンマッチ」を検索してごらん
よかったね。君へのレスで「パターンマッチ」を検索してごらん
124デフォルトの名無しさん
2019/02/03(日) 23:04:21.15ID:RwDwNYzW125デフォルトの名無しさん
2019/02/03(日) 23:04:27.74ID:5bolWXfM 完全解決してスッキリ
みんな時間とらせてしまってごめん
そしてありがとう
みんな時間とらせてしまってごめん
そしてありがとう
126デフォルトの名無しさん
2019/02/03(日) 23:06:11.09ID:RwDwNYzW >>125 がんばれよー
127デフォルトの名無しさん
2019/02/03(日) 23:06:13.09ID:9SI0qp6C fact 0 = 1 は、fact 0 = fact (fact 0)ではありません。
128デフォルトの名無しさん
2019/02/03(日) 23:06:37.09ID:PKgH5/Eo129デフォルトの名無しさん
2019/02/03(日) 23:11:25.99ID:RwDwNYzW >>122 が言っている「パターンマッチ」を彼が調べてくれるといいね
130デフォルトの名無しさん
2019/02/04(月) 07:18:20.69ID:eX/1kX5o >>92
だから、fact 1-1になった後、fact 0になるだろ?
そしたらfact 0 = 1になるんだよ。
数学の数学的帰納法ググれ。
fact 0 = 1
これはfactの引数が0なら強制的に1になると言ってる。
fact n = n * fact (n - 1)
これはfact nを解くには引数のnに、nより1つ小さい数をfactに渡したものを掛けたものと等しいと言っている。
(そして最終的にfact 0で1が返って全体の値が求まる)
fact 3
= 3 * fact (3 - 1)
= 3 * fact 2
= 3 * 2 * fact (2 - 1)
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact (1 - 1)
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1 ― fact 0 = 1より
= 6
だから、fact 1-1になった後、fact 0になるだろ?
そしたらfact 0 = 1になるんだよ。
数学の数学的帰納法ググれ。
fact 0 = 1
これはfactの引数が0なら強制的に1になると言ってる。
fact n = n * fact (n - 1)
これはfact nを解くには引数のnに、nより1つ小さい数をfactに渡したものを掛けたものと等しいと言っている。
(そして最終的にfact 0で1が返って全体の値が求まる)
fact 3
= 3 * fact (3 - 1)
= 3 * fact 2
= 3 * 2 * fact (2 - 1)
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact (1 - 1)
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1 ― fact 0 = 1より
= 6
131デフォルトの名無しさん
2019/02/04(月) 07:24:43.06ID:eX/1kX5o ただし、fact 0の様な特殊な条件を上に書く必要がある(Haskellに限らず、どの言語も)
132デフォルトの名無しさん
2019/02/04(月) 07:30:26.48ID:eX/1kX5o スタック消費しない末尾再帰とか、まだ先があるのに先が思いやられる。。。
(末尾再帰も最近じゃCやJavaScriptでも効くらしい。実質ループだから使った事ないけど)
(末尾再帰も最近じゃCやJavaScriptでも効くらしい。実質ループだから使った事ないけど)
133デフォルトの名無しさん
2019/02/04(月) 11:21:38.86ID:66n6O4Xc 遅延評価や並行並列がデフォルトの言語ならばスタック消費しないのは当たり前である
134デフォルトの名無しさん
2019/02/04(月) 11:34:48.97ID:nZpfKraZ へっ?
135デフォルトの名無しさん
2019/02/04(月) 11:56:25.98ID:66n6O4Xc 人間の読解力なんて順調に行っても1日1行程度でしかない
136デフォルトの名無しさん
2019/02/04(月) 22:09:21.20ID:fVmYxPyX >>133
代わりにスペースリークするけどな
代わりにスペースリークするけどな
137デフォルトの名無しさん
2019/02/05(火) 00:47:55.71ID:YW+7XZmL リストや配列には複数の要素がある
オブジェクトにも複数のメンバーがある
その一部が不要になってもメモリは全部残る
ここまでは言語に依存しない
オブジェクトにも複数のメンバーがある
その一部が不要になってもメモリは全部残る
ここまでは言語に依存しない
138デフォルトの名無しさん
2019/02/05(火) 02:19:00.11 数日ぶりに覗いたらすっごいスレ伸びてる
139デフォルトの名無しさん
2019/02/05(火) 03:02:15.20ID:/sjztfrr ごいごいすー!
140デフォルトの名無しさん
2019/02/05(火) 05:35:54.03ID:H17BJwTV >>9,112,118 だけ読めばおk
141デフォルトの名無しさん
2019/02/11(月) 10:04:55.57ID:3SqS2rDH HaskelでWindowsアプリケーション作りたいですけどできるんですか?
142デフォルトの名無しさん
2019/02/11(月) 22:30:07.24ID:njsDRqJy 問題は、何十年か前にそれができた人のコードを今コンパイルできるか
今できた人のコードを何十年後にコンパイルできるか
それができるのがC/C++で
他の言語はそれを不可能にして新しい言語を普及させたい
今できた人のコードを何十年後にコンパイルできるか
それができるのがC/C++で
他の言語はそれを不可能にして新しい言語を普及させたい
143デフォルトの名無しさん
2019/02/15(金) 14:13:18.51ID:ZHz1cA+u さようなら遅延評価 2019-02-15
https://kazu-yamamoto.hatenablog.jp/entry/2019/02/15/115630
Haskellがとっつきにくい原因の一つに遅延評価がある。入門書では、無限リストと遅延
評価がことさら強調される。しかし、Haskellを業務で使ってみると、遅延評価が煩わしく
なってくる。遅延評価なしでもほとんどのことは実現できるし、メモリーの使用量は推測
できないし、あまりいいことはない。(中略)
、GHC 8.0 では、言語拡張 Strict と StrictData が提供された。この二つを使えば、
デフォルトの評価戦略が正格評価となる。
つまり、以下のコードの評価戦略は遅延評価だが、Strict と StrictData を用いると
正格評価となる。(中略)
Strict と StrictData をもう少しく知りたい人はStrict Haskellを読んでほしい。
純粋関数型データ構造を読んだ諸君、Haskellではデフォルトが遅延評価だからイマイチ
例題をうまく実装できないと思ったことだろう。でも、今なら簡単にできるのだ!(後略)
https://kazu-yamamoto.hatenablog.jp/entry/2019/02/15/115630
Haskellがとっつきにくい原因の一つに遅延評価がある。入門書では、無限リストと遅延
評価がことさら強調される。しかし、Haskellを業務で使ってみると、遅延評価が煩わしく
なってくる。遅延評価なしでもほとんどのことは実現できるし、メモリーの使用量は推測
できないし、あまりいいことはない。(中略)
、GHC 8.0 では、言語拡張 Strict と StrictData が提供された。この二つを使えば、
デフォルトの評価戦略が正格評価となる。
つまり、以下のコードの評価戦略は遅延評価だが、Strict と StrictData を用いると
正格評価となる。(中略)
Strict と StrictData をもう少しく知りたい人はStrict Haskellを読んでほしい。
純粋関数型データ構造を読んだ諸君、Haskellではデフォルトが遅延評価だからイマイチ
例題をうまく実装できないと思ったことだろう。でも、今なら簡単にできるのだ!(後略)
144デフォルトの名無しさん
2019/02/15(金) 14:59:49.72ID:h0RhILR4 ムグググググググ
145デフォルトの名無しさん
2019/02/15(金) 16:33:48.53ID:iAmk1lDo xcodeで使えないのが致命的なんだよな・・
リンクはできるがUIがらみのコードは書けないわけで
リンクはできるがUIがらみのコードは書けないわけで
146デフォルトの名無しさん
2019/02/16(土) 07:21:27.63ID:6iOnrs/B147デフォルトの名無しさん
2019/02/16(土) 09:09:45.75ID:pHmZSgK3 もういいだろう ただ単に基本的文法すら知らない子じゃん
148デフォルトの名無しさん
2019/02/16(土) 13:13:23.08ID:aQjbCKoN とっつきにくいも聞き飽きたな
パワハラ上司に同じこと言えるのかと
本当にとっつきにくい相手はそういう輩だ
パワハラ上司に同じこと言えるのかと
本当にとっつきにくい相手はそういう輩だ
149デフォルトの名無しさん
2019/02/16(土) 13:16:38.83ID:CJGMkJvN ややこしいことをややこしい方法で簡単にするのがhaskell
150デフォルトの名無しさん
2019/02/16(土) 14:01:52.10ID:aQjbCKoN Pythonのように型を書かないやつはゴミクズ
とかいうハラスメントが一番の問題だから遅延評価は誤差の範囲内
とかいうハラスメントが一番の問題だから遅延評価は誤差の範囲内
151デフォルトの名無しさん
2019/02/17(日) 00:52:21.04ID:jxnSJIL4 一回しか変数に代入しない場合は副作用になりますか?
YES か NOでお答えください。
JavaScriptで言えばこういうコードです。
const a = foo(), b = bar(a), c = baz(b);
(const変数は再代入ができません)
YES か NOでお答えください。
JavaScriptで言えばこういうコードです。
const a = foo(), b = bar(a), c = baz(b);
(const変数は再代入ができません)
152デフォルトの名無しさん
2019/02/17(日) 00:52:52.45ID:KFkN1Yft Haskellスレの皆さんこんにちは✨😃❗
突然ですがこのたびWeb制作板JavaScript質問スレにて、スレ民の総意により、
[1,2,3].map(v => (v += 2, v * v));
のv += 2は副作用ではない。
と決定しました!
ありがとう!ありがとう!
突然ですがこのたびWeb制作板JavaScript質問スレにて、スレ民の総意により、
[1,2,3].map(v => (v += 2, v * v));
のv += 2は副作用ではない。
と決定しました!
ありがとう!ありがとう!
153デフォルトの名無しさん
2019/02/17(日) 00:55:14.71ID:jxnSJIL4154デフォルトの名無しさん
2019/02/17(日) 01:04:11.22ID:KFkN1Yft >>153
?別の方と勘違いされているのでは??
話はシンプル。質問をして、その答えを得た。以下が全てです。この質問と答えに、前後の文脈など関係ありますか??
904 Name_Not_Found sage 2019/02/17(日) 00:42:09.09 ID:???
>>901
悪いけど以下の(ア)に入るのは1か2か答えてくれる?1か2の一文字書くだけだから出来るよね?
[1,2,3].map(v => (v += 2, v * v));
のv += 2は(ア)である
1. 副作用である
2. 副作用ではない
907 Name_Not_Found sage 2019/02/17(日) 00:44:40.52 ID:???
>>904
Wikipediaの2つの成立条件を考えれば、2. は迷惑だろ
908 907 sage typo 2019/02/17(日) 00:45:33.97 ID:???
× 2. は迷惑だろ
〇 2. であることは明白だろ
?別の方と勘違いされているのでは??
話はシンプル。質問をして、その答えを得た。以下が全てです。この質問と答えに、前後の文脈など関係ありますか??
904 Name_Not_Found sage 2019/02/17(日) 00:42:09.09 ID:???
>>901
悪いけど以下の(ア)に入るのは1か2か答えてくれる?1か2の一文字書くだけだから出来るよね?
[1,2,3].map(v => (v += 2, v * v));
のv += 2は(ア)である
1. 副作用である
2. 副作用ではない
907 Name_Not_Found sage 2019/02/17(日) 00:44:40.52 ID:???
>>904
Wikipediaの2つの成立条件を考えれば、2. は迷惑だろ
908 907 sage typo 2019/02/17(日) 00:45:33.97 ID:???
× 2. は迷惑だろ
〇 2. であることは明白だろ
155デフォルトの名無しさん
2019/02/17(日) 01:06:42.19ID:jxnSJIL4 あの?Haskellスレを荒らさないでくれますか?
関係ない話はJavaScriptスレに戻ってください
関係ない話はJavaScriptスレに戻ってください
156デフォルトの名無しさん
2019/02/17(日) 01:13:02.79ID:KFkN1Yft157デフォルトの名無しさん
2019/02/17(日) 01:15:49.49ID:jxnSJIL4 >>151は単なる質問です。
158デフォルトの名無しさん
2019/02/17(日) 01:25:17.93ID:KFkN1Yft フフッw
159デフォルトの名無しさん
2019/02/17(日) 01:47:05.17ID:bP6HzLuJ うるせ〜〜〜〜一生代入してろ
160デフォルトの名無しさん
2019/02/17(日) 03:04:30.74ID:lVDDSVXk Haskellスレ民の方々どうも!
Web制作板JavaScript質問スレにて、
https://en.wikipedia.org/wiki/Side_effect_(computer_science)
の以下の文章について…
> One common demonstration of side effect behavior is that of the assignment operator in C++.
副作用の振る舞いの一般的なデモとしては、C++の代入演算子があります。
> For example, assignment returns the right operand and has the side effect of assigning that value to a variable.
例えば代入は右オペランドを返し、かつそれと同じ値を変数に代入するという副作用を持ちます。
スレ民の叡智を結集した結果、
・C++の代入演算子は副作用があるが、JavaScriptの代入演算子は副作用がない
・[1,2,3].map(v => (v += 2, v * v));
のv += 2は主作用を使っているのであって、副作用など使っていない!
と決定しました!
パチパチパチ〜
ありがとー!!
Web制作板JavaScript質問スレにて、
https://en.wikipedia.org/wiki/Side_effect_(computer_science)
の以下の文章について…
> One common demonstration of side effect behavior is that of the assignment operator in C++.
副作用の振る舞いの一般的なデモとしては、C++の代入演算子があります。
> For example, assignment returns the right operand and has the side effect of assigning that value to a variable.
例えば代入は右オペランドを返し、かつそれと同じ値を変数に代入するという副作用を持ちます。
スレ民の叡智を結集した結果、
・C++の代入演算子は副作用があるが、JavaScriptの代入演算子は副作用がない
・[1,2,3].map(v => (v += 2, v * v));
のv += 2は主作用を使っているのであって、副作用など使っていない!
と決定しました!
パチパチパチ〜
ありがとー!!
161デフォルトの名無しさん
2019/02/17(日) 13:09:25.08ID:C3KvaR2D 初期化と代入の違いはC++でさんざんやったやつだろ
C++には遅延評価がないから余裕じゃないのか
C++には遅延評価がないから余裕じゃないのか
162デフォルトの名無しさん
2019/02/17(日) 17:34:05.11ID:HZyuZSmb runSTという魔法がある
163デフォルトの名無しさん
2019/02/20(水) 10:51:29.01ID:FaK+gznk Cのマクロ
#define fact(n) (((n)==0)?1:(n)*(fact((n)-1))
これだったら一見まともに見えて
実は無限ループする罠
fact(0)は
((0==0)?1:(0)*((((0)-1)==0)?1:((0)-1)*(....
となって無限ループ。
(ややこしいんで括弧の数とか間違って
るかもしれないけど)
C++でインライン関数で定義した場合は
論理式短絡評価で動くかもしれんが
#define fact(n) (((n)==0)?1:(n)*(fact((n)-1))
これだったら一見まともに見えて
実は無限ループする罠
fact(0)は
((0==0)?1:(0)*((((0)-1)==0)?1:((0)-1)*(....
となって無限ループ。
(ややこしいんで括弧の数とか間違って
るかもしれないけど)
C++でインライン関数で定義した場合は
論理式短絡評価で動くかもしれんが
164デフォルトの名無しさん
2019/02/20(水) 11:35:48.52ID:FaK+gznk 再帰を含む関数がインライン展開されることを
期待するほうが間違いだったか...
期待するほうが間違いだったか...
165デフォルトの名無しさん
2019/02/20(水) 11:43:51.95ID:KVaXFVJv スレチ
166デフォルトの名無しさん
2019/02/20(水) 16:55:25.36ID:xw22aw45 テンプレートメタプログラミングでもしてろクソ
167デフォルトの名無しさん
2019/02/22(金) 10:09:30.67ID:ioyynd1U 花粉の時期に入るとみんなこれやり始めるよね
168デフォルトの名無しさん
2019/02/22(金) 19:18:12.74ID:ioyynd1U だめだわからん
fold_left :: (a -> b -> a) -> a -> [b] -> a
fold_left _ a [] = a
fold_left f a (x:xs) = fold_left f (f a x) xs
リストが a1 a2 a3のとき
folder_left f (f a a1) [a2 a3]
になることはわかる
その先の展開が何時間考えてもわからん
f(f(f(a,a1),a2),a3)になるってゆーんだが
イメージに繋がらない
お前らこんな難解なの本当に使いこなせてるの?
ここまでわかりにくいと有用なのか疑わしく思えて来る
fold_left :: (a -> b -> a) -> a -> [b] -> a
fold_left _ a [] = a
fold_left f a (x:xs) = fold_left f (f a x) xs
リストが a1 a2 a3のとき
folder_left f (f a a1) [a2 a3]
になることはわかる
その先の展開が何時間考えてもわからん
f(f(f(a,a1),a2),a3)になるってゆーんだが
イメージに繋がらない
お前らこんな難解なの本当に使いこなせてるの?
ここまでわかりにくいと有用なのか疑わしく思えて来る
169デフォルトの名無しさん
2019/02/22(金) 19:43:58.95ID:LKaW/yz7 >>168
foldlなんて単なるループみたいなもんだし
今どきJavaでもやるくらい
分かるまでは変に抽象化しないで、具体例で考えるといいよ
folder_left f a [a1 a2 a3]
じゃなくて
folder_left (+) 0 [1, 2, 3]
で考えるとか
そしたら
folder_left f (f a a1) [a2, a3]は
folder_left (+) ((+) 0 1) [2, 3]になる
要は最初に
int sum = 0
for(int a : xs) sum = sum + a
と書くのと変わらない
sumへの蓄積を、変数への再代入ではなく次の関数への引数として書いてるだけ
どちらかというと、いわゆる関数型っぽいのはこういうのよりfoldrでリスト作ったりするときの方かな
foldlなんて単なるループみたいなもんだし
今どきJavaでもやるくらい
分かるまでは変に抽象化しないで、具体例で考えるといいよ
folder_left f a [a1 a2 a3]
じゃなくて
folder_left (+) 0 [1, 2, 3]
で考えるとか
そしたら
folder_left f (f a a1) [a2, a3]は
folder_left (+) ((+) 0 1) [2, 3]になる
要は最初に
int sum = 0
for(int a : xs) sum = sum + a
と書くのと変わらない
sumへの蓄積を、変数への再代入ではなく次の関数への引数として書いてるだけ
どちらかというと、いわゆる関数型っぽいのはこういうのよりfoldrでリスト作ったりするときの方かな
170デフォルトの名無しさん
2019/02/22(金) 19:47:35.11ID:ioyynd1U >>169
まったくわからない
例題載ってるとこにも似たようなことは書いてあるんだけども
ループで書くならすぐ終わる話だけど
ややこしすぎてイメージがつかめない
イメージがつかめたらその時点で理解終了なんだけど
まったくわからない
例題載ってるとこにも似たようなことは書いてあるんだけども
ループで書くならすぐ終わる話だけど
ややこしすぎてイメージがつかめない
イメージがつかめたらその時点で理解終了なんだけど
171デフォルトの名無しさん
2019/02/22(金) 19:51:15.80ID:ioyynd1U a2とa3が分離されそうなことはわかるんだけども
folder_left f (f a a1) [a2 a3]
^^^^
こいつがどこ行くのっていうのと
どこをどうやったら()で括られることになるのかイメージできない
folder_left f (f a a1) [a2 a3]
^^^^
こいつがどこ行くのっていうのと
どこをどうやったら()で括られることになるのかイメージできない
172デフォルトの名無しさん
2019/02/22(金) 20:17:22.94ID:LKaW/yz7 >>171
folder_left f (f a a1) [a2, a3]
になるところまではわかるんだよね?
そしたらまず括弧の中から先に計算するのはどの言語も普通だよね
だから先に(f a a1)の答えが出る
fは引数を2つとる関数だから、答えを出すのに支障はないよね
ここで(f a a1)の計算結果をz1としようか
そしたら上の式は
folder_left f z1 [a2, a3]になるよね?
そうすると、f、z1、[a2, a3]の3つの引数を使って、folder_leftがまた呼び出されるのがわかる?ここが再帰ね
folder_leftの定義は2つあるけど、[a2 a3]は空リスト([])じゃないから、下の
folder_left f a (x:xs)の方が呼ばれるよね?
ここでaはz1、xはa2、xsは [a3]だよね
だからベタで書くと
folder_left f (f z1 a2) [a3]になるよね?
同じように括弧の中が先に計算されるから、(f z1 a2)をz2としようか
そしたら
folder_left f z2 [a3]となる
また全く同じようにfolder_leftを呼び出すと、次は
folder_left f (f z2 a3) []となる
そして同じように(f z2 a3)をz3とすると、
folder_left f z3 []と書ける
ここでまたまたfolder_leftを呼び出してるわけだけど、最後のリストが空リストだよね
だからfolder_leftの2つの定義の内、上の方のfolder_left _ a [] = aが呼ばれる
上から順に呼び出し条件を見てるからね
ここでaはz3のことだから、最終的にz3が答えになる
じゃあz3が何かっていうと、(f z2 a3)だよね。そしてz2が何かっていうと、(f z1 a2)だよね
つまりz3は(f (f z1 a2) a3)のことだ
そして最後にz1は(f a a1)だから、結局
z3 == f (f (f a a1) a2) a3となる
これでどうだ
folder_left f (f a a1) [a2, a3]
になるところまではわかるんだよね?
そしたらまず括弧の中から先に計算するのはどの言語も普通だよね
だから先に(f a a1)の答えが出る
fは引数を2つとる関数だから、答えを出すのに支障はないよね
ここで(f a a1)の計算結果をz1としようか
そしたら上の式は
folder_left f z1 [a2, a3]になるよね?
そうすると、f、z1、[a2, a3]の3つの引数を使って、folder_leftがまた呼び出されるのがわかる?ここが再帰ね
folder_leftの定義は2つあるけど、[a2 a3]は空リスト([])じゃないから、下の
folder_left f a (x:xs)の方が呼ばれるよね?
ここでaはz1、xはa2、xsは [a3]だよね
だからベタで書くと
folder_left f (f z1 a2) [a3]になるよね?
同じように括弧の中が先に計算されるから、(f z1 a2)をz2としようか
そしたら
folder_left f z2 [a3]となる
また全く同じようにfolder_leftを呼び出すと、次は
folder_left f (f z2 a3) []となる
そして同じように(f z2 a3)をz3とすると、
folder_left f z3 []と書ける
ここでまたまたfolder_leftを呼び出してるわけだけど、最後のリストが空リストだよね
だからfolder_leftの2つの定義の内、上の方のfolder_left _ a [] = aが呼ばれる
上から順に呼び出し条件を見てるからね
ここでaはz3のことだから、最終的にz3が答えになる
じゃあz3が何かっていうと、(f z2 a3)だよね。そしてz2が何かっていうと、(f z1 a2)だよね
つまりz3は(f (f z1 a2) a3)のことだ
そして最後にz1は(f a a1)だから、結局
z3 == f (f (f a a1) a2) a3となる
これでどうだ
173デフォルトの名無しさん
2019/02/22(金) 20:22:50.89ID:ioyynd1U174デフォルトの名無しさん
2019/02/22(金) 20:30:54.11ID:LKaW/yz7 >>173
そこらへんは評価戦略の話であって別件だね
再帰の本質ではないよ
Haskellといえば遅延評価みたいなところがあるから混乱しやすいけどね
上で言うならz3こと(f (f (f a a1) a2) a3)を、最後までこの形で持って行って、最後にまとめて計算するのが遅延評価
上で書いたみたく適宜評価していくのが正格評価
Haskellだとfolder_leftは二種類あって、
遅延評価版がfoldl
正格評価版がfoldl'
ぶっちゃけ左畳み込みに関してはfoldlを使うことはない
全部foldl'でいい
そこらへんは評価戦略の話であって別件だね
再帰の本質ではないよ
Haskellといえば遅延評価みたいなところがあるから混乱しやすいけどね
上で言うならz3こと(f (f (f a a1) a2) a3)を、最後までこの形で持って行って、最後にまとめて計算するのが遅延評価
上で書いたみたく適宜評価していくのが正格評価
Haskellだとfolder_leftは二種類あって、
遅延評価版がfoldl
正格評価版がfoldl'
ぶっちゃけ左畳み込みに関してはfoldlを使うことはない
全部foldl'でいい
175デフォルトの名無しさん
2019/02/23(土) 00:41:48.52ID:RiBir1w3 カリー化関数の意図がわからん
sum_of :: (Integer -> Integer, Integer, Integer) -> Integer
sum_of (f, n, m)
| n > m = 0
| otherwise = f n + sum_of (f, n + 1, m)
これはわかる
sum_of' :: (Integer -> Integer) -> Integer -> Integer -> Integer
sum_of' f n m
| n > m = 0
| otherwise = f n + sum_of' f (n + 1) m
どう見ても書き換えただけにしか見えないんだけどこれ意味あって書いてるのかな
カリー化って引数可変で動作する関数を定義するためのものって理解したけど
後者にはそんな意図が含まれてるように見えない
sum_of :: (Integer -> Integer, Integer, Integer) -> Integer
sum_of (f, n, m)
| n > m = 0
| otherwise = f n + sum_of (f, n + 1, m)
これはわかる
sum_of' :: (Integer -> Integer) -> Integer -> Integer -> Integer
sum_of' f n m
| n > m = 0
| otherwise = f n + sum_of' f (n + 1) m
どう見ても書き換えただけにしか見えないんだけどこれ意味あって書いてるのかな
カリー化って引数可変で動作する関数を定義するためのものって理解したけど
後者にはそんな意図が含まれてるように見えない
176デフォルトの名無しさん
2019/02/23(土) 02:34:37.24ID:hS0A7KKk >>175
やってるのは数式で書くと Σ[i=n..m] f(i) か
再帰をちょっと具体的に書き下さないと何のsumかわからんかった
それで多分やりたいのは
こういう風に個別の総和関数が手軽に作れますよみたいな話だと思う
タプルで定義されてるとこういう風にはいかない
(書けないことはないけどめんどくさい)
sumOfTwice :: Integer -> Integer -> Integer
sumOfTwice = sum_of (*2)
ここで(*2)とかできるのも
(*) :: Integer -> Integer -> Integer
がカリー化されてるおかげ
こういうのを部分適用と言って可変長引数とは異なる概念
やってるのは数式で書くと Σ[i=n..m] f(i) か
再帰をちょっと具体的に書き下さないと何のsumかわからんかった
それで多分やりたいのは
こういう風に個別の総和関数が手軽に作れますよみたいな話だと思う
タプルで定義されてるとこういう風にはいかない
(書けないことはないけどめんどくさい)
sumOfTwice :: Integer -> Integer -> Integer
sumOfTwice = sum_of (*2)
ここで(*2)とかできるのも
(*) :: Integer -> Integer -> Integer
がカリー化されてるおかげ
こういうのを部分適用と言って可変長引数とは異なる概念
177デフォルトの名無しさん
2019/02/23(土) 02:59:05.43ID:RiBir1w3 >>176
(*2)の意味わからなくて前後調べたら演算子をカリー化できるとかあって
やっと意味わかったありがとう
しかも例題の先の先の方に有効な利用法書いてあったけど
なんかどうもサイトの進め方と合わないなー・・変えるかー
こんなこと書いてもなんか意味あんのだから何なんみたいな悶々パターンが多すぎる
とても簡単ですとか書いてあったら相当難しいフラグ確定
考え方が違うんだろうな
(*2)の意味わからなくて前後調べたら演算子をカリー化できるとかあって
やっと意味わかったありがとう
しかも例題の先の先の方に有効な利用法書いてあったけど
なんかどうもサイトの進め方と合わないなー・・変えるかー
こんなこと書いてもなんか意味あんのだから何なんみたいな悶々パターンが多すぎる
とても簡単ですとか書いてあったら相当難しいフラグ確定
考え方が違うんだろうな
178デフォルトの名無しさん
2019/02/23(土) 06:50:54.90ID:T/+XuHA6 考え方を変えるのが関数型を学ぶ一番の目的だと思うけど、
合わないなら関数型あきらめればいいじゃん。
うちは論理型言語に全く馴染めなくて、それに時間使うのやめた。
合わないなら関数型あきらめればいいじゃん。
うちは論理型言語に全く馴染めなくて、それに時間使うのやめた。
179デフォルトの名無しさん
2019/02/23(土) 10:50:43.56ID:7gjHPQsv そうじゃない
人を信じるのをあきらめて嘘を嘘と批判する
とても簡単ですと言った奴は嘘つきのクズであると
人を信じるのをあきらめて嘘を嘘と批判する
とても簡単ですと言った奴は嘘つきのクズであると
180デフォルトの名無しさん
2019/02/23(土) 13:04:48.43ID:RiBir1w3 しかしいいサイト全然ないなどうしたもんか
お前らどうやって習得したのよこんな難解な言語
お前らどうやって習得したのよこんな難解な言語
181デフォルトの名無しさん
2019/02/23(土) 13:35:58.14ID:7gjHPQsv 例えばC#とF#の考え方は変わらないし
考え方を変えるというのも嘘だな
嘘に気付くのに1日かかるやつと5年以上かかるやつの差は大きい
考え方を変えるというのも嘘だな
嘘に気付くのに1日かかるやつと5年以上かかるやつの差は大きい
182デフォルトの名無しさん
2019/02/23(土) 14:01:38.38ID:E9HQXzXo >嘘に気付くのに
ひどい世の中だな
ひどい世の中だな
183デフォルトの名無しさん
2019/02/23(土) 17:11:04.23ID:RiBir1w3 Prelude> let foo n = ¥x -> x * n
Prelude> :t foo
foo :: Num a => a -> a -> a
Prelude> let foo10 = foo 10
Prelude> :t foo10
foo10 :: Integer -> Integer
Prelude> foo10 10
100
Prelude> foo10 20
200
Prelude> let foo100 = foo 100
Prelude> foo100 10
1000
Prelude> foo100 20
2000
Prelude> let foo5 = foo 5
Prelude> foo5 10
50
Prelude> foo5 20
100
Prelude> :t foo (1.234 :: Double)
foo (1.234 :: Double) :: Double -> Double
Prelude> :t foo
foo :: Num a => a -> a -> a
Prelude> let foo10 = foo 10
Prelude> :t foo10
foo10 :: Integer -> Integer
Prelude> foo10 10
100
Prelude> foo10 20
200
Prelude> let foo100 = foo 100
Prelude> foo100 10
1000
Prelude> foo100 20
2000
Prelude> let foo5 = foo 5
Prelude> foo5 10
50
Prelude> foo5 20
100
Prelude> :t foo (1.234 :: Double)
foo (1.234 :: Double) :: Double -> Double
184デフォルトの名無しさん
2019/02/23(土) 17:12:26.05ID:RiBir1w3 >>183のクロージャの説明がさっぱりわからない
関数を生成する関数を簡単に作ることができるって言ってるんだけど
やってることは定義を繰り返してるだけでちっとも生成してない
どういう意味で関数を生成したって言ってるんだろ・・
Stringで関数生成してevalで評価しましただったらわかるんだけど、これ違うよね
それともhaskellの場合は関数定義は関数生成としているのか・・わからん
一体これは何が言いたいのか・・
実はどうでもいいことで気にしなくてもいいなら納得するんだけども
関数を生成する関数を簡単に作ることができるって言ってるんだけど
やってることは定義を繰り返してるだけでちっとも生成してない
どういう意味で関数を生成したって言ってるんだろ・・
Stringで関数生成してevalで評価しましただったらわかるんだけど、これ違うよね
それともhaskellの場合は関数定義は関数生成としているのか・・わからん
一体これは何が言いたいのか・・
実はどうでもいいことで気にしなくてもいいなら納得するんだけども
185デフォルトの名無しさん
2019/02/23(土) 17:31:29.38ID:YUL1Jv8G 前スレに比べて明らかに初心者が多いのは何故だ
186デフォルトの名無しさん
2019/02/23(土) 17:37:12.35ID:5fn4St+r またHaskellのせいにしてるの?
以下は同等のJavaScriptだけど。
let foo = n => x => x * n;
let foo10 = foo(10);
foo10(10);
//=> 100
foo10(20);
//=> 200
let foo100 = foo(100);
foo100(10);
//=> 1000
foo100(20);
//=> 2000
let foo5 = foo(5);
foo5(10);
//=> 50
foo5(20);
//=> 100
てか何の言語なら知ってるんだっけ?
以下は同等のJavaScriptだけど。
let foo = n => x => x * n;
let foo10 = foo(10);
foo10(10);
//=> 100
foo10(20);
//=> 200
let foo100 = foo(100);
foo100(10);
//=> 1000
foo100(20);
//=> 2000
let foo5 = foo(5);
foo5(10);
//=> 50
foo5(20);
//=> 100
てか何の言語なら知ってるんだっけ?
187デフォルトの名無しさん
2019/02/23(土) 17:46:51.51ID:RiBir1w3 >>186
そうじゃなくてこれ関数定義だけで生成なんかしてないよね?って話
ぱっと見パスしてもいいようなどうでもいいことにも見える
そうであれば次に行く
どうもHaskellは納得いかないことがあまりにも多いんだ
文化の違いなのか考え方の違いなのかわからんけど
CかObj-CかSmalltalk-80/VisualWorksで
そうじゃなくてこれ関数定義だけで生成なんかしてないよね?って話
ぱっと見パスしてもいいようなどうでもいいことにも見える
そうであれば次に行く
どうもHaskellは納得いかないことがあまりにも多いんだ
文化の違いなのか考え方の違いなのかわからんけど
CかObj-CかSmalltalk-80/VisualWorksで
188デフォルトの名無しさん
2019/02/23(土) 17:59:11.82ID:5fn4St+r Cは実行時関数生成能力ないから仕方ないけど…
let foo10 = foo 10
は関数を返す関数fooに10を渡して、
関数(¥x -> x * 10)を得て(これが、ここが「生成」)
それにfoo10って名前を付けてるって理解は無理?
あなたこれまでに¥x -> x * 10って関数定義した覚えある?書いた覚えがあるのは¥x -> x * nでしょ?
まあ次行け次。
let foo10 = foo 10
は関数を返す関数fooに10を渡して、
関数(¥x -> x * 10)を得て(これが、ここが「生成」)
それにfoo10って名前を付けてるって理解は無理?
あなたこれまでに¥x -> x * 10って関数定義した覚えある?書いた覚えがあるのは¥x -> x * nでしょ?
まあ次行け次。
189デフォルトの名無しさん
2019/02/23(土) 18:05:45.67ID:RiBir1w3190デフォルトの名無しさん
2019/02/23(土) 18:08:48.44ID:7gjHPQsv C++だったらtemplate引数として渡したら定義で、コンストラクタに渡したら生成
静的と動的がわかるのが前提だからわからないならpythonかjavascriptから始めるべき
静的と動的がわかるのが前提だからわからないならpythonかjavascriptから始めるべき
191デフォルトの名無しさん
2019/02/23(土) 18:12:36.80ID:RiBir1w3192デフォルトの名無しさん
2019/02/23(土) 18:18:49.99ID:5fn4St+r >>189
> foo10は結局のところ ¥x->x*n を呼び出してるだけじゃないの?
Prelude> foo10 10
100
とかのこと言ってるんなら
let foo10 = foo 10
で生成した関数(¥x -> x * 10)を呼び出してるつまり
(¥x -> x * 10) 10
100
> ¥x->x*10って関数を生成してないよね?
してるよ
let foo10 = foo 10 の foo 10の部分で。
(生成のタイミングは今回置いとくとして)
> foo10は結局のところ ¥x->x*n を呼び出してるだけじゃないの?
Prelude> foo10 10
100
とかのこと言ってるんなら
let foo10 = foo 10
で生成した関数(¥x -> x * 10)を呼び出してるつまり
(¥x -> x * 10) 10
100
> ¥x->x*10って関数を生成してないよね?
してるよ
let foo10 = foo 10 の foo 10の部分で。
(生成のタイミングは今回置いとくとして)
193デフォルトの名無しさん
2019/02/23(土) 18:28:43.67ID:RiBir1w3194デフォルトの名無しさん
2019/02/23(土) 18:29:48.03ID:7gjHPQsv templateとコンストラクタとメソッドの考え方
関数と関数と関数の考え方
変わったのは見た目だけ
関数と関数と関数の考え方
変わったのは見た目だけ
195デフォルトの名無しさん
2019/02/23(土) 18:33:42.53ID:RiBir1w3 >>194
C++は全く知らないのでそっちはなんとも
C++は全く知らないのでそっちはなんとも
196デフォルトの名無しさん
2019/02/23(土) 18:51:02.51ID:RiBir1w3 早速詰まった何を言ってるのかわからん
一般に、関数を呼び出す場合、関数を評価するための環境は空リストです。
最初に、引数がこの環境に追加されます。let で定義される局所変数もこの環境に追加されます。
もしも、環境に該当する変数が存在しない場合は大域変数を参照します。
たとえば、foo 5 と呼び出すと環境は次のようになります。
foo 5 ==> 環境 : [(n, 5)]
ghciで実行
Prelude> let foo n = ¥x -> x * n
Prelude> foo 5
<interactive>:2:1: error:
• No instance for (Show (Integer -> Integer))
arising from a use of ‘print’
(maybe you haven't applied a function to enough arguments?)
• In a stmt of an interactive GHCi command: print it
Prelude>
そりゃそうだよねぇ・・
なんなんだろう何が言いたいのかさっぱりわからない
本当にこんな説明でみんな理解してったの?
一般に、関数を呼び出す場合、関数を評価するための環境は空リストです。
最初に、引数がこの環境に追加されます。let で定義される局所変数もこの環境に追加されます。
もしも、環境に該当する変数が存在しない場合は大域変数を参照します。
たとえば、foo 5 と呼び出すと環境は次のようになります。
foo 5 ==> 環境 : [(n, 5)]
ghciで実行
Prelude> let foo n = ¥x -> x * n
Prelude> foo 5
<interactive>:2:1: error:
• No instance for (Show (Integer -> Integer))
arising from a use of ‘print’
(maybe you haven't applied a function to enough arguments?)
• In a stmt of an interactive GHCi command: print it
Prelude>
そりゃそうだよねぇ・・
なんなんだろう何が言いたいのかさっぱりわからない
本当にこんな説明でみんな理解してったの?
197デフォルトの名無しさん
2019/02/23(土) 19:26:38.79ID:hS0A7KKk >>196
そこクロージャの説明のとこでしょ? 読み飛ばしていいと思うよ
手元にHaskellの入門書何冊かあるけど目次や索引にクロージャ無いし
純粋関数型言語でありデフォルトで関数がカリー化されているHaskellに
クロージャとかいう概念は別に要らないと思う
部分適用便利だねってことがわかればおk
そこクロージャの説明のとこでしょ? 読み飛ばしていいと思うよ
手元にHaskellの入門書何冊かあるけど目次や索引にクロージャ無いし
純粋関数型言語でありデフォルトで関数がカリー化されているHaskellに
クロージャとかいう概念は別に要らないと思う
部分適用便利だねってことがわかればおk
198デフォルトの名無しさん
2019/02/23(土) 19:34:16.40ID:RiBir1w3199デフォルトの名無しさん
2019/02/23(土) 20:14:35.45ID:RiBir1w3 データ型の定義まで来た
なんというかやっぱりこのサイトこれからhaskell入門の人にはどうでもいい余計なこと書きすぎなんじゃ・・
と思った
なんというかやっぱりこのサイトこれからhaskell入門の人にはどうでもいい余計なこと書きすぎなんじゃ・・
と思った
200デフォルトの名無しさん
2019/02/23(土) 21:08:00.52ID:RiBir1w3 do構文がIO型だからこのように書ける・・というのがどうもしっくりこないけど
都合上こうするしかなかったってだけの話で特別な意味はないのかな
calc :: IO ()
calc = do
putStr "Input Integer1 > "
x <- readLn :: IO Integer
putStr "Input Integer2 > "
y <- readLn :: IO Integer
let a = x + y
b = x - y
c = x * y
d = x `div` y
n1 = show x
n2 = show y
putStrLn (n1 ++ "+" ++ n2 ++ "=" ++ show a)
putStrLn (n1 ++ "-" ++ n2 ++ "=" ++ show b)
putStrLn (n1 ++ "*" ++ n2 ++ "=" ++ show c)
putStrLn (n1 ++ "/" ++ n2 ++ "=" ++ show d)
都合上こうするしかなかったってだけの話で特別な意味はないのかな
calc :: IO ()
calc = do
putStr "Input Integer1 > "
x <- readLn :: IO Integer
putStr "Input Integer2 > "
y <- readLn :: IO Integer
let a = x + y
b = x - y
c = x * y
d = x `div` y
n1 = show x
n2 = show y
putStrLn (n1 ++ "+" ++ n2 ++ "=" ++ show a)
putStrLn (n1 ++ "-" ++ n2 ++ "=" ++ show b)
putStrLn (n1 ++ "*" ++ n2 ++ "=" ++ show c)
putStrLn (n1 ++ "/" ++ n2 ++ "=" ++ show d)
201デフォルトの名無しさん
2019/02/23(土) 21:24:41.95ID:24PtBhaW202デフォルトの名無しさん
2019/02/23(土) 21:25:53.99ID:RiBir1w3 納得しないと進まないタイプなので
203デフォルトの名無しさん
2019/02/23(土) 21:31:22.65ID:24PtBhaW204デフォルトの名無しさん
2019/02/23(土) 21:37:05.47ID:wr+1lm8V 読んでいるサイトが悪いのではないかなあ
すごいH本とか
HaskellではなくてOcamlだけど浅井『プログラミングの基礎』とかを読んだ方が
良いレベルだと思う
すごいH本とか
HaskellではなくてOcamlだけど浅井『プログラミングの基礎』とかを読んだ方が
良いレベルだと思う
205デフォルトの名無しさん
2019/02/24(日) 01:39:36.53ID:qI0VELUi >>200
do は (>>=) の糖衣構文 (=分かりやすく見やすくするための別記法) なので最終的にはモナドと (>>=) を理解するまではしっくりこない。
https://qiita.com/saltheads/items/6025f69ba10267bbe3ee
do は (>>=) の糖衣構文 (=分かりやすく見やすくするための別記法) なので最終的にはモナドと (>>=) を理解するまではしっくりこない。
https://qiita.com/saltheads/items/6025f69ba10267bbe3ee
206デフォルトの名無しさん
2019/02/24(日) 01:52:29.83ID:BExwBIrb 最終的に>>=演算子オーバーロードを理解する頃には難易度がC++と同じ
207デフォルトの名無しさん
2019/02/24(日) 11:45:28.69ID:mBeDvEXM208デフォルトの名無しさん
2019/02/25(月) 13:11:14.94ID:EIUHHo5S haskellのGUIは何が主流なの
gtkじゃネイティブUIに見えないからqtahとか?
もしくはhaskellではGUIを扱わないとか?
gtkじゃネイティブUIに見えないからqtahとか?
もしくはhaskellではGUIを扱わないとか?
209デフォルトの名無しさん
2019/02/25(月) 21:33:28.52ID:jyEH5AtM 趣味でやってるが Threepenny 使ってる
簡単に組み合わせられるようになるかなと
Elm も学習中
簡単に組み合わせられるようになるかなと
Elm も学習中
210デフォルトの名無しさん
2019/02/26(火) 21:42:21.10ID:DUz4HSDe 書籍「Thinking with Types」の第1章をサンプルPDF版で読んでいるのですが、
19ページ目の Exercise 1.4-i でつまずいています。
数式 (a^b)^c と a^(b*c) が等しいことを Curry-Howard isomorphism を使って証明する問題ですが、
これは、
to :: (b -> c -> a) -> (b, c) -> a
from :: ((b, c) -> a) -> b -> c -> a
という型の Haskell の関数を見つけよ、と言うことですよね。
しかし、問題文に書かれている
to . from = id
from . to = id
の意味が分かりません。
to . from の型も from . to の型も共に id の型とは等しくないと思うのですが・・・
19ページ目の Exercise 1.4-i でつまずいています。
数式 (a^b)^c と a^(b*c) が等しいことを Curry-Howard isomorphism を使って証明する問題ですが、
これは、
to :: (b -> c -> a) -> (b, c) -> a
from :: ((b, c) -> a) -> b -> c -> a
という型の Haskell の関数を見つけよ、と言うことですよね。
しかし、問題文に書かれている
to . from = id
from . to = id
の意味が分かりません。
to . from の型も from . to の型も共に id の型とは等しくないと思うのですが・・・
211デフォルトの名無しさん
2019/02/26(火) 21:57:34.53ID:PosTOau2 to :: (b -> c -> a) -> ((b, c) -> a)
from :: ((b, c) -> a) -> (b -> c -> a)
from :: ((b, c) -> a) -> (b -> c -> a)
212デフォルトの名無しさん
2019/02/27(水) 01:02:26.71ID:2D6fGXPQ Haskellにはファーストクラス多相関数がないから
idの型は単相なんだろう
単相のidという名前の同音異義語がちょっと多すぎるだけ
idの型は単相なんだろう
単相のidという名前の同音異義語がちょっと多すぎるだけ
213デフォルトの名無しさん
2019/02/27(水) 02:05:02.68ID:kdg0sG7A >>209
思い出して今日発売のelm本、買おうかなと思ったら尼で売り切れててワロた。
思い出して今日発売のelm本、買おうかなと思ったら尼で売り切れててワロた。
214デフォルトの名無しさん
2019/02/28(木) 17:06:29.75ID:W9NOQ7xg 下記の2つの関数の rank について
関数 f は rank 2、関数 g は rank 3 で合ってる?
f :: a -> (forall b. b -> c)
g :: a -> (forall b. b -> c) -> d
関数 f は rank 2、関数 g は rank 3 で合ってる?
f :: a -> (forall b. b -> c)
g :: a -> (forall b. b -> c) -> d
215デフォルトの名無しさん
2019/03/03(日) 20:55:07.64ID:/obVPbHS216デフォルトの名無しさん
2019/03/03(日) 22:40:24.54ID:iXSrdfon 条件を満たす限り畳み込むfoldWhileみたいな関数がないのはなぜ?
scanとtakeWhileで出来なくもないけど無駄なリストが生成されちゃうよね
scanとtakeWhileで出来なくもないけど無駄なリストが生成されちゃうよね
217デフォルトの名無しさん
2019/03/04(月) 10:06:50.76ID:P5wfz8lO scanした後はlast.takeWhileとかだと思いますがfusionされるので作られません
218デフォルトの名無しさん
2019/03/04(月) 11:18:43.16ID:yQsTNF7X219デフォルトの名無しさん
2019/03/09(土) 09:51:28.74ID:KBqn1KqM haskell入門ほぼ読んだけどちょっと物足りなくてもうすこしhaskell勉強したい欲がある(目的は競プロとか月並みにaiとか)
なんかええ本ある? 数学の高速なライブラリとか圏論、モナドの解説あるやつで(数学は拒絶反応しない)
get programming with haskellとか並行並列とか多少気になってるけどどう?
なんかええ本ある? 数学の高速なライブラリとか圏論、モナドの解説あるやつで(数学は拒絶反応しない)
get programming with haskellとか並行並列とか多少気になってるけどどう?
220デフォルトの名無しさん
2019/03/09(土) 10:30:48.34ID:Vn/el/At 初心者を抜けた後、実践へ進みたいのなら幾つか勧められる本はある。
しかし、更なる勉強がしたいのなら、勧められる本はない。
初心者用か、初心者を抜けたばかりの者にはまだ難しい本しかない。
特に君の目的(競プロやAI)に叶う本は今のところ皆無だ。
なので、ネットを漁れ。
あと質問がやや曖昧で、何を求めているのか分からん。
数学の高速なライブラリの何を求めてる?
それを自作できる知識なのか?
活用する知識なのか?
もしくは、仕組みが知りたい具体的なライブラリでもあるのか?
圏論やモナドにしても然り。
それらの何が知りたいのか具体的に言ってみ。
しかし、更なる勉強がしたいのなら、勧められる本はない。
初心者用か、初心者を抜けたばかりの者にはまだ難しい本しかない。
特に君の目的(競プロやAI)に叶う本は今のところ皆無だ。
なので、ネットを漁れ。
あと質問がやや曖昧で、何を求めているのか分からん。
数学の高速なライブラリの何を求めてる?
それを自作できる知識なのか?
活用する知識なのか?
もしくは、仕組みが知りたい具体的なライブラリでもあるのか?
圏論やモナドにしても然り。
それらの何が知りたいのか具体的に言ってみ。
221デフォルトの名無しさん
2019/03/09(土) 11:02:47.64ID:KBqn1KqM >>220
具体的には数学書のような理論本ですね 今のところ全然数学臭さがないので(コンピュータとは乖離してるかもしれないけど)
速度に関しては、命令型の書き方でないのでどうすれば速度が出る書き方が出来るかが一番興味あります
ai,競プロはやるとしたときの足掛かりが気になりました
このみっつのどれかが掘り下げられれば幸いです。
具体的には数学書のような理論本ですね 今のところ全然数学臭さがないので(コンピュータとは乖離してるかもしれないけど)
速度に関しては、命令型の書き方でないのでどうすれば速度が出る書き方が出来るかが一番興味あります
ai,競プロはやるとしたときの足掛かりが気になりました
このみっつのどれかが掘り下げられれば幸いです。
222デフォルトの名無しさん
2019/03/09(土) 11:19:03.37ID:SKFKP+LU THUNKとかWHNFとかだろうけど
俺もここら辺の本とかあるなら読んでみたい
俺もここら辺の本とかあるなら読んでみたい
223デフォルトの名無しさん
2019/03/09(土) 11:28:44.92ID:Vn/el/At >>221
「数学書のような理論本」 悪いが意味が分からん。
具体的に「何が知りたいのか」を言ってくれ。
理論と言うのが大雑派すぎる。
速度を上げる方法を学びたいのなら、
・Haskell High Performance Programming
・関数プログラミング 珠玉のアルゴリズムデザイン
この2つが正にうってつけだが、
「Haskell入門をほぼ読んだ」段階では挫折しそう。
AI や競プロは前レスでも言ったが本は無い。
AI は reinforcement leaning や deep leaning など技術範囲を絞ったワードと
haskell を組み合わせたキーワードでネット検索。
競プロは実際の競技で提出されたソースをたくさん読んで真似しろ。
「数学書のような理論本」 悪いが意味が分からん。
具体的に「何が知りたいのか」を言ってくれ。
理論と言うのが大雑派すぎる。
速度を上げる方法を学びたいのなら、
・Haskell High Performance Programming
・関数プログラミング 珠玉のアルゴリズムデザイン
この2つが正にうってつけだが、
「Haskell入門をほぼ読んだ」段階では挫折しそう。
AI や競プロは前レスでも言ったが本は無い。
AI は reinforcement leaning や deep leaning など技術範囲を絞ったワードと
haskell を組み合わせたキーワードでネット検索。
競プロは実際の競技で提出されたソースをたくさん読んで真似しろ。
224デフォルトの名無しさん
2019/03/09(土) 11:50:40.66ID:KBqn1KqM225デフォルトの名無しさん
2019/03/09(土) 13:09:34.75ID:HqfcKPNw 競プロにHaskellはどうなんだ…?
良くわからんけどSTモナド使いまくる感じになるのかな
あるいは珠玉のアルゴリズムを理解仕切った超人達の集まりなのか
良くわからんけどSTモナド使いまくる感じになるのかな
あるいは珠玉のアルゴリズムを理解仕切った超人達の集まりなのか
226デフォルトの名無しさん
2019/03/09(土) 13:43:47.24ID:w1EXpOnc >>221,223
珠玉のアルゴリズムデザインへの入門としては同じ著者の
『Haskellによる関数プログラミングの思考法』
(旧版名は『関数プログラミング入門 ―Haskellで学ぶ原理と技法―』)
がいいと思う
他の入門書よりは数学色が強いし
等式変形によって効率を改善していく運算も割と丁寧に扱っていると思う
あとは『純粋関数型データ構造』とかも参考になるかも?
ただ競プロならSTRefとかSTUArrayとかに習熟するほうが
手っ取り早いし有力かも
珠玉のアルゴリズムデザインへの入門としては同じ著者の
『Haskellによる関数プログラミングの思考法』
(旧版名は『関数プログラミング入門 ―Haskellで学ぶ原理と技法―』)
がいいと思う
他の入門書よりは数学色が強いし
等式変形によって効率を改善していく運算も割と丁寧に扱っていると思う
あとは『純粋関数型データ構造』とかも参考になるかも?
ただ競プロならSTRefとかSTUArrayとかに習熟するほうが
手っ取り早いし有力かも
227デフォルトの名無しさん
2019/03/09(土) 13:49:45.09ID:Vn/el/At >>225 >>226
例えば AtCoder の参加者のコードを見てみると分かるが、
STモナドなんて使ってるヤツはいない。
そもそも、haskell に慣れたら、STモナドなんて使いにくいだけだろ。
競プロみたいな短く速いコードを書く必要があるなら尚更。
珠玉本を理解しきった者かどうかは知らんが、
極端に短いコードで解いてくるヤツは、
どちらかといえば数学の知識が豊富なんじゃないかな。
問題文を数学の世界に落とし込む事に長けているように見える。
コンテストにもよるが、競技プログラミングは
個人的にはアルゴリズム力よりも数学力がより大事だと思ってる。
例えば Project Euler の高番号問題をシンプルに解けるヤツは競技も強そう。
例えば AtCoder の参加者のコードを見てみると分かるが、
STモナドなんて使ってるヤツはいない。
そもそも、haskell に慣れたら、STモナドなんて使いにくいだけだろ。
競プロみたいな短く速いコードを書く必要があるなら尚更。
珠玉本を理解しきった者かどうかは知らんが、
極端に短いコードで解いてくるヤツは、
どちらかといえば数学の知識が豊富なんじゃないかな。
問題文を数学の世界に落とし込む事に長けているように見える。
コンテストにもよるが、競技プログラミングは
個人的にはアルゴリズム力よりも数学力がより大事だと思ってる。
例えば Project Euler の高番号問題をシンプルに解けるヤツは競技も強そう。
228デフォルトの名無しさん
2019/03/09(土) 15:47:05.82ID:KBqn1KqM229デフォルトの名無しさん
2019/03/09(土) 20:50:02.63ID:2ErVpr0y 珠玉本難解すぎる
登場する学生達が天才過ぎる
登場する学生達が天才過ぎる
230デフォルトの名無しさん
2019/03/10(日) 04:06:11.50ID:0rKUQSsg >>229
それでも理解したいのなら質問すればいい
それでも理解したいのなら質問すればいい
231デフォルトの名無しさん
2019/03/14(木) 01:49:52.87ID:pUnQtnNt instance head ってよく聞くけど、
これは instance 宣言のどの部分のこと?
例えば次の宣言の場合
instance (Foo a) => Bar (Baz a b) | a -> b where
・(Foo a)
・Bar (Baz a b)
・Bar (Baz a b) | a -> b
・instance キーワードと where キーワードの間の全部
・その他
どれ?
これは instance 宣言のどの部分のこと?
例えば次の宣言の場合
instance (Foo a) => Bar (Baz a b) | a -> b where
・(Foo a)
・Bar (Baz a b)
・Bar (Baz a b) | a -> b
・instance キーワードと where キーワードの間の全部
・その他
どれ?
232デフォルトの名無しさん
2019/03/14(木) 02:00:29.34ID:pUnQtnNt >>231
すまん、instance 宣言に関数従属は無いよな。
改めて、
instance (Foo a) => Bar (Baz a) where
この例だとどこが instance head なんだ?
すまん、instance 宣言に関数従属は無いよな。
改めて、
instance (Foo a) => Bar (Baz a) where
この例だとどこが instance head なんだ?
233デフォルトの名無しさん
2019/03/14(木) 08:32:21.91ID:pUnQtnNt234デフォルトの名無しさん
2019/03/20(水) 22:23:43.02ID:GM5azBbl HaskellのGUI(Gtk2hs)でカウンター作ってみた。
import Graphics.UI.Gtk
main = do
initGUI
window <- windowNew
set window [windowTitle := "counter", containerBorderWidth := 10]
mainbox <- vBoxNew True 5
containerAdd window mainbox
label <- labelNewWithMnemonic "0"
boxPackStart mainbox label PackNatural 0
countbtn <- buttonNewWithLabel "Count"
clrbtn <- buttonNewWithLabel "Clear"
boxPackStart mainbox countbtn PackNatural 0
boxPackEnd mainbox clrbtn PackNatural 0
widgetShowAll window
onClicked countbtn (labelGetLabel label >>= \n -> labelSetText label (show (1 + (read n))))
onClicked clrbtn (labelSetText label "0")
onDestroy window mainQuit
mainGUI
import Graphics.UI.Gtk
main = do
initGUI
window <- windowNew
set window [windowTitle := "counter", containerBorderWidth := 10]
mainbox <- vBoxNew True 5
containerAdd window mainbox
label <- labelNewWithMnemonic "0"
boxPackStart mainbox label PackNatural 0
countbtn <- buttonNewWithLabel "Count"
clrbtn <- buttonNewWithLabel "Clear"
boxPackStart mainbox countbtn PackNatural 0
boxPackEnd mainbox clrbtn PackNatural 0
widgetShowAll window
onClicked countbtn (labelGetLabel label >>= \n -> labelSetText label (show (1 + (read n))))
onClicked clrbtn (labelSetText label "0")
onDestroy window mainQuit
mainGUI
235デフォルトの名無しさん
2019/03/20(水) 22:24:12.70ID:GM5azBbl label <- labelNewWithMnemonic "0"
boxPackStart mainbox label PackNatural 0
countbtn <- buttonNewWithLabel "Count"
clrbtn <- buttonNewWithLabel "Clear"
boxPackStart mainbox countbtn PackNatural 0
boxPackEnd mainbox clrbtn PackNatural 0
widgetShowAll window
onClicked countbtn (labelGetLabel label >>= \n -> labelSetText label (show (1 + (read n))))
onClicked clrbtn (labelSetText label "0")
onDestroy window mainQuit
mainGUI
boxPackStart mainbox label PackNatural 0
countbtn <- buttonNewWithLabel "Count"
clrbtn <- buttonNewWithLabel "Clear"
boxPackStart mainbox countbtn PackNatural 0
boxPackEnd mainbox clrbtn PackNatural 0
widgetShowAll window
onClicked countbtn (labelGetLabel label >>= \n -> labelSetText label (show (1 + (read n))))
onClicked clrbtn (labelSetText label "0")
onDestroy window mainQuit
mainGUI
236デフォルトの名無しさん
2019/03/20(水) 22:24:33.45ID:GM5azBbl boxPackStart mainbox countbtn PackNatural 0
boxPackEnd mainbox clrbtn PackNatural 0
widgetShowAll window
onClicked countbtn (labelGetLabel label >>= \n -> labelSetText label (show (1 + (read n))))
onClicked clrbtn (labelSetText label "0")
onDestroy window mainQuit
mainGUI
boxPackEnd mainbox clrbtn PackNatural 0
widgetShowAll window
onClicked countbtn (labelGetLabel label >>= \n -> labelSetText label (show (1 + (read n))))
onClicked clrbtn (labelSetText label "0")
onDestroy window mainQuit
mainGUI
237デフォルトの名無しさん
2019/03/21(木) 05:11:02.25ID:EnD5r7yP コマンドラインでエンターを押すごとに数字が増えていく(Ctrl+C押すまで止まらない)
Haskellコード
main = mapM_ (\n -> print n >> getLine) [0..]
out:
0
1
2
3
4
Haskellコード
main = mapM_ (\n -> print n >> getLine) [0..]
out:
0
1
2
3
4
238デフォルトの名無しさん
2019/03/21(木) 22:17:24.35ID:2nCrXVEC 急にどしたんww
gtk2hsのドキュメントがHackageから消えてるのは気のせい?
gtk2hsのドキュメントがHackageから消えてるのは気のせい?
239デフォルトの名無しさん
2019/03/21(木) 22:23:19.66ID:NO+0ze73 なかなかGHC8.8出ないね
240デフォルトの名無しさん
2019/03/21(木) 23:42:33.25ID:42YMN3yF 無限ポップアップ上げるやつ現れないとは高尚なスレ
リストで遅延評価使うのがなかなかハスケルっぽい
リストで遅延評価使うのがなかなかハスケルっぽい
241デフォルトの名無しさん
2019/03/22(金) 06:11:43.80ID:t/nkQ3ne 一応、カウンターみたいなのは純粋関数型言語には作れない言われてたから、作ってみた。
確かにi++みたいな事は出来ないが、違う方法で参照透明性を確保しつつ実現出来ると実感。
(個人的にHaskellには副作用はあると考えているが、参照透明性は崩れないとも考えている)
確かにi++みたいな事は出来ないが、違う方法で参照透明性を確保しつつ実現出来ると実感。
(個人的にHaskellには副作用はあると考えているが、参照透明性は崩れないとも考えている)
242デフォルトの名無しさん
2019/03/22(金) 07:23:09.19ID:hntcvuv1 そりゃ副作用はあるよ。
じゃなきゃIO処理できない。
haskell の特徴は純粋な関数から副作用のある関数を呼べないこと。
じゃなきゃIO処理できない。
haskell の特徴は純粋な関数から副作用のある関数を呼べないこと。
243デフォルトの名無しさん
2019/03/22(金) 07:32:41.43ID:t/nkQ3ne うい。
そう言う仕組みになってるくせに、IOな関数も扱いとしては純粋な関数と同じ扱いなのが気に入ってます。
(型に気をつけていれば自然とそうなるし、普通にprint関数と純粋関数を関数合成出来るのが好き)
そう言う仕組みになってるくせに、IOな関数も扱いとしては純粋な関数と同じ扱いなのが気に入ってます。
(型に気をつけていれば自然とそうなるし、普通にprint関数と純粋関数を関数合成出来るのが好き)
244デフォルトの名無しさん
2019/03/22(金) 07:54:45.66ID:chPt0Ign 純粋関数型言語でカウンタが作れないというのは、
同じ関数を呼び出した結果がカウントアップされるような関数のこと。
pythonで書くとこんな感じ。
>>> def create_counter():
n = 0
def counter():
nonlocal n
n += 1
return n
return counter
>>> counter = create_counter()
>>> counter()
1
>>> counter()
2
同じ関数を呼び出した結果がカウントアップされるような関数のこと。
pythonで書くとこんな感じ。
>>> def create_counter():
n = 0
def counter():
nonlocal n
n += 1
return n
return counter
>>> counter = create_counter()
>>> counter()
1
>>> counter()
2
245デフォルトの名無しさん
2019/03/22(金) 08:09:16.10ID:t/nkQ3ne >>244
そうなんですが、純粋関数型言語の場合、その関数を何回呼び出したのかカウントする関数を作るみたいな視点の切り替えで対処するのではと。
つまり自身のファイルを読み込んで自身(counter関数)を
a = counter
b = counter
a = 1
b = 2
に置き換える関数なら作れます。
欲しいのは結果であり、動作ではなく結果が同じなら良いと言う解釈です。
そうなんですが、純粋関数型言語の場合、その関数を何回呼び出したのかカウントする関数を作るみたいな視点の切り替えで対処するのではと。
つまり自身のファイルを読み込んで自身(counter関数)を
a = counter
b = counter
a = 1
b = 2
に置き換える関数なら作れます。
欲しいのは結果であり、動作ではなく結果が同じなら良いと言う解釈です。
246デフォルトの名無しさん
2019/03/22(金) 10:06:06.24ID:t/nkQ3ne 終了やカウントクリアに対応してみた。
import System.Exit
main = do putStrLn "quit code is 'q', count clear code 'c'"
mapM_ (\n -> print n >> getLine >>= f) [0..]
f "quit" = exitWith ExitSuccess
f "clear" = main
f _ = return ()
import System.Exit
main = do putStrLn "quit code is 'q', count clear code 'c'"
mapM_ (\n -> print n >> getLine >>= f) [0..]
f "quit" = exitWith ExitSuccess
f "clear" = main
f _ = return ()
247デフォルトの名無しさん
2019/03/22(金) 11:13:34.22ID:RqYJx/o4 副作用もカウンタもGUIもHaskellでできる (Haskellで作れるとは言っていない)
248デフォルトの名無しさん
2019/03/22(金) 14:11:11.50ID:t/nkQ3ne まあ要はcounter関数はswap関数と同じですよ。
手続き型言語ではソートや繰り返しに必須ですが、関数型言語で各種ソート作る時にswap関数は使った事がない。
木を見て森を見ずというか、counter関数を何に使うの?って話で、カウンターとしての用途なら再帰関数の引数でf (x + 1)とか渡せば良いだけですし。
loop10 n | n > 10 = return ()
loop10 n = print n >> getLine >> loop10 (n + 1)
手続き型言語ではソートや繰り返しに必須ですが、関数型言語で各種ソート作る時にswap関数は使った事がない。
木を見て森を見ずというか、counter関数を何に使うの?って話で、カウンターとしての用途なら再帰関数の引数でf (x + 1)とか渡せば良いだけですし。
loop10 n | n > 10 = return ()
loop10 n = print n >> getLine >> loop10 (n + 1)
249デフォルトの名無しさん
2019/03/22(金) 14:35:43.76ID:tc5CuCjg つまりHaskell(というかElm?)で無限アラート書いとけば捕まらなかった?
250デフォルトの名無しさん
2019/03/22(金) 15:17:19.58ID:JJ/MZDcL Haskellの再帰は場合によってはヒープを使うから
10^9回ぐらい閉じる奴がいたらサイバーテロとして扱われてたかもしれない
10^9回ぐらい閉じる奴がいたらサイバーテロとして扱われてたかもしれない
251デフォルトの名無しさん
2019/03/22(金) 15:36:25.55ID:t/nkQ3ne そこは気を付けなきゃだけど(と言うか、スタックは兎も角ヒープ使うってreverseみたいにリスト溜め込むとかだけで、手続き型言語でもあり得る場面に限られそうだが)、
むしろモナドな再帰(IOはもちろん、リスト->リストな再帰も)がループになると言うのは、
手続き型言語よりも再帰でスタック使うケースが少ないと言う魅力もある。
(ここは手続き型言語が末尾再帰最適化に対応しても追いつけない所)
>>246 の通り、mainを再帰的に呼び出してもループになると言うのは知る限り手続き型言語では見たことない。
main変数が他の言語で言うmain関数的な動きをしているのも、圏論的には変数は引数無しの関数と見做せるから。
main変数を評価しようとすると束縛されたプログラムが動き出す。
n = 1 ― 変数であり、常に1を返す引数無しの関数
むしろモナドな再帰(IOはもちろん、リスト->リストな再帰も)がループになると言うのは、
手続き型言語よりも再帰でスタック使うケースが少ないと言う魅力もある。
(ここは手続き型言語が末尾再帰最適化に対応しても追いつけない所)
>>246 の通り、mainを再帰的に呼び出してもループになると言うのは知る限り手続き型言語では見たことない。
main変数が他の言語で言うmain関数的な動きをしているのも、圏論的には変数は引数無しの関数と見做せるから。
main変数を評価しようとすると束縛されたプログラムが動き出す。
n = 1 ― 変数であり、常に1を返す引数無しの関数
252デフォルトの名無しさん
2019/03/22(金) 17:16:42.19ID:JJ/MZDcL いやGHCが与えるスタックはヒープなんだよ
Cのコールスタックみたいな固定領域じゃなくてね
それもデフォルトで最大メモリの8割というデカさだから
うっかり非末尾再帰を放っておこうものならスワップ地獄に陥る
Cのコールスタックみたいな固定領域じゃなくてね
それもデフォルトで最大メモリの8割というデカさだから
うっかり非末尾再帰を放っておこうものならスワップ地獄に陥る
253デフォルトの名無しさん
2019/03/22(金) 18:49:40.42ID:tc5CuCjg 非末尾再帰を末尾再帰に自動変換するのって技術的に不可能?
末尾再帰ってなんか無理やり感あるよね
末尾再帰ってなんか無理やり感あるよね
254デフォルトの名無しさん
2019/03/22(金) 19:00:24.32ID:E/4CSIEY フィボナッチを再帰で書くと定義がそのまま動く感動が味わえるのに末尾再帰に書き直すととたんに台無しになるよねw
255デフォルトの名無しさん
2019/03/22(金) 22:26:05.94ID:t/nkQ3ne ヒープにあろうがスタックにあろうが末尾再帰に意識して書けばまず解決する問題だね。
ghciやrunghcみたいなスクリプト形式だと最適化(部分的な正格評価)が不十分で
sum’ n [] = n
sum’ n (x:xs) = sum’ (n + x) xs
という末尾再帰があった場合、
sum’ 0 [1,2,3]
= sum’ (0 + 1) [2,3]
= sum’ ((0 + 1)+ 2) [3]
= sum’ (((0 + 1)+ 2)+ 3) []
みたいに(遅延評価のせいで)結果を入れる変数の方でスタック消費するけども、コンパイラ(ghc)の方はこの問題は無い。
ghciやrunghcみたいなスクリプト形式だと最適化(部分的な正格評価)が不十分で
sum’ n [] = n
sum’ n (x:xs) = sum’ (n + x) xs
という末尾再帰があった場合、
sum’ 0 [1,2,3]
= sum’ (0 + 1) [2,3]
= sum’ ((0 + 1)+ 2) [3]
= sum’ (((0 + 1)+ 2)+ 3) []
みたいに(遅延評価のせいで)結果を入れる変数の方でスタック消費するけども、コンパイラ(ghc)の方はこの問題は無い。
256デフォルトの名無しさん
2019/03/22(金) 22:43:20.21ID:t/nkQ3ne >>254
別に数列(リスト)から取り出す形にすれば末尾再帰にする必要ないでしょ。
main = print $ fibs!!3 ― 0から数えて3番目
where fibs = 0:1:zipWith (+) fibs (tail fibs)
foldlの正格評価版 foldl’みたいにzipWithの正格評価版作って差し替えると高速化する。
(このネタ書いてたブログの人はzipWith’を標準で入れてて欲しいって書いてた)
zipWith’ f (x:xs) (y:ys) = seq a $ a:zipWith f xs ys
where a = f x y
zipWith’ _ _ _ = []
別に数列(リスト)から取り出す形にすれば末尾再帰にする必要ないでしょ。
main = print $ fibs!!3 ― 0から数えて3番目
where fibs = 0:1:zipWith (+) fibs (tail fibs)
foldlの正格評価版 foldl’みたいにzipWithの正格評価版作って差し替えると高速化する。
(このネタ書いてたブログの人はzipWith’を標準で入れてて欲しいって書いてた)
zipWith’ f (x:xs) (y:ys) = seq a $ a:zipWith f xs ys
where a = f x y
zipWith’ _ _ _ = []
257デフォルトの名無しさん
2019/03/22(金) 23:37:15.19ID:cqN2FVLj >>256
定義そのままで書きたいって話であって末尾再帰だからダメとは言ってないでござるよ
定義そのままで書きたいって話であって末尾再帰だからダメとは言ってないでござるよ
258デフォルトの名無しさん
2019/03/23(土) 11:46:10.06ID:CUvnstPX 「感動」はダメとは言わないが意味がわからないと言いたい
259デフォルトの名無しさん
2019/03/23(土) 11:57:03.27ID:XiFmcVOc 自然に書くなら数学の定義通り書くよね
でも今のコンピュータの制約上仕方なく末尾再帰にしないといけないよね
自然に書ける日は来ないのかなあってある種当たり前の感覚だと思うけど
でも今のコンピュータの制約上仕方なく末尾再帰にしないといけないよね
自然に書ける日は来ないのかなあってある種当たり前の感覚だと思うけど
260デフォルトの名無しさん
2019/03/23(土) 11:59:26.53ID:OxD1K8Qf コンピューターの制約で変えねばならないならば定義に問題がある
定義は可能な限り一般に適用可能でなければならない
よって定義を変えればよい
定義は可能な限り一般に適用可能でなければならない
よって定義を変えればよい
261デフォルトの名無しさん
2019/03/23(土) 12:03:29.66ID:CUvnstPX 感情をそのまま言語化できるなら犬や猫も言葉を話せることになる
実際には感情と言語は一致しないので感情をそのまま言語化することはない
実際には感情と言語は一致しないので感情をそのまま言語化することはない
262デフォルトの名無しさん
2019/03/23(土) 12:16:16.80ID:XiFmcVOc 何か噛み合ってないな
自然な感覚に近い表現ができるほうが可読性高いよねくらいの話でしかないはずなのに
今何の話になってるんだ??
自然な感覚に近い表現ができるほうが可読性高いよねくらいの話でしかないはずなのに
今何の話になってるんだ??
263デフォルトの名無しさん
2019/03/23(土) 12:18:39.39ID:CUvnstPX 言葉を話さない動物やAIには言語の制約がない
ゆえに動物やAIは人間を超える可能性がある
壮大な詭弁だ
ゆえに動物やAIは人間を超える可能性がある
壮大な詭弁だ
264デフォルトの名無しさん
2019/03/23(土) 12:22:19.42ID:OxD1K8Qf 末尾再帰=ループ
分岐が発生するとこの関係が崩れる
分岐が発生するとこの関係が崩れる
265デフォルトの名無しさん
2019/03/23(土) 12:26:33.46ID:XiFmcVOc 何か変なとこに手出しちゃったみたいですね
もうやめときます
スレ汚し失礼しました
もうやめときます
スレ汚し失礼しました
266デフォルトの名無しさん
2019/03/23(土) 13:28:21.51ID:CUvnstPX 可読性で思い出したが
ソースを読まなくても使ってみればわかることは読まない方がいい
読んだときの自然な感覚なんかよりも、そもそも読まないのが最も自然
ソースを読まなくても使ってみればわかることは読まない方がいい
読んだときの自然な感覚なんかよりも、そもそも読まないのが最も自然
267デフォルトの名無しさん
2019/03/23(土) 16:34:59.79ID:3o0No0Hu 可読性をあげるためだけに型に別名つけるのってどうなの
type Description = Text
みたいなやつ
type Description = Text
みたいなやつ
268デフォルトの名無しさん
2019/03/23(土) 17:38:52.05ID:LmX3enfk まあ読みやすさっていうか書きやすさだよなそれ
269デフォルトの名無しさん
2019/03/23(土) 18:36:54.54ID:CUvnstPX 読むコストを下げるためだけにギャンブル
○○のコストは安いというのが本当か嘘かを賭ける
賭けないのが最も安いと思わないか
○○のコストは安いというのが本当か嘘かを賭ける
賭けないのが最も安いと思わないか
270デフォルトの名無しさん
2019/03/23(土) 19:48:40.97ID:abrpiqJH >>259
https://i.imgur.com/816HQOu.jpg
https://i.imgur.com/wTI8fNg.jpg
一応、末尾再帰も式変形した定義通りなんだけどね。
fib3 0 a _ = a
fib3 n a b = fib3 (n - 1) b (b + a)
n = フィボナッチ数のn番目(fib n)
a = fib nの時のフィボナッチ数
b = fib (n + 1) の時のフィボナッチ数
fib3 nはfib3 (n - 1)のbがaになり、b(fib3 (n + 1))はfib3 (n - 1)のb(fib3 n) と a(fib3 (n - 1))を足したものである。
https://i.imgur.com/816HQOu.jpg
https://i.imgur.com/wTI8fNg.jpg
一応、末尾再帰も式変形した定義通りなんだけどね。
fib3 0 a _ = a
fib3 n a b = fib3 (n - 1) b (b + a)
n = フィボナッチ数のn番目(fib n)
a = fib nの時のフィボナッチ数
b = fib (n + 1) の時のフィボナッチ数
fib3 nはfib3 (n - 1)のbがaになり、b(fib3 (n + 1))はfib3 (n - 1)のb(fib3 n) と a(fib3 (n - 1))を足したものである。
271デフォルトの名無しさん
2019/03/23(土) 23:02:28.70ID:3o0No0Hu >>269 賭けない、は具体的には何? 型シノニムを使わないということ?
272デフォルトの名無しさん
2019/03/24(日) 00:23:58.92ID:d5Z4QiMu >>271
使うのは自由だが可読性の勉強等はしないということ
使うのは自由だが可読性の勉強等はしないということ
273デフォルトの名無しさん
2019/03/24(日) 00:47:12.07ID:xnhJaehN >>272
悩んでないでスタイルを決め打ちして自分が自然だと思える書き方で行く、みたいな感じですか
悩んでないでスタイルを決め打ちして自分が自然だと思える書き方で行く、みたいな感じですか
274デフォルトの名無しさん
2019/03/24(日) 09:54:41.46ID:d5Z4QiMu そんな言葉は使う必要がねーんだ
書き方は決まってないのにもうすでに書き終わってるからだ
書き方は決まってないのにもうすでに書き終わってるからだ
275デフォルトの名無しさん
2019/03/24(日) 11:22:25.74ID:aOFJUm+g やっぱりHaskellは常人向けではないんですね
Ocamlやります
Ocamlやります
276デフォルトの名無しさん
2019/03/24(日) 12:49:13.41ID:d5Z4QiMu そういえば言語も決まってなかったな
常人は言語を決めないとプログラムを書けないってマジ?
常人は言語を決めないとプログラムを書けないってマジ?
277デフォルトの名無しさん
2019/03/24(日) 15:26:29.39ID:x/w14fyx278273
2019/03/24(日) 16:35:05.61ID:xnhJaehN よく判らないアドバイスだったな…
勉強・研究しないで突っ込むのはそっちの方が賭けてる感あるし、
すぐに書き終えるなら確かにそういう難しさはないが、
ソフトウェアのプロジェクトって面白いものは大抵長くなると思う。
>>277
Windows環境はWSLではダメなん?
勉強・研究しないで突っ込むのはそっちの方が賭けてる感あるし、
すぐに書き終えるなら確かにそういう難しさはないが、
ソフトウェアのプロジェクトって面白いものは大抵長くなると思う。
>>277
Windows環境はWSLではダメなん?
279デフォルトの名無しさん
2019/03/25(月) 18:54:20.99ID:3963segm >>261
感情表現と言うように感情はあくまでイメージ想起性のもので
文法を持ってないものだと思う。
感情をそのまま言語化なんて人間でもしてないだろ。
あくまで論理的内容の会話文章の表現に感情を想起させる表現を
選んで論理としては同じだけれど得られるイメージが異なる文を
作っているだけだと思う。
そこで文を構成するために選ぶ表現がやたら極端なときに、感情的と評されているだけで。
ていうかおじさんになったしもう無理
感情表現と言うように感情はあくまでイメージ想起性のもので
文法を持ってないものだと思う。
感情をそのまま言語化なんて人間でもしてないだろ。
あくまで論理的内容の会話文章の表現に感情を想起させる表現を
選んで論理としては同じだけれど得られるイメージが異なる文を
作っているだけだと思う。
そこで文を構成するために選ぶ表現がやたら極端なときに、感情的と評されているだけで。
ていうかおじさんになったしもう無理
280デフォルトの名無しさん
2019/03/25(月) 20:49:31.29ID:PHYb4OS3 >>279
得られるイメージが変わってしまうのはコンピュータの制約のせいだよ
fibのイメージをそのまま表現できたら感動するのになあ
この状況ではコンピュータの制約は変えたいがイメージは変えたくない
「論理としては同じだけれど得られるイメージが異なる」という想定は大外れ
得られるイメージが変わってしまうのはコンピュータの制約のせいだよ
fibのイメージをそのまま表現できたら感動するのになあ
この状況ではコンピュータの制約は変えたいがイメージは変えたくない
「論理としては同じだけれど得られるイメージが異なる」という想定は大外れ
281デフォルトの名無しさん
2019/03/25(月) 21:05:17.06ID:8+7iDICf イメージw
お前らあほだろ
お前らあほだろ
282デフォルトの名無しさん
2019/03/25(月) 21:17:58.51ID:PHYb4OS3 コンピュータの制約が悪夢のようだから消去法でイメージ
あほなことしてるだろ
俺達なんだぜこれ
あほなことしてるだろ
俺達なんだぜこれ
283デフォルトの名無しさん
2019/03/25(月) 21:19:23.78ID:3963segm イメージないと妥当性の判断もできんぞ。
これだって
書き込み内容を読んで
内容から推測される人物像をいままでの記憶から割り出して
そういう人物に対してかつてもった心象(イメージ)を
この場合の想定(先入観)として設定して
否定的判断をするという内容を伝達しているだろ
大体こういうプロセスじゃね?
これだって
書き込み内容を読んで
内容から推測される人物像をいままでの記憶から割り出して
そういう人物に対してかつてもった心象(イメージ)を
この場合の想定(先入観)として設定して
否定的判断をするという内容を伝達しているだろ
大体こういうプロセスじゃね?
284デフォルトの名無しさん
2019/03/25(月) 21:58:18.36ID:25q5twYk 数学の世界で効率を全く重視してないわけじゃないからな。無限の速度のCPU上なら同じと見なせるってだけで。
末尾再帰のfibとか数学的だからアーキテクチャ関係なく元の定義より速い。
行列苦手だから書けないが、もっと速い行列バージョンも存在する。
末尾再帰のfibとか数学的だからアーキテクチャ関係なく元の定義より速い。
行列苦手だから書けないが、もっと速い行列バージョンも存在する。
285デフォルトの名無しさん
2019/03/25(月) 22:00:17.95ID:q0PAKLo0 これなんか深かった。結局愚直なコードのままで良かったみたいな
https://haskell-jp.slack.com/archives/C5666B6BB/p1551956556140300
https://haskell-jp.slack.com/archives/C5666B6BB/p1551956556140300
286デフォルトの名無しさん
2019/03/25(月) 22:05:21.04ID:q0PAKLo0 あとこれ。今はコンパイラが賢くなったのでfoldlが遅くなくなったよって話
https://qiita.com/autotaker1984/items/09c5ceaa13e9077f5359
https://qiita.com/autotaker1984/items/09c5ceaa13e9077f5359
287デフォルトの名無しさん
2019/03/25(月) 22:10:40.54ID:25q5twYk288デフォルトの名無しさん
2019/03/25(月) 22:23:26.20ID:PHYb4OS3 全く読んでないがパラダイムと論理は同じではない
パラダイムの限界と論理の限界は同じではない
パラダイムの限界と論理の限界は同じではない
291デフォルトの名無しさん
2019/03/25(月) 23:29:06.55ID:4CvSxgZ7 sum x:xs = x + sum(xs)
は数学っぽく見えるけどアキュムレータ噛ますと途端にループに見える不思議
は数学っぽく見えるけどアキュムレータ噛ますと途端にループに見える不思議
292デフォルトの名無しさん
2019/03/26(火) 02:32:22.40ID:IahGxu4l アキュムレータは余再帰っぽく見える
数学っぽいの反対は余再帰っぽい説
数学っぽいの反対は余再帰っぽい説
293デフォルトの名無しさん
2019/03/26(火) 19:05:26.53ID:8dCBuWSX Haskell知らんでも無意識に >>270 みたいな式を思い描いて
for文とかに落とし込んでる感じじゃね?
n回繰り返すのが昇順か降順かの違いだけで。
Python
def fib(n):
temp = 0
a = 0
b = 1
for i in range(n):
temp = a
a = b
b = b + temp
return a
for i in range(10 + 1):
print(fib(i))
Haskell
main = mapM_ (print.fib) [0..10]
fib n = fib' n 0 1
where
fib' 0 a _ = a
fib' n a b = fib' (n - 1) b (b + a)
for文とかに落とし込んでる感じじゃね?
n回繰り返すのが昇順か降順かの違いだけで。
Python
def fib(n):
temp = 0
a = 0
b = 1
for i in range(n):
temp = a
a = b
b = b + temp
return a
for i in range(10 + 1):
print(fib(i))
Haskell
main = mapM_ (print.fib) [0..10]
fib n = fib' n 0 1
where
fib' 0 a _ = a
fib' n a b = fib' (n - 1) b (b + a)
294デフォルトの名無しさん
2019/03/26(火) 19:25:31.93ID:NbUyZWCM 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 42162
https://you-can-program.hatenablog.jp
https://you-can-program.hatenablog.jp
295デフォルトの名無しさん
2019/03/31(日) 07:28:40.29ID:S4Tb/ZFO プログラマーのための圏論と言うPDFで公開されてるのが分かりやすい。(上・中・下の三冊)
http://bitterharvest.hatenablog.com/entry/2016/11/24/203021
http://bitterharvest.hatenablog.com/entry/2016/11/24/203021
296デフォルトの名無しさん
2019/04/04(木) 13:40:08.49ID:l5IgkZnr 自然数が射(関数)になっていると言う感覚が分かった気がする。
Haskellで書けないけど、書けるとするなら
1 = 1
1という名前の1を返す引数無しの関数。
Haskellで書けないけど、書けるとするなら
1 = 1
1という名前の1を返す引数無しの関数。
297デフォルトの名無しさん
2019/04/04(木) 13:43:46.44ID:l5IgkZnr 記号的な1を1と書き、概念的な1をチャーチ数で表現するなら
1 = succ zero
1 = succ zero
298デフォルトの名無しさん
2019/04/04(木) 21:34:52.78ID:1azb3qjG トートロジーではないのかね?
299デフォルトの名無しさん
2019/04/05(金) 00:53:58.06ID:OJKC59P7 トートロジーとかチンプンカンプンな高卒なんで。。。
補足説明や訂正があったら勉強になります( ̄^ ̄)ゞ
補足説明や訂正があったら勉強になります( ̄^ ̄)ゞ
300デフォルトの名無しさん
2019/04/05(金) 04:10:43.04ID:sAmwqHSu ラムダ的な自然数は高階関数を使うけど、圏論は冪を使わないことが多い
301デフォルトの名無しさん
2019/04/05(金) 08:37:08.96ID:OJKC59P7 Haskell でもsuccって関数ありましたね。。。
私が
1 = succ zeroで表現したかったのは、どんな数体系でも1と表現される何かという意味での1です。
例えば16進数の10はAと表現されますのですが、
A = 10
とすると10が16進数では10進数の16になるので10進数でも16進数でも10として扱われる概念としてチャーチ数にしたかったのですが、
チャーチ数も含めた全ての数体系で10として扱われる何かを表現したいみたいな。
うーん。。。表現力が乏しくてすみません。
私が
1 = succ zeroで表現したかったのは、どんな数体系でも1と表現される何かという意味での1です。
例えば16進数の10はAと表現されますのですが、
A = 10
とすると10が16進数では10進数の16になるので10進数でも16進数でも10として扱われる概念としてチャーチ数にしたかったのですが、
チャーチ数も含めた全ての数体系で10として扱われる何かを表現したいみたいな。
うーん。。。表現力が乏しくてすみません。
302デフォルトの名無しさん
2019/04/05(金) 18:59:26.73ID:6LVMJo12 本当の所は
Int $ succ Zero
というような頭部正規形で表される関数のシンタックスシュガーだと思う
Int $ succ Zero
というような頭部正規形で表される関数のシンタックスシュガーだと思う
303デフォルトの名無しさん
2019/04/05(金) 21:40:52.25ID:o6EhB3bR HNFは射ではない
そもそも圏論にHNFはない
そもそも圏論にHNFはない
304デフォルトの名無しさん
2019/04/06(土) 02:09:18.76ID:T7Hr9MEJ ・チャーチ数はペアノシステムの1つの実装である
・任意のペアノシステムは(適当な公理のもとで)互いに同型である
みたいな話?
・任意のペアノシステムは(適当な公理のもとで)互いに同型である
みたいな話?
305デフォルトの名無しさん
2019/04/06(土) 03:06:25.41ID:0mL0rlV1 >>303
> HNFは射ではない
> そもそも圏論にHNFはない
こういう表現は間違い
何が射かであり何が圏でないかは、どんな圏を考えているかに依存する
例えばだが、単純な型付λ計算(型の集まりが直積型の構成と関数型の構成について閉じている)に対応する圏、つまり単純な型とそれで型付けされるλ項の成す圏を考えることができる
そこでは、対象は個々の型で、射はλ項だ
そして個々のλ項は、そのλ項の中に現れる自由変数の各々の型の積対象からλ項全体への型という対象への射と考えるというものだ
この場合、λ抽象があるので冪対象が必要になり、従って、この単純な型付λ計算に対応する圏は必然的に積閉包圏というタイプの圏になる
これはいわゆる“categorical type theory”(圏論的型理論)の最も簡単な具体例だ
この圏の場合は単純な型付けに関してwell-typedなλ項は全て射として認められるのでもちろんhead normal formになっているλ項もwell-typedである限りは射だ
> HNFは射ではない
> そもそも圏論にHNFはない
こういう表現は間違い
何が射かであり何が圏でないかは、どんな圏を考えているかに依存する
例えばだが、単純な型付λ計算(型の集まりが直積型の構成と関数型の構成について閉じている)に対応する圏、つまり単純な型とそれで型付けされるλ項の成す圏を考えることができる
そこでは、対象は個々の型で、射はλ項だ
そして個々のλ項は、そのλ項の中に現れる自由変数の各々の型の積対象からλ項全体への型という対象への射と考えるというものだ
この場合、λ抽象があるので冪対象が必要になり、従って、この単純な型付λ計算に対応する圏は必然的に積閉包圏というタイプの圏になる
これはいわゆる“categorical type theory”(圏論的型理論)の最も簡単な具体例だ
この圏の場合は単純な型付けに関してwell-typedなλ項は全て射として認められるのでもちろんhead normal formになっているλ項もwell-typedである限りは射だ
306デフォルトの名無しさん
2019/04/07(日) 09:14:23.15ID:KosuYA7L Haskellの開発環境で、ブレークポイント張って評価中の変数の値を見る、みたいなのって出来ますかね?
Visual Studioのローカルウィンドウ的なの。
普段はSpacemacs使っててREPLで評価しては進め、評価しては進め、みたいな感じでやってます。
Visual Studioのローカルウィンドウ的なの。
普段はSpacemacs使っててREPLで評価しては進め、評価しては進め、みたいな感じでやってます。
307デフォルトの名無しさん
2019/04/18(木) 13:41:44.67ID:iN8m+OWc 並行並列言語Haskellの基本と特徴
https://logmi.jp/tech/articles/321095
2018年11月10日、Haskell-jpが主催するイベント「Haskell Day 2018」が開催されました。
純粋関数型プログラミング言語Haskellをテーマに、Haskellに興味のある人から入門者、
ちょっとできる人まで、様々な層に向けたプレゼンテーションを行った本イベント。実務
から研究まで、幅広いHaskellの事例を共有します。プレゼンテーション「並列並行言語
Haskell 」に登壇したのは、syocy氏。講演資料はこちら (↓)(後略)
https://speakerdeck.com/syocy/bing-lie-bing-xing-yan-yu-haskell
https://speakerd.s3.amazonaws.com/presentations/07d92af9d7aa40bca6cc3959d3f56b28/parallel-and-concurrent.pdf
https://logmi.jp/tech/articles/321095
2018年11月10日、Haskell-jpが主催するイベント「Haskell Day 2018」が開催されました。
純粋関数型プログラミング言語Haskellをテーマに、Haskellに興味のある人から入門者、
ちょっとできる人まで、様々な層に向けたプレゼンテーションを行った本イベント。実務
から研究まで、幅広いHaskellの事例を共有します。プレゼンテーション「並列並行言語
Haskell 」に登壇したのは、syocy氏。講演資料はこちら (↓)(後略)
https://speakerdeck.com/syocy/bing-lie-bing-xing-yan-yu-haskell
https://speakerd.s3.amazonaws.com/presentations/07d92af9d7aa40bca6cc3959d3f56b28/parallel-and-concurrent.pdf
308デフォルトの名無しさん
2019/04/18(木) 23:50:53.53ID:uUujkJat オライリー本の要約だけ?みたいな
309デフォルトの名無しさん
2019/04/25(木) 08:46:13.49ID:xhj9dxYD cabalのnew-から始まるnixスタイルコマンドが出来たからtackつかう意味あまりないですよね
310デフォルトの名無しさん
2019/04/25(木) 09:33:12.75ID:s2usWHpE >>309
v2-build だっけ? よく知らないが stack いらなくなるやつなんだ?
v2-build だっけ? よく知らないが stack いらなくなるやつなんだ?
311デフォルトの名無しさん
2019/04/25(木) 23:59:42.81ID:EXuFo8FY stackageが変わるんですねぇ。stack2も間もなくとか。
https://www.fpcomplete.com/blog/2019/04/stackage-changes-and-stack-2
https://www.fpcomplete.com/blog/2019/04/stackage-changes-and-stack-2
312デフォルトの名無しさん
2019/04/29(月) 10:21:15.20ID:La7Zhpj6 stack or cabal どっちを使えばいいんだ
313デフォルトの名無しさん
2019/04/30(火) 07:55:22.06ID:tedPJGU+ stack!
314デフォルトの名無しさん
2019/04/30(火) 15:29:26.12ID:Dc6+0j7S315デフォルトの名無しさん
2019/04/30(火) 18:00:12.30ID:hygavAeS316デフォルトの名無しさん
2019/04/30(火) 18:03:11.15ID:hygavAeS 入門者に紹介するときはどうすれば?
317デフォルトの名無しさん
2019/05/01(水) 13:06:07.04ID:ALj9hUB7 >>315
自分で情報を得られず、比較できなくて選べないくらいなら、
一長一短なんか考えずに、今好きな方や気になる方を使えば良いんだよ。
stackを長い間使ってきたから今後も使い続ける、でもいいし、
新しいcabalに興味が沸いたからcabal使ってみる、でもいい。
例えばパーサーライブラリ、Webライブラリ、FRPライブラリなどは色々あるけど、
いちいち「一長一短を比較した上で」選ぶ人はそんなに多くないでしょう。
みんな取りあえず何か一つ使ってみて、他に興味が湧いたら浮気してみて、
それからでしょ、比較するのは。
自分で情報を得られず、比較できなくて選べないくらいなら、
一長一短なんか考えずに、今好きな方や気になる方を使えば良いんだよ。
stackを長い間使ってきたから今後も使い続ける、でもいいし、
新しいcabalに興味が沸いたからcabal使ってみる、でもいい。
例えばパーサーライブラリ、Webライブラリ、FRPライブラリなどは色々あるけど、
いちいち「一長一短を比較した上で」選ぶ人はそんなに多くないでしょう。
みんな取りあえず何か一つ使ってみて、他に興味が湧いたら浮気してみて、
それからでしょ、比較するのは。
318デフォルトの名無しさん
2019/05/01(水) 13:20:11.30ID:ALj9hUB7 >>316
両方の一長一短をちゃんと比較して紹介するのは、
記事や本を書くプロや、意欲のある人に任せればいいと思う。
紹介のプロじゃないのなら、自分が好きな方を精一杯アピールすればいい。
それもできずに、初心者にどちらを紹介しようか悩むのなら、順番が違う。
どちらか一方でもアピールできるくらい使い込むのが何よりも先でしょ。
両方の一長一短をちゃんと比較して紹介するのは、
記事や本を書くプロや、意欲のある人に任せればいいと思う。
紹介のプロじゃないのなら、自分が好きな方を精一杯アピールすればいい。
それもできずに、初心者にどちらを紹介しようか悩むのなら、順番が違う。
どちらか一方でもアピールできるくらい使い込むのが何よりも先でしょ。
319デフォルトの名無しさん
2019/05/01(水) 13:42:48.29ID:gsz88y7w まぁこの手の選択にある程度以上責任持って助言するのは難しいんだよな。
少なくとも両方使ってないとどっちがいいとか言えないし。
ほとんどの人が最初に使った方をそのまま使い続けるもんじゃね。
私もcabalしかつかったことないし。
少なくとも両方使ってないとどっちがいいとか言えないし。
ほとんどの人が最初に使った方をそのまま使い続けるもんじゃね。
私もcabalしかつかったことないし。
320デフォルトの名無しさん
2019/05/01(水) 14:03:02.54ID:01/czEVZ 「みんなの見解を聞く」も自分で情報を得る過程のひとつだと思ってるんだが
記名ネットではしにくい無責任方言もここなら言えるでしょ
記名ネットではしにくい無責任方言もここなら言えるでしょ
321デフォルトの名無しさん
2019/05/01(水) 14:23:04.11ID:01/czEVZ まだキチンと検討していないが、自作したツールをbrewとかで公開するとき、ビルドツールを依存に含める必要が出てくると思う。予めどっちかを使うかは決めておきたい。
バージョンを重ねるなかでフラフラ変えるのは避けたい。
あとcabalだとコンパイラを替えるときはghcupなる別ツールを使うの? これだとクロスコンパイラはどうなる。
複数のアーキテクチャのための成果物をビルドするとき、ghcup set ... && cabal build && ghcup set ... && cabal build ... みたいにいちいち指定しないといけないのかしら。
コレを解決するにはghcupにパッチを当てるかcabalを改造するか、スクリプトを書くかするわけだ。その点 stack build はコマンド一発なのに。
俺は年間50時間くらいstackのパッチや関連ツールを書いてきた。このままで行けるならいいが、stack がいずれオワコンになるなら早めに見切りつけて時間節約したい。
新元号が30年続くなら令和中に1500時間も浪費することになるんだぜ。
バージョンを重ねるなかでフラフラ変えるのは避けたい。
あとcabalだとコンパイラを替えるときはghcupなる別ツールを使うの? これだとクロスコンパイラはどうなる。
複数のアーキテクチャのための成果物をビルドするとき、ghcup set ... && cabal build && ghcup set ... && cabal build ... みたいにいちいち指定しないといけないのかしら。
コレを解決するにはghcupにパッチを当てるかcabalを改造するか、スクリプトを書くかするわけだ。その点 stack build はコマンド一発なのに。
俺は年間50時間くらいstackのパッチや関連ツールを書いてきた。このままで行けるならいいが、stack がいずれオワコンになるなら早めに見切りつけて時間節約したい。
新元号が30年続くなら令和中に1500時間も浪費することになるんだぜ。
322デフォルトの名無しさん
2019/05/01(水) 14:53:10.97ID:ALj9hUB7 >>320
> 記名ネットではしにくい無責任方言もここなら言えるでしょ
そんなレスは情報ではないのでは?
ただのノイズでしょ(ノイズの全てがゴミとは言わないが)。
本当に情報を得たいのなら、時間の無駄だよ。
もし、そんなのを参考にどっちか決められるのなら、
初めからルーレットで決めるのと大して変わらないのでは?
「自分で情報を得る」の第一歩は、ビルドツールで一番何がしたいかを決めて、
それが出来るか、やりやすいかを「公式ドキュメント」を見て調べる事だよ。
stackとcabalの公式ドキュメントを見て比較して、
それでも分からない部分をピンポイントでSNSや掲示板などで質問する、
それが二歩目だと思う。
> 記名ネットではしにくい無責任方言もここなら言えるでしょ
そんなレスは情報ではないのでは?
ただのノイズでしょ(ノイズの全てがゴミとは言わないが)。
本当に情報を得たいのなら、時間の無駄だよ。
もし、そんなのを参考にどっちか決められるのなら、
初めからルーレットで決めるのと大して変わらないのでは?
「自分で情報を得る」の第一歩は、ビルドツールで一番何がしたいかを決めて、
それが出来るか、やりやすいかを「公式ドキュメント」を見て調べる事だよ。
stackとcabalの公式ドキュメントを見て比較して、
それでも分からない部分をピンポイントでSNSや掲示板などで質問する、
それが二歩目だと思う。
323デフォルトの名無しさん
2019/05/01(水) 16:46:41.64ID:fQT4rWd7 伸びてると思ったら。。。
今の所stackかな。
cabalは依存関係で過去に評判悪かったから、新しいのの評判が固まったらかな。
今の所stackかな。
cabalは依存関係で過去に評判悪かったから、新しいのの評判が固まったらかな。
324デフォルトの名無しさん
2019/05/02(木) 10:15:34.23ID:PPz8MGJz >>322
調査を並行してやっちゃいけない理由はないでしょ。聞くだけならタダやし。
スレ民の意見をノイズだなんて思ったことないよ。自分にない視点や個人的使用感、気づきにくい落とし穴を教えてもらえるかも。
俺の雑感はstackは不備だけでなくバグも多かった気がする。.stack-workを消したらビルドが直ったみたいなことが何回かあったと思う。
stackのメリットは、
(ghcupの方針が変わらないなら)コンパイラの導入まで自動でやってくれるので、例えばHaskellスクリプトを書いてシェバンにstack、
以降に依存ライブラリを書いておけばいつでもどこでも動く(HackageとStackageが活きてるかぎり)、必要なものを都度自動で用意してくれる。
stackのデメリットは、
設定ファイルが多すぎる。プロジェクトレベルでは stack.yaml, package.yaml, Hoobar.cabal
と、どれに何を書くかが判りづらい、いちいち引っかかる。
調査を並行してやっちゃいけない理由はないでしょ。聞くだけならタダやし。
スレ民の意見をノイズだなんて思ったことないよ。自分にない視点や個人的使用感、気づきにくい落とし穴を教えてもらえるかも。
俺の雑感はstackは不備だけでなくバグも多かった気がする。.stack-workを消したらビルドが直ったみたいなことが何回かあったと思う。
stackのメリットは、
(ghcupの方針が変わらないなら)コンパイラの導入まで自動でやってくれるので、例えばHaskellスクリプトを書いてシェバンにstack、
以降に依存ライブラリを書いておけばいつでもどこでも動く(HackageとStackageが活きてるかぎり)、必要なものを都度自動で用意してくれる。
stackのデメリットは、
設定ファイルが多すぎる。プロジェクトレベルでは stack.yaml, package.yaml, Hoobar.cabal
と、どれに何を書くかが判りづらい、いちいち引っかかる。
325デフォルトの名無しさん
2019/05/02(木) 12:34:35.03ID:WAiWu/DB326デフォルトの名無しさん
2019/05/02(木) 13:13:18.93ID:PPz8MGJz >>325 前半は反論したし、後半は批判してないですよ。
327デフォルトの名無しさん
2019/05/03(金) 01:40:50.69ID:nJ30PKpf 凄いH本の中国語版見る機会があって、
漢字の用法がカタカナ語より
しっくりすると思ったんですけどどうでしょうか。
模式: パターン
門衛: ガード
類型類: 型クラス
さすがにモナドは漢字翻訳難しいみたいですが。
漢字の用法がカタカナ語より
しっくりすると思ったんですけどどうでしょうか。
模式: パターン
門衛: ガード
類型類: 型クラス
さすがにモナドは漢字翻訳難しいみたいですが。
328デフォルトの名無しさん
2019/05/03(金) 06:21:38.43ID:hYhvNKlL その程度のカタカナがしっくり来なかった人生を反省するんだ
329デフォルトの名無しさん
2019/05/03(金) 09:01:46.98ID:gvxbExu1 慣れとしっくりくるのは別物だけどな
無意味刺激と有意味刺激、表音文字と表意文字に対する認知は先天性の個人差があるんだからあまり他人の人生なんて分かりもしないものに言及するべきではない
どちらにせよ今の中国は学術用語を積極的に訳する文化ではあるよね
Haskellに限らずclassや他の用語もそれに類した漢字が用いられてそう
ただこれも漢字の意味が時代によって変化してくると正しい用語認識を阻害しうるのは現代日本でいくらか見られているし、一長一短と個人差だね
無意味刺激と有意味刺激、表音文字と表意文字に対する認知は先天性の個人差があるんだからあまり他人の人生なんて分かりもしないものに言及するべきではない
どちらにせよ今の中国は学術用語を積極的に訳する文化ではあるよね
Haskellに限らずclassや他の用語もそれに類した漢字が用いられてそう
ただこれも漢字の意味が時代によって変化してくると正しい用語認識を阻害しうるのは現代日本でいくらか見られているし、一長一短と個人差だね
330デフォルトの名無しさん
2019/05/03(金) 10:47:01.08ID:4xTnxfhe かつてアルゴリズムを算法とかコンパイルを翻訳とか
一部で言っていましたね。
モナドアクションを算法と訳すならモナドは法かぁ
などと連想してみました。
一部で言っていましたね。
モナドアクションを算法と訳すならモナドは法かぁ
などと連想してみました。
331デフォルトの名無しさん
2019/05/03(金) 11:01:45.26ID:aPBgVjEU 漢字に訳する場合どっか権威のあるところが決める必要があるよね
そういうところがめんどくさい
そういうところがめんどくさい
332デフォルトの名無しさん
2019/05/03(金) 12:09:36.96ID:4xTnxfhe 大陸だと結構あちこちで勝手に翻訳されたり
輸入されていずれ収斂されていくっていう
感じだった。
日本でも官公庁の訳語が定着しないことも
多いよね。
輸入されていずれ収斂されていくっていう
感じだった。
日本でも官公庁の訳語が定着しないことも
多いよね。
333デフォルトの名無しさん
2019/05/03(金) 12:40:40.57ID:eVcW5sZJ 流れも読まずminからmaxまでのランダムな数のリスト(要素数n)を得る関数作って見た。
takerand _ _ xs 0 = return xs
takerand mn mx xs n = do
x <- randomRIO (mn, mx)
takerand mn mx (x:xs) (n - 1)
使い方は
rs <- takerand 1 6 [] 10
これで1ー6までのランダムな数が10個入ったリストが手に入る。
takerand _ _ xs 0 = return xs
takerand mn mx xs n = do
x <- randomRIO (mn, mx)
takerand mn mx (x:xs) (n - 1)
使い方は
rs <- takerand 1 6 [] 10
これで1ー6までのランダムな数が10個入ったリストが手に入る。
334デフォルトの名無しさん
2019/05/03(金) 12:41:50.16ID:eVcW5sZJ 流れも読まずminからmaxまでのランダムな数のリスト(要素数n)を得る関数作って見た。
takerand _ _ xs 0 = return xs
takerand mn mx xs n = do
x <- randomRIO (mn, mx)
takerand mn mx (x:xs) (n - 1)
使い方は
rs <- takerand 1 6 [] 10
これで1ー6までのランダムな数が10個入ったリストが手に入る。
takerand _ _ xs 0 = return xs
takerand mn mx xs n = do
x <- randomRIO (mn, mx)
takerand mn mx (x:xs) (n - 1)
使い方は
rs <- takerand 1 6 [] 10
これで1ー6までのランダムな数が10個入ったリストが手に入る。
335デフォルトの名無しさん
2019/05/03(金) 14:37:49.43ID:af96C5Xg >>334
それなら、getStdGen と randomRs と take でいいのでは?
takerand mn mx n = getStdGen >>= return . take n . randomRs (mn, mx)
あるいは
takerand mn mx n = take n . randomRs (mn, mx) <$> getStdGen
それなら、getStdGen と randomRs と take でいいのでは?
takerand mn mx n = getStdGen >>= return . take n . randomRs (mn, mx)
あるいは
takerand mn mx n = take n . randomRs (mn, mx) <$> getStdGen
336デフォルトの名無しさん
2019/05/03(金) 14:52:14.89ID:af96C5Xg337デフォルトの名無しさん
2019/05/04(土) 06:36:55.99ID:S+NYX3By338デフォルトの名無しさん
2019/05/04(土) 09:34:13.31ID:6lRHaHYp Arrowised FRP を 矢矧のFRP とかいうのは好き
339デフォルトの名無しさん
2019/05/04(土) 09:36:30.32ID:6lRHaHYp 型クラスの訳語 類型類 は、kindの 類 とごっちゃになるな、と思ったけど、
kindは 種 が主流なのか
kindは 種 が主流なのか
340デフォルトの名無しさん
2019/05/04(土) 17:11:10.97ID:MNo33vgu >>339
主流というか、それ以外に聞いたことがない
主流というか、それ以外に聞いたことがない
341デフォルトの名無しさん
2019/05/04(土) 18:12:27.03ID:6lRHaHYp342デフォルトの名無しさん
2019/05/06(月) 16:30:54.25ID:gerN8CWz すみませんHaskellでアート芸術方面のプログラミングをしたい場合
既存の表示用ライブラリは導入からして難しそうな印象があるので
表示はProcessingに任せるという方法を考えていますが、
http://hackage.haskell.org/package/processing-for-haskell
もしそういう方面に詳しい人がいましたら
それについての助言を頂きたいです。
既存の表示用ライブラリは導入からして難しそうな印象があるので
表示はProcessingに任せるという方法を考えていますが、
http://hackage.haskell.org/package/processing-for-haskell
もしそういう方面に詳しい人がいましたら
それについての助言を頂きたいです。
343デフォルトの名無しさん
2019/05/06(月) 16:46:03.96ID:jvaKyQ4h >>342
なにを助言してほしいのか具体的に明確に言ってくれ。
なにを助言してほしいのか具体的に明確に言ってくれ。
344デフォルトの名無しさん
2019/05/06(月) 21:07:46.31ID:gerN8CWz >>343
説明が不十分ですみません。
アート芸術のプログラミングを行う場合
表示は既存ライブラリは使わずに
Haskell-Processing連携ライブラリを使って
データ処理と表示を切り分けた方が
簡単なのではないだろうかという質問でした。
https://github.com/anton-k/processing-for-haskell/blob/master/tutorial/QuickStartForProcessingers.md
表示はProcessingで行います。
説明が不十分ですみません。
アート芸術のプログラミングを行う場合
表示は既存ライブラリは使わずに
Haskell-Processing連携ライブラリを使って
データ処理と表示を切り分けた方が
簡単なのではないだろうかという質問でした。
https://github.com/anton-k/processing-for-haskell/blob/master/tutorial/QuickStartForProcessingers.md
表示はProcessingで行います。
345デフォルトの名無しさん
2019/05/06(月) 23:14:35.12ID:jvaKyQ4h >>344
データ処理と表示処理を切り分けた方が開発が楽になるのはその通り。
でも、グラフィックス ライブラリに何を使うかと、
楽に切り分けできるかどうかは、一般には関係ない。
特に haskell のグラフィックス ライブラリはたいてい EDSL 形式になっているから、
どれを使おうが、切り分けの楽さは大して変わらない。
後はもうライブラリの表現力が求めるレベルにあるかどうかと、
個人の経験や慣れ、趣味の問題だ。
Processing に慣れているなら processing-for-haskell でいいだろう。
個人的には gross が好き。
ところで、既存のライブラリって何だ?
processing-for-haskell は 2016 年でアップデートが止まってるが、
これは既存ではないの?
データ処理と表示処理を切り分けた方が開発が楽になるのはその通り。
でも、グラフィックス ライブラリに何を使うかと、
楽に切り分けできるかどうかは、一般には関係ない。
特に haskell のグラフィックス ライブラリはたいてい EDSL 形式になっているから、
どれを使おうが、切り分けの楽さは大して変わらない。
後はもうライブラリの表現力が求めるレベルにあるかどうかと、
個人の経験や慣れ、趣味の問題だ。
Processing に慣れているなら processing-for-haskell でいいだろう。
個人的には gross が好き。
ところで、既存のライブラリって何だ?
processing-for-haskell は 2016 年でアップデートが止まってるが、
これは既存ではないの?
346sage
2019/05/06(月) 23:44:49.55ID:gerN8CWz >>345
ありがとうございます。理解しました。
参考にしたのが School of Expression だったので
情報が古くprocessing-for-haskellが
最新の物と思えて勘違いしてました。
ありがとうございます。理解しました。
参考にしたのが School of Expression だったので
情報が古くprocessing-for-haskellが
最新の物と思えて勘違いしてました。
347デフォルトの名無しさん
2019/05/07(火) 14:46:19.40ID:A4BDuZrS diagrams を使ってた。
348デフォルトの名無しさん
2019/05/08(水) 18:25:39.72ID:Sfv9Blmq349デフォルトの名無しさん
2019/05/08(水) 22:03:23.22ID:Et3ZqY/0 >>348
「haskellで」アート芸術方面のプログラミングをするには、という質問だと思う。
ジェネラティブアートなんか haskell にもってこいじゃないかな。
もちろん、Processing の得意分野でもあるんだが、
宣言的に書ける haskell もけっこうマッチするのでは?
全て型プログラミングで生成とかもできそう。
「haskellで」アート芸術方面のプログラミングをするには、という質問だと思う。
ジェネラティブアートなんか haskell にもってこいじゃないかな。
もちろん、Processing の得意分野でもあるんだが、
宣言的に書ける haskell もけっこうマッチするのでは?
全て型プログラミングで生成とかもできそう。
350デフォルトの名無しさん
2019/05/12(日) 15:06:12.68ID:11og9P/f f xs = let g = \x -> 2 * x in map g xs
この場合、ラムダは最初に一回メモリにアロケートされて g に束縛されるよね。
でも、もしかして、
f xs = map (\x -> 2 * x) xs
これって、f が呼ばれる度に map の第一引数のコード(ラムダ)がメモリにアロケートされるの?
この場合、ラムダは最初に一回メモリにアロケートされて g に束縛されるよね。
でも、もしかして、
f xs = map (\x -> 2 * x) xs
これって、f が呼ばれる度に map の第一引数のコード(ラムダ)がメモリにアロケートされるの?
351デフォルトの名無しさん
2019/05/12(日) 21:06:22.80ID:yBh745ei クロージャにしなくてもいいラムダはただの関数として扱われるんじゃない?
というか上のコードならセーフっていうのはgを使いまわしてくれるから?
そんな気の利いた処理系なら下のラムダも使いまわしてくれそうだけど
というか上のコードならセーフっていうのはgを使いまわしてくれるから?
そんな気の利いた処理系なら下のラムダも使いまわしてくれそうだけど
352デフォルトの名無しさん
2019/05/12(日) 21:12:09.17ID:x0KgamNa その辺り、実際にどんな実行コードが生成されるかに関しては、
コンパイラ(GHC)に聞いてくれ、としか言いようがない
インライン展開とかクロージャ変換といったコンパイラ技法を学ぶことを勧める
関数型言語だからTiger本とか
コンパイラ(GHC)に聞いてくれ、としか言いようがない
インライン展開とかクロージャ変換といったコンパイラ技法を学ぶことを勧める
関数型言語だからTiger本とか
353デフォルトの名無しさん
2019/05/13(月) 01:00:48.68ID:Jw01/DTu ラムダは何も簡約しなくても最初からWHNFじゃないのか
最初からWHNFならサンクとか不要だから普通の言語と同じでいい
最初からWHNFならサンクとか不要だから普通の言語と同じでいい
354デフォルトの名無しさん
2019/05/13(月) 23:41:36.79ID:kVO0yWqO355デフォルトの名無しさん
2019/05/14(火) 19:41:06.85ID:B2OD/x5C なるほど、納得できた。
これからは安心して引数にラムダを直接書ける。
ありがとう。
これからは安心して引数にラムダを直接書ける。
ありがとう。
356デフォルトの名無しさん
2019/05/23(木) 06:24:49.40ID:Jx74KNT2 mtl によるモナド合成はモナド則を保存しない
マジかよ失望しました。mtl は窓から投げ捨てます
マジかよ失望しました。mtl は窓から投げ捨てます
357デフォルトの名無しさん
2019/05/23(木) 17:37:28.82ID:4B/apNfB 動的型付けに比べて静的型付けの方が優れている、は常に真?
実はHaskellで動的プログラミングをやる話を読んで、
あれっコレ意外といいじゃんと思ってしまったんだ。
実はHaskellで動的プログラミングをやる話を読んで、
あれっコレ意外といいじゃんと思ってしまったんだ。
358デフォルトの名無しさん
2019/05/23(木) 18:42:06.90ID:ATxGBnNk 次にお前らは『優れているを定義してくれ』と言うッ!
359デフォルトの名無しさん
2019/05/24(金) 01:05:05.82ID:jCONIFNW 任意の言語に丸投げするシェルスクリプトはズル
文字列をevalするやつもズル
ズルをする必要がない言語は優れている
どうせこんな感じだろうと思ってる
文字列をevalするやつもズル
ズルをする必要がない言語は優れている
どうせこんな感じだろうと思ってる
360デフォルトの名無しさん
2019/05/24(金) 04:51:31.33ID:3xUJmLCM いくつかの基準が思いつく。
速い・短い・アシストが手厚い・理解しやすい・バグが混入しにくい…
>>359
「ズル」には悪い、の意味が予め含まれていると思うので納得できない。
evalを用いた場合に比べて静的型の解決の方が優れているのを示す必要があるでしょう。
速い・短い・アシストが手厚い・理解しやすい・バグが混入しにくい…
>>359
「ズル」には悪い、の意味が予め含まれていると思うので納得できない。
evalを用いた場合に比べて静的型の解決の方が優れているのを示す必要があるでしょう。
361デフォルトの名無しさん
2019/05/24(金) 08:28:17.80ID:jCONIFNW 格闘技ですら、反則には反則負けという意味が含まれている
362デフォルトの名無しさん
2019/05/24(金) 09:32:47.08ID:3xUJmLCM 含まれてないと思うし、Haskellに関係ない。
363デフォルトの名無しさん
2019/05/24(金) 11:18:44.54ID:YDCPM0sO sequence_の使い所が分からん。。。
mapM_使った方が短くなるし。
うーむ。。。
渡すリストにIOな関数含められる=IOな関数を使う
リスト内包表記も使えるのは良いけど、mapM_のが簡潔。
import Data.List
import System
main = mapM_ put $ zip hellos marks
-- sequence_ [put (x,y) | (x,y) <- zip hellos marks]
hellos = (cycle.tails) "Hello World!!"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
mapM_使った方が短くなるし。
うーむ。。。
渡すリストにIOな関数含められる=IOな関数を使う
リスト内包表記も使えるのは良いけど、mapM_のが簡潔。
import Data.List
import System
main = mapM_ put $ zip hellos marks
-- sequence_ [put (x,y) | (x,y) <- zip hellos marks]
hellos = (cycle.tails) "Hello World!!"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
364デフォルトの名無しさん
2019/05/24(金) 11:19:15.22ID:YDCPM0sO hellos = (cycle.tails) "Hello World!!"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
marks = cycle ["/","|","\\","--"]
put (x,y) = do putStrLn (x ++ "\n" ++ y)
mapM_ (\_ -> putStr "") [1..50000]
system "clear"
365デフォルトの名無しさん
2019/05/24(金) 14:25:55.92ID:3xUJmLCM >>363
モナディックアクションを構造に入れて使うとき重宝するよ。
main = sequence_ . (map (putStr "log:" >>)) $ [print "hoo",putStr "bar"]
個々のアクションを好きに調整できる(例ではそれぞれに前処理を足した)。
モナディックアクションを構造に入れて使うとき重宝するよ。
main = sequence_ . (map (putStr "log:" >>)) $ [print "hoo",putStr "bar"]
個々のアクションを好きに調整できる(例ではそれぞれに前処理を足した)。
366デフォルトの名無しさん
2019/05/24(金) 18:49:41.11ID:aewo4dFz367デフォルトの名無しさん
2019/05/24(金) 18:55:43.73ID:aewo4dFz 別件なのですが、俺俺Eq型クラス(MyEq)を作って見ているのですが、
HugsだとNum a型のインスタンスを作れるのに、GHCだとエラーが出ます。
経験ある方、いらっしゃいますでしょうか?
main = do print $ 1 === 1
print $ 1 /== 1
print $ 1 === 2
print $ 1 /== 2
class MyEq a where
(===),(/==) :: a -> a -> Bool
x === y = not (x /== y)
x /== y = not (x === y)
instance (Num a) => MyEq a where
x === x' = isZero (x - x')
x /== x' = not (x === x')
isZero 0 = True
isZero _ = False
GHCだと全ての型をインスタンスにしろ的なエラーメッセージが出ます。。。
スマートな方法があれば。。。
HugsだとNum a型のインスタンスを作れるのに、GHCだとエラーが出ます。
経験ある方、いらっしゃいますでしょうか?
main = do print $ 1 === 1
print $ 1 /== 1
print $ 1 === 2
print $ 1 /== 2
class MyEq a where
(===),(/==) :: a -> a -> Bool
x === y = not (x /== y)
x /== y = not (x === y)
instance (Num a) => MyEq a where
x === x' = isZero (x - x')
x /== x' = not (x === x')
isZero 0 = True
isZero _ = False
GHCだと全ての型をインスタンスにしろ的なエラーメッセージが出ます。。。
スマートな方法があれば。。。
368デフォルトの名無しさん
2019/05/24(金) 20:57:13.04ID:SgRJwbG9369デフォルトの名無しさん
2019/05/25(土) 02:52:58.92ID:qv11a0DJ370デフォルトの名無しさん
2019/05/25(土) 04:10:17.12ID:/RQqfD4m >>369 具体的にはどのあたりが?
371デフォルトの名無しさん
2019/05/25(土) 06:07:15.41ID:/RQqfD4m "--port=" <> ( 8000 <> 80 )
これが "--port=8080" になって欲しい、みたいな?
これが "--port=8080" になって欲しい、みたいな?
372デフォルトの名無しさん
2019/05/25(土) 12:55:48.15ID:1pSM7n1N373デフォルトの名無しさん
2019/05/25(土) 14:00:56.82ID:/RQqfD4m374デフォルトの名無しさん
2019/05/25(土) 14:25:22.48ID:/RQqfD4m ...でも演算子を上述のように定義すると半群の結合則を満たさない。
dynamicパッケージでもそうされてなくて、結果は"--port=800080"になります。
動的プログラミングを求める人は柔軟に使える演算が欲しくて、
Haskellのデフォルトの定義は型変換がただ面倒くさい。
369が言いたかったのは例えばそういう事かなと解釈しました。
dynamicパッケージでもそうされてなくて、結果は"--port=800080"になります。
動的プログラミングを求める人は柔軟に使える演算が欲しくて、
Haskellのデフォルトの定義は型変換がただ面倒くさい。
369が言いたかったのは例えばそういう事かなと解釈しました。
375デフォルトの名無しさん
2019/05/25(土) 17:32:54.76ID:nXhWU27U376デフォルトの名無しさん
2019/05/25(土) 20:46:23.64ID:orcduCKk 何やってるのかよく分からんけど、おまじないで解決
haskellの初心者時代って、こういうの他言語に比べて多いよね
どうにか分かりやすく説明できないものか、いつも悩む
haskellの初心者時代って、こういうの他言語に比べて多いよね
どうにか分かりやすく説明できないものか、いつも悩む
377デフォルトの名無しさん
2019/05/25(土) 21:58:16.52ID:1pSM7n1N >>374
まあ確かに数値計算するときにfromIntegralだのrealToFracだのをゴテゴテ書くのは
(それを要求される理屈はわかっていても)面倒くさい
そこを「柔軟」にしていくと人が書き間違えたときに教えてくれなくなるから
結局は書きやすさと安全性とのトレードオフだよなあ
まあ確かに数値計算するときにfromIntegralだのrealToFracだのをゴテゴテ書くのは
(それを要求される理屈はわかっていても)面倒くさい
そこを「柔軟」にしていくと人が書き間違えたときに教えてくれなくなるから
結局は書きやすさと安全性とのトレードオフだよなあ
378デフォルトの名無しさん
2019/05/31(金) 20:49:17.15ID:SYuh0ZxQ 結局、マクロ、関数、型チェック以外にプログラムにできることなんてない。
バカがバカな夢を見る。
バカがバカな夢を見る。
379デフォルトの名無しさん
2019/05/31(金) 20:53:47.48ID:4BnNLuhc それを証明してから言えよバカ
380デフォルトの名無しさん
2019/06/02(日) 11:37:55.39ID:mVf2k3qD Cは関数の定義はゴテゴテ書くが演算子の定義は何も書かなかった
C++が演算子を定義するようになったからHaskellも影響を受けたんじゃないか
数学的証明だけでなく、歴史を巻き添えにして議論しないと現実は見えない
C++が演算子を定義するようになったからHaskellも影響を受けたんじゃないか
数学的証明だけでなく、歴史を巻き添えにして議論しないと現実は見えない
381デフォルトの名無しさん
2019/06/07(金) 00:15:16.82ID:pdU7zkZH すみません、
凄いH書籍で学習していて疑問に思ったのですが
型クラス中級で、真理値の様な物を持ちうる型、
JavaScriptのfalsyな値を持つ型を作る実習で
Intや[ ]を独自のYesNo型のインスタンスにする
例があったのですが
標準で存在する型に後から
独自の型のインスタンスにする事に違和感を感じ
バグの温床になるのではという懸念の印象がありました。
オブジェクト嗜好のサブクラスみたいに
「Int」型から「IntYesNo」型を
生成できるのなら違和感ないのですが。
これについての合理性と安全性を明示している
書籍やサイトを知っていたら教えて下さい。
凄いH書籍で学習していて疑問に思ったのですが
型クラス中級で、真理値の様な物を持ちうる型、
JavaScriptのfalsyな値を持つ型を作る実習で
Intや[ ]を独自のYesNo型のインスタンスにする
例があったのですが
標準で存在する型に後から
独自の型のインスタンスにする事に違和感を感じ
バグの温床になるのではという懸念の印象がありました。
オブジェクト嗜好のサブクラスみたいに
「Int」型から「IntYesNo」型を
生成できるのなら違和感ないのですが。
これについての合理性と安全性を明示している
書籍やサイトを知っていたら教えて下さい。
382デフォルトの名無しさん
2019/06/07(金) 00:45:34.97ID:UZbkEtL+383デフォルトの名無しさん
2019/06/07(金) 01:35:51.00ID:UZbkEtL+ >>381
あと、なんど読み返してもタイポっぽく見えないんでツッコミ入れる。
「AをBのインスタンスにする」と言うとき、
Aは型、Bは『型クラス』だからな。
失礼なことを言うが、もしかして違和感の根源は、
型と型クラスがそれぞれ何なのか理解できていないところにあるのでは?
あと、なんど読み返してもタイポっぽく見えないんでツッコミ入れる。
「AをBのインスタンスにする」と言うとき、
Aは型、Bは『型クラス』だからな。
失礼なことを言うが、もしかして違和感の根源は、
型と型クラスがそれぞれ何なのか理解できていないところにあるのでは?
384デフォルトの名無しさん
2019/06/07(金) 06:58:43.76ID:m7qCH6wP 『凄いH書籍』
(;・`д・́)...ゴクリ...(`・д́・;)
(;・`д・́)...ゴクリ...(`・д́・;)
385デフォルトの名無しさん
2019/06/07(金) 19:56:02.21ID:SUVJWRIg 同モジュール(Haskellでいう)内なら拡張に対しては責任を持つべきなので
拡張がモジュールをまたがないなら大した問題はない
他の言語でもモジュール内操作に対してはあんまりフールプルーフじゃないしね
がHaskellの場合は拡張が子モジュールに伝播してしまう
拡張がモジュールをまたがないなら大した問題はない
他の言語でもモジュール内操作に対してはあんまりフールプルーフじゃないしね
がHaskellの場合は拡張が子モジュールに伝播してしまう
386デフォルトの名無しさん
2019/06/07(金) 22:06:13.49ID:wtNNzOUb Ruby の偽は、false, nil の2つだけ!
JavaScript, Python, PHP などは、偽が10個ぐらいある!
空文字列・空配列・空辞書とか、0, 0.0 とか、
これらの言語は、しょーもないバグが多い!
だから、Rubyよりも生産性が低い!
JavaScript, Python, PHP などは、偽が10個ぐらいある!
空文字列・空配列・空辞書とか、0, 0.0 とか、
これらの言語は、しょーもないバグが多い!
だから、Rubyよりも生産性が低い!
387デフォルトの名無しさん
2019/06/07(金) 23:58:36.77ID:KFSm+TLI 『入門HASKELLプログラミング』2019年07月31日発売予定
https://www.shoeisha.co.jp/book/detail/9784798158662
「コンピュータのプログラミング」から脱却し、“学術”ではない、実用度重視のHaskell
入門書
Haskellは、関数型プログラミングを研究する対象としての側面が強すぎ、一般的なアプリ
ケーション構築を目的とした開発言語の側面が、ともすればおざなりになりがちでした。
そのため、他の言語(JavaとかC/C++とかC#など)がこなす、ありふれたアプリケーション
をHaskellで構築しようとすると、キーボードを叩く指が止まってしまうことがありました。
本書は関数型プログラミングの基本を押さえつつ、いわゆる「開発言語」として実用的な
プログラムを書けるようなレベルに誘う一冊です。(後略)
https://www.shoeisha.co.jp/book/detail/9784798158662
「コンピュータのプログラミング」から脱却し、“学術”ではない、実用度重視のHaskell
入門書
Haskellは、関数型プログラミングを研究する対象としての側面が強すぎ、一般的なアプリ
ケーション構築を目的とした開発言語の側面が、ともすればおざなりになりがちでした。
そのため、他の言語(JavaとかC/C++とかC#など)がこなす、ありふれたアプリケーション
をHaskellで構築しようとすると、キーボードを叩く指が止まってしまうことがありました。
本書は関数型プログラミングの基本を押さえつつ、いわゆる「開発言語」として実用的な
プログラムを書けるようなレベルに誘う一冊です。(後略)
388デフォルトの名無しさん
2019/06/08(土) 01:49:15.40ID:WG0iLGtf389デフォルトの名無しさん
2019/06/08(土) 03:07:04.34ID:PPvh7BCd Pythonのfalsyな値には、そんなに違和感はないけどなぁ……。
390デフォルトの名無しさん
2019/06/08(土) 03:44:53.76ID:epil0e3i l
391デフォルトの名無しさん
2019/06/08(土) 03:45:50.56ID:C8CdREmC 【実体験】ブログを1,000記事ほど書いたら、月300万くらい稼げた話
https://www.youtube.com/watch?v=GmVulh282ps&t=604s
【報告】ブログで「月収1,000万」を達成できました【方法を解説する】
https://www.youtube.com/watch?v=pgjcuLp8wt0
年間ほど努力したら「年収3,000万」になったので、経験談を語る
https://www.youtube.com/watch?v=oV_SY-a1lMs
期間工ブログの収入は1500万円でした。【フリーランスの現実&底辺からの復活編】
https://www.youtube.com/watch?v=aijLjFLOuC4
年商1300万のプロブロガーの初心者時代から今までの軌跡
https://www.youtube.com/watch?v=UMiF4T2EO9o
【収益報告】実働月10hでも大金稼ぐ方法を解説【年収6,000万】
https://www.youtube.com/watch?v=o2ISWP-VZsw&t=288s
無料ブログは稼げない。稼ぐならオススメはWordPress一択の理由
https://www.youtube.com/watch?v=o8oUe3JS-lg
https://www.youtube.com/watch?v=GmVulh282ps&t=604s
【報告】ブログで「月収1,000万」を達成できました【方法を解説する】
https://www.youtube.com/watch?v=pgjcuLp8wt0
年間ほど努力したら「年収3,000万」になったので、経験談を語る
https://www.youtube.com/watch?v=oV_SY-a1lMs
期間工ブログの収入は1500万円でした。【フリーランスの現実&底辺からの復活編】
https://www.youtube.com/watch?v=aijLjFLOuC4
年商1300万のプロブロガーの初心者時代から今までの軌跡
https://www.youtube.com/watch?v=UMiF4T2EO9o
【収益報告】実働月10hでも大金稼ぐ方法を解説【年収6,000万】
https://www.youtube.com/watch?v=o2ISWP-VZsw&t=288s
無料ブログは稼げない。稼ぐならオススメはWordPress一択の理由
https://www.youtube.com/watch?v=o8oUe3JS-lg
392デフォルトの名無しさん
2019/06/08(土) 06:33:44.76ID:YhBKasle get programming with haskellは、stackがでてくるの終盤だったり、
あまり実用度重視じゃないんだけどなー
あまり実用度重視じゃないんだけどなー
393デフォルトの名無しさん
2019/06/08(土) 10:04:10.25ID:ryWt2Gls394デフォルトの名無しさん
2019/06/08(土) 13:03:38.36ID:JxaHk6L1 そんなコードが生じるシチュエーションがわからん。
395381
2019/06/08(土) 17:21:52.39ID:mlZK/xCe ありがとうございます。
既存の型を独自の型クラスの
インスタンスにする事は
同モジュール内の拡張として
プログラムする人が責任を持つべきなので
問題はないとの事で了解しました。
急いで質問を書いたので
型クラスを型と間違って書いてしまいすみませんでした。
既存の型を独自の型クラスの
インスタンスにする事は
同モジュール内の拡張として
プログラムする人が責任を持つべきなので
問題はないとの事で了解しました。
急いで質問を書いたので
型クラスを型と間違って書いてしまいすみませんでした。
396デフォルトの名無しさん
2019/06/18(火) 06:17:55.21ID:3nOE2mBA プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
397デフォルトの名無しさん
2019/06/20(木) 01:44:21.27ID:R55GIdRS functoriality とはどのような性質のことでしょうか?
398デフォルトの名無しさん
2019/06/20(木) 04:43:35.94ID:R55GIdRS >>397
補足しますと、functorial は分かります。
ですが、functoriality がいったい何に対してどのような意味で使う言葉なのか分かりません。
Hask圏を例にしてくれると助かります。
補足しますと、functorial は分かります。
ですが、functoriality がいったい何に対してどのような意味で使う言葉なのか分かりません。
Hask圏を例にしてくれると助かります。
399デフォルトの名無しさん
2019/06/27(木) 19:51:11.76ID:xcUkqEUS400デフォルトの名無しさん
2019/07/01(月) 09:45:16.04ID:PP1UmLnE ラズパイでStackの環境構築をしていざコンパイルをしてみたら
・llvmは6.0のみサポートだよ
・一応コンパイルしてみるよ
というメッセージが出た後,
・サポートされていない機械語を使ってるよ
ということでコンパイルが通らなかった。
llvmを6.0のソースからmakeすればいいのかな?
Stackやllvmはすべてapt-getで最新版にしてあります。
・llvmは6.0のみサポートだよ
・一応コンパイルしてみるよ
というメッセージが出た後,
・サポートされていない機械語を使ってるよ
ということでコンパイルが通らなかった。
llvmを6.0のソースからmakeすればいいのかな?
Stackやllvmはすべてapt-getで最新版にしてあります。
401デフォルトの名無しさん
2019/07/01(月) 21:38:59.85ID:/x+NnqQg officialのrepositoryと最新版(binary)は違うよ
402デフォルトの名無しさん
2019/07/02(火) 12:46:31.20ID:+JGifkmy hackageのcabal-installのbootstrap.shをクリックしても
Page not found: Sorry, it's just not here.
とでてダウンロードできないのだが?
Page not found: Sorry, it's just not here.
とでてダウンロードできないのだが?
403デフォルトの名無しさん
2019/07/02(火) 16:08:25.14ID:+JGifkmy まあいいやtar.gzに入ってるからな
404デフォルトの名無しさん
2019/07/02(火) 20:25:51.99ID:2+AqqNZH >>401
レスありがとうございます。
公式の最新版とaptリポジトリでの最新版は違うということは認識してます。
やっぱり llvm 6 のソースを公式サイトからおとして make install ですかね?
レスありがとうございます。
公式の最新版とaptリポジトリでの最新版は違うということは認識してます。
やっぱり llvm 6 のソースを公式サイトからおとして make install ですかね?
405デフォルトの名無しさん
2019/07/11(木) 15:19:40.91ID:EO8VLz8P hackageのホームページのダウンロード数が出るところにはcabalとかからダウンロードしたものは
数にふくまれてる?
数にふくまれてる?
406400,402
2019/07/20(土) 23:02:04.74ID:flSCEm3M 一応ラズパイ上(raspberian 9.4) でもコンパイルできました。
ただしstack を使わずghcで直接コンパイルですが。
オプションが渡されていないバグがあったような情報を
見かけましたがこのあたりが原因?
https://gitlab.haskell.org/ghc/ghc/issues/11058
ただしstack を使わずghcで直接コンパイルですが。
オプションが渡されていないバグがあったような情報を
見かけましたがこのあたりが原因?
https://gitlab.haskell.org/ghc/ghc/issues/11058
407デフォルトの名無しさん
2019/07/24(水) 23:54:43.53ID:/HKiGEdd 3件もこのスレで本の省略系がアレでワロタ
協調させて省略するとこうなる
凄いH楽しく学ぼう
協調させて省略するとこうなる
凄いH楽しく学ぼう
408デフォルトの名無しさん
2019/08/11(日) 16:09:11.67ID:L0OuEHk+ λの数だけ強くなれるよ〜♫
409デフォルトの名無しさん
2019/08/12(月) 07:07:43.10ID:8tVc9hN7 最近発売された書籍はどうでしたか
410デフォルトの名無しさん
2019/08/12(月) 18:35:53.32ID:EuURpOPT はい
411デフォルトの名無しさん
2019/08/14(水) 23:43:24.45ID:ITFywCVm この??の部分てどう書いたらいいですか?
f :: a -> IO (Maybe b)
g :: b -> IO (Maybe c)
h :: a -> IO (Maybe c)
h x = do
(y :: Maybe b) <- f a
(z :: Maybe c) <- ??
return z
f :: a -> IO (Maybe b)
g :: b -> IO (Maybe c)
h :: a -> IO (Maybe c)
h x = do
(y :: Maybe b) <- f a
(z :: Maybe c) <- ??
return z
412デフォルトの名無しさん
2019/08/15(木) 00:56:45.05ID:2FISIxPr もっといいやり方ありそうですが、自己解決しました。
IO (Maybe)から、いったん MaybeT IO に迂回してからMaybe(Maybe c)を潰すんですね、、
import Control.Monad.Trans.Maybe
f :: a -> IO (Maybe b)
f = undefined
g :: b -> IO (Maybe c)
g = undefined
h :: a -> IO (Maybe c)
h x = do
y <- runMaybeT $ (MaybeT $ f x) >>= (\x -> MaybeT $ g x)
let
contractMaybe :: Maybe (Maybe a) -> Maybe a
contractMaybe aa = case aa of
Just (Just x) -> Just x
_ -> Nothing
return $ contractMaybe y
IO (Maybe)から、いったん MaybeT IO に迂回してからMaybe(Maybe c)を潰すんですね、、
import Control.Monad.Trans.Maybe
f :: a -> IO (Maybe b)
f = undefined
g :: b -> IO (Maybe c)
g = undefined
h :: a -> IO (Maybe c)
h x = do
y <- runMaybeT $ (MaybeT $ f x) >>= (\x -> MaybeT $ g x)
let
contractMaybe :: Maybe (Maybe a) -> Maybe a
contractMaybe aa = case aa of
Just (Just x) -> Just x
_ -> Nothing
return $ contractMaybe y
413デフォルトの名無しさん
2019/08/15(木) 02:33:07.91ID:9FXQJNeU Maybeを潰すのは型的に合っていないと思う
data A
data B
data C
f :: A -> IO (Maybe B)
f = undefined
g :: B -> IO (Maybe C)
g = undefined
h :: A -> IO (Maybe C)
h x = runMaybeT $ MaybeT (f x) >>= (\y -> MaybeT (g y))
h' :: A -> IO (Maybe C)
h' = runMaybeT . (MaybeT . f >=> MaybeT . g)
data A
data B
data C
f :: A -> IO (Maybe B)
f = undefined
g :: B -> IO (Maybe C)
g = undefined
h :: A -> IO (Maybe C)
h x = runMaybeT $ MaybeT (f x) >>= (\y -> MaybeT (g y))
h' :: A -> IO (Maybe C)
h' = runMaybeT . (MaybeT . f >=> MaybeT . g)
414デフォルトの名無しさん
2019/08/15(木) 09:54:21.85ID:2FISIxPr >>413
ありがとうございます。
data宣言してるA B Cだと確かに型チェック通らないですね。
他にもa b cを具体的にStringにしたらダメでした。
a b cバージョンだと通ってるんですが、何か違いがあるのでしょうか?
また、実際とりかかっていたのは、
fが下のwebViewGetDomDocumentで、
gが下のgetBodyでした。
こちらもMaybeつぶしで型チェックは通っています(挙動はまだ確認していませんが)。
webViewGetDomDocument :: WebView -> IO (Maybe Document)
getBody
:: (DocumentClass self, Control.Monad.IO.Class.MonadIO m) =>
self -> m (Maybe Graphics.UI.Gtk.WebKit.Types.HTMLElement)
ありがとうございます。
data宣言してるA B Cだと確かに型チェック通らないですね。
他にもa b cを具体的にStringにしたらダメでした。
a b cバージョンだと通ってるんですが、何か違いがあるのでしょうか?
また、実際とりかかっていたのは、
fが下のwebViewGetDomDocumentで、
gが下のgetBodyでした。
こちらもMaybeつぶしで型チェックは通っています(挙動はまだ確認していませんが)。
webViewGetDomDocument :: WebView -> IO (Maybe Document)
getBody
:: (DocumentClass self, Control.Monad.IO.Class.MonadIO m) =>
self -> m (Maybe Graphics.UI.Gtk.WebKit.Types.HTMLElement)
415デフォルトの名無しさん
2019/08/15(木) 17:40:56.74ID:3wJ+zeP0 h x = do {
y <- f x;
z <- case y of { Nothing -> return Nothing; Just y' -> g y' };
return z
}
なにがMaybe潰しだ
ただの分岐にデザインパターンみたいな名前つけやがって
y <- f x;
z <- case y of { Nothing -> return Nothing; Just y' -> g y' };
return z
}
なにがMaybe潰しだ
ただの分岐にデザインパターンみたいな名前つけやがって
416デフォルトの名無しさん
2019/08/16(金) 13:02:37.84ID:wUgksw8i わざわざzを経由する必要ある?
417デフォルトの名無しさん
2019/08/16(金) 18:54:52.75ID:pXb2X6++ モナド則その2
m >>= return = m
を満たさない半モナド?を想定してる可能性
m >>= return = m
を満たさない半モナド?を想定してる可能性
418デフォルトの名無しさん
2019/08/17(土) 01:26:41.61ID:ES53moma 圏論の知識って役に立つの?
420デフォルトの名無しさん
2019/08/17(土) 03:49:03.33ID:CK+x7f61 全くならないよ
421デフォルトの名無しさん
2019/08/17(土) 10:59:33.48ID:2mj8+539 Haskellと圏論を比較することでHaskellの過激な部分が見える
型を省略する
タプルでできることをカリー化でやる
「任意のfに対しgが存在する」ですむことを高階関数でやる
型を省略する
タプルでできることをカリー化でやる
「任意のfに対しgが存在する」ですむことを高階関数でやる
422デフォルトの名無しさん
2019/08/17(土) 18:25:28.56ID:ljAxaRgk 簡単なことを難しく書くのがHaskell
423デフォルトの名無しさん
2019/08/17(土) 18:36:58.79ID:He41kTu9 ?
424デフォルトの名無しさん
2019/08/18(日) 03:03:18.77ID:AO5DQImr タグつき共用体は簡単だ
C言語にもあった共用体をやめてコールバック地獄になったのはHaskellのせいではない
C言語にもあった共用体をやめてコールバック地獄になったのはHaskellのせいではない
425デフォルトの名無しさん
2019/08/18(日) 20:44:58.36ID:zn243Obk 別スレでこんなの見つけた。
https://insights.dice.com/2019/07/29/5-programming-languages-probably-doomed/
人気なさすぎという事なのかな?
Haskell好きなんだけどなぁ。
https://insights.dice.com/2019/07/29/5-programming-languages-probably-doomed/
人気なさすぎという事なのかな?
Haskell好きなんだけどなぁ。
426デフォルトの名無しさん
2019/08/18(日) 21:34:03.15ID:Ne5INCCb 開発関係者の間で口コミが増えないから使われていないんじゃないか
消えるかもってことらしいがそもそも学術研究目的だからそれでも
構わないってことじゃないかと思うが…
消えるかもってことらしいがそもそも学術研究目的だからそれでも
構わないってことじゃないかと思うが…
427デフォルトの名無しさん
2019/08/18(日) 22:46:17.93ID:PVG4KZY2 何があれば Haskell に人気が出るだろうか
428デフォルトの名無しさん
2019/08/18(日) 23:04:15.06ID:Onid3Fuw C にせまる速度がでたら?
429デフォルトの名無しさん
2019/08/18(日) 23:54:21.76ID:gc7JPYBd キラーアプリ(フレームワーク的な)でしょ
pandocでは不足
pandocでは不足
430デフォルトの名無しさん
2019/08/19(月) 03:52:58.25ID:zjob4//4 Pandoc 初版2006年8月10日 現在スター数 16,396
shellcheck 初版2013年7月24日 現在スター数 16,023
こういう感じのがもっとほしい
shellcheck 初版2013年7月24日 現在スター数 16,023
こういう感じのがもっとほしい
431デフォルトの名無しさん
2019/08/19(月) 07:23:04.62ID:2IiE7zyK そもそも数学の人気のなさをキラーアプリ説で説明できない
宗教では惑星の動きを説明できないみたいに
宗教では惑星の動きを説明できないみたいに
432デフォルトの名無しさん
2019/08/19(月) 07:34:27.76ID:WV8MsfnG オライリーの本にはパーサーは最強と書いてあるが何に使う?
まだパーサー必要じゃないので恩恵味わっていない
まだパーサー必要じゃないので恩恵味わっていない
433デフォルトの名無しさん
2019/08/19(月) 07:41:22.99ID:TcQTkvSK pandocに...
434デフォルトの名無しさん
2019/08/19(月) 11:51:15.13ID:XOuYcf/m パーサはオンラインサービスのやりとりの解析に便利そう。
あるいは溜め込んだビッグデータの解析前処理とか。
あるいは溜め込んだビッグデータの解析前処理とか。
435デフォルトの名無しさん
2019/08/19(月) 15:54:57.04ID:Kn9dUhI/436デフォルトの名無しさん
2019/08/19(月) 16:56:00.26ID:zjob4//4 設定言語の Dhall にもパーサの強さが効いてきてるだろうね。Slackあたりで新しいキラーアプリみたいに言われていたやつ。
ただの設定より強いけどフルセットのプログラミング言語ほどでないために無限ループなどを作れず安全で便利らしい。
現在スター数二千弱
ただの設定より強いけどフルセットのプログラミング言語ほどでないために無限ループなどを作れず安全で便利らしい。
現在スター数二千弱
437デフォルトの名無しさん
2019/08/19(月) 17:27:44.29ID:2IiE7zyK 束縛あり
(m >>= \ x -> return x) = m
束縛なし
(>>= return) = id
(m >>= \ x -> return x) = m
束縛なし
(>>= return) = id
438デフォルトの名無しさん
2019/08/21(水) 02:19:03.88ID:DF21aIsc 関数抽象とかλ抽象とか内容にたいして意味がない説明が長々と続いてると思ったら
単なる無名関数のことだった
最初からそう書けばいいのにわざと理解が遠くなる書き方するのは何だろうね
単なる無名関数のことだった
最初からそう書けばいいのにわざと理解が遠くなる書き方するのは何だろうね
439デフォルトの名無しさん
2019/08/21(水) 03:03:56.38ID:zk1xpAiv >>438
それはラムダ抽象などに興味がある読者を対象にしているからかもしれない。
単に説明が下手なだけかもしれないが。
ちなみに私は前者に当たるので、そういう単語が出てくるとワクワクし、理解がはかどる。
それはラムダ抽象などに興味がある読者を対象にしているからかもしれない。
単に説明が下手なだけかもしれないが。
ちなみに私は前者に当たるので、そういう単語が出てくるとワクワクし、理解がはかどる。
440デフォルトの名無しさん
2019/08/21(水) 08:26:50.91ID:vWB9dk8w441デフォルトの名無しさん
2019/08/21(水) 08:59:06.15ID:MCeqK6x4 会話成り立ってるのか?
442デフォルトの名無しさん
2019/08/21(水) 09:50:43.38ID:NrNhEvfu 具体例を書けないやつは説明が下手なだけだし
具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
これに関しては数学よりも歴史が役に立つ
具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
これに関しては数学よりも歴史が役に立つ
443デフォルトの名無しさん
2019/08/21(水) 14:58:21.32ID:ur92HW83444デフォルトの名無しさん
2019/08/21(水) 20:13:20.77ID:a8Z/37wn >>442
> 具体例を書けないやつは説明が下手なだけだし
具体例を書けない人間は説明下手以前にそもそも十分に正しく理解していないからこそ具体例を書けないんだよ
中途半端な理解しかしていない人間が上手に説明できるはずがないだろうが
> 具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
具体例として長々としか書けないのも困り者だけれどね
説明する側が本当に良く理解できているならば、よほど高度にテクニカルで微妙な概念や定義でない限り
具体例としては簡潔で短い例や反例を挙げられるはずだ
> 少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
> これに関しては数学よりも歴史が役に立つ
Lispの歴史が正にそれを物語っている
当時MITのAI Lab.のJohn McCarthyらによってLispがλ計算に基づいて初めて産み出された時、λ計算の変数のスコープを間違って
(というよりはLispが実装された1960年代前半のコンピュータのメモリ量と処理能力の極めて厳しい制限から)
動的スコープを採用して久しくその間違いを改めなかったのから、Guy Steele, Jr.らによるScheme言語の提案と同処理系の開発および
Lisp諸方言の統一化としてCommon Lispの言語仕様を策定する際に、変数のスコープとしてはSchemeの静的スコープを標準として採用することで
漸くLispプログラミング界で動的スコープでなく静的スコープが当たり前になったという歴史がね
ついでに言っておくと、かつてのLisp界隈での混乱として、言語仕様上の問題としての動的スコープ-vs-静的スコープの問題と
類似の(だが異なる)問題であるshallow_binding-vs-deep_bindingの問題(こちらは言語仕様でなく実装上の問題)とが混同されていて
混乱を招いていた(かなりしっかりしたLispの教科書でも後者を前者と混同して説明していたり、そもそもこれらの問題があることを理解せずに
書かれていたりした
shallow-vs-deepの問題が言語仕様でなく実装上の問題だと正しく且つ明快に言い切った(私の知る限り)最初のLispのテキストは
Lisp実装者だけでなく(当時の)Lispの上級プログラマにとってもバイブルとでも呼ぶべきJohn Allenの“Anatomy of Lisp”
と、まあ長々とした例を批判しながら、長々と書いてしまって申し訳ない
> 具体例を書けないやつは説明が下手なだけだし
具体例を書けない人間は説明下手以前にそもそも十分に正しく理解していないからこそ具体例を書けないんだよ
中途半端な理解しかしていない人間が上手に説明できるはずがないだろうが
> 具体例が長々と書かれていたら読み飛ばすようなやつは誤読するだけ
具体例として長々としか書けないのも困り者だけれどね
説明する側が本当に良く理解できているならば、よほど高度にテクニカルで微妙な概念や定義でない限り
具体例としては簡潔で短い例や反例を挙げられるはずだ
> 少なくとも動的スコープと静的スコープを間違えた例を書くべきだ
> これに関しては数学よりも歴史が役に立つ
Lispの歴史が正にそれを物語っている
当時MITのAI Lab.のJohn McCarthyらによってLispがλ計算に基づいて初めて産み出された時、λ計算の変数のスコープを間違って
(というよりはLispが実装された1960年代前半のコンピュータのメモリ量と処理能力の極めて厳しい制限から)
動的スコープを採用して久しくその間違いを改めなかったのから、Guy Steele, Jr.らによるScheme言語の提案と同処理系の開発および
Lisp諸方言の統一化としてCommon Lispの言語仕様を策定する際に、変数のスコープとしてはSchemeの静的スコープを標準として採用することで
漸くLispプログラミング界で動的スコープでなく静的スコープが当たり前になったという歴史がね
ついでに言っておくと、かつてのLisp界隈での混乱として、言語仕様上の問題としての動的スコープ-vs-静的スコープの問題と
類似の(だが異なる)問題であるshallow_binding-vs-deep_bindingの問題(こちらは言語仕様でなく実装上の問題)とが混同されていて
混乱を招いていた(かなりしっかりしたLispの教科書でも後者を前者と混同して説明していたり、そもそもこれらの問題があることを理解せずに
書かれていたりした
shallow-vs-deepの問題が言語仕様でなく実装上の問題だと正しく且つ明快に言い切った(私の知る限り)最初のLispのテキストは
Lisp実装者だけでなく(当時の)Lispの上級プログラマにとってもバイブルとでも呼ぶべきJohn Allenの“Anatomy of Lisp”
と、まあ長々とした例を批判しながら、長々と書いてしまって申し訳ない
445デフォルトの名無しさん
2019/08/22(木) 09:46:16.96ID:xQsiKIbM 説得力皆無の文章になったな
446デフォルトの名無しさん
2019/08/22(木) 18:48:22.95ID:s6ROoMqI 力が無いなら金で買えばいい
問題は、相手を説得したい者に課金するか自分を説得してほしい者に課金するか
問題は、相手を説得したい者に課金するか自分を説得してほしい者に課金するか
447デフォルトの名無しさん
2019/08/26(月) 15:26:16.91ID:7r1lWQhX モナドから得た値ででかいレコード初期化したいときってなんかいい書き方ない?
do記法で左矢印で一々変数に束縛してからフィールドに代入とかするのめんどい
レコードワイルドカード使うのもアプリカティブスタイルで書くのもなんかいまいちだし
do記法で左矢印で一々変数に束縛してからフィールドに代入とかするのめんどい
レコードワイルドカード使うのもアプリカティブスタイルで書くのもなんかいまいちだし
448デフォルトの名無しさん
2019/08/26(月) 16:58:37.95ID:1YvWSZsw >>447
理想はどういう書き方をしたい?
理想はどういう書き方をしたい?
449デフォルトの名無しさん
2019/08/26(月) 17:56:50.34ID:H+o0BUvr >>448
Hoge { fuga =<< piyo }
こんな感じがいいなあ
レコードワイルドカードだと何してんのかぱっと見よくわからなくなるし
アプリカティブスタイルで書くとフィールドの順番変わったりしたときそれに合わせなきゃいけないのがちょっとだけ嫌
Hoge { fuga =<< piyo }
こんな感じがいいなあ
レコードワイルドカードだと何してんのかぱっと見よくわからなくなるし
アプリカティブスタイルで書くとフィールドの順番変わったりしたときそれに合わせなきゃいけないのがちょっとだけ嫌
450デフォルトの名無しさん
2019/08/26(月) 17:57:34.01ID:H+o0BUvr まちがえた=<<じゃなくて<-
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のモナドは外部とのやり取りを隠蔽してる脇役みたいなものでしょ
552デフォルトの名無しさん
2019/10/16(水) 22:25:37.91ID:S+gc310a 無理やり型合わせするためだけの言い訳だな。
くっだらねーとしか思わんかったわ。
くっだらねーとしか思わんかったわ。
553デフォルトの名無しさん
2019/10/16(水) 23:44:14.52ID:5hxXU1b8 そう思ってでもまだこちらをのぞいているってことは
かなり気に入る・気になる部分もあったんだよね。
どんなところがよかったの?あるいは気になったの?
かなり気に入る・気になる部分もあったんだよね。
どんなところがよかったの?あるいは気になったの?
554デフォルトの名無しさん
2019/10/17(木) 03:04:05.52ID:Xwvn1Enx CSで使われる用語って何かのめたふぁか知らんけど
無理に数学に合わせて造語っててかえって判り難さが増すというね
無理に数学に合わせて造語っててかえって判り難さが増すというね
555デフォルトの名無しさん
2019/10/17(木) 03:47:00.30ID:qaCXzdDd モナドが分からんという人が多いのは
哲学のモナドと混同してるからだろうな
全く無関係の別物だと理解する必要がある
哲学のモナドと混同してるからだろうな
全く無関係の別物だと理解する必要がある
556デフォルトの名無しさん
2019/10/17(木) 04:08:11.17ID:UnH0fUML いやそれはない
557デフォルトの名無しさん
2019/10/17(木) 06:05:35.66ID:gq3I2ckq モナドはわかっても何が凄いのか全然わからん教えてくれ
558デフォルトの名無しさん
2019/10/17(木) 07:39:25.89ID:fFU5Cjed 哲学と数学の違いは「嘘を言ってはいけない」という点にどこまで集中するかの違い
すごいものを作るより有害なものを作らないことをどのぐらい重視するか
すごいものを作るより有害なものを作らないことをどのぐらい重視するか
559デフォルトの名無しさん
2019/10/17(木) 08:37:09.64ID:n/9LzeKG たしかにモナドすごいすごいって言う人っていざ説明させると説明できないよねw
せいぜい受け売り止まり
せいぜい受け売り止まり
560デフォルトの名無しさん
2019/10/17(木) 09:27:30.90ID:PVi4YySF では説明お願いします
561デフォルトの名無しさん
2019/10/17(木) 09:56:17.77ID:Gwz4u+oG 受け売り止まりじゃない説明はよ
562デフォルトの名無しさん
2019/10/17(木) 10:16:38.68ID:kLoaz8mV モナドはただのデザインパターンの一つだろ
563デフォルトの名無しさん
2019/10/17(木) 10:44:35.23ID:n/9LzeKG564デフォルトの名無しさん
2019/10/17(木) 10:44:48.97ID:UnH0fUML モナドほどの抽象化しただけで画期的じゃん
イテレータとか用意してデータ構造によらないコンテナへの共通インタフェースとさらにそれへの特別なシンタックスシュガー用意した言語ぐらいならあった
モナドなんか用意してdo記法なんてシンタックスシュガー用意してプログラミング言語における手続き的処理やその他諸々を抽象化した
イテレータとか用意してデータ構造によらないコンテナへの共通インタフェースとさらにそれへの特別なシンタックスシュガー用意した言語ぐらいならあった
モナドなんか用意してdo記法なんてシンタックスシュガー用意してプログラミング言語における手続き的処理やその他諸々を抽象化した
565デフォルトの名無しさん
2019/10/17(木) 10:57:50.46ID:8XbgiZIP 抽象化できてるか?
手続き型と同じっぽく見えるけど、いざ活用しようとすると同じようには使えなくて意味不明な型エラーで詰まる
結局のところモナドの仕組み理解できてないと使いこなせない
これは抽象化できてないってことでしょ
手続き型と同じっぽく見えるけど、いざ活用しようとすると同じようには使えなくて意味不明な型エラーで詰まる
結局のところモナドの仕組み理解できてないと使いこなせない
これは抽象化できてないってことでしょ
566デフォルトの名無しさん
2019/10/17(木) 11:46:58.33ID:UnH0fUML そりゃ任意の手続き型言語を再現できるわけではないから完全な抽象化ではないけど
手続き型的な処理とか、失敗する可能性のある処理とか、非決定的処理だとか、そう言った諸々をまとめてモナドとして一般化してる
そのおかげでそれら全てで共通にdo記法やモナド向けの関数といったものが使えて、各種毎に個別に関数を用意したり覚えたりする必要が減る
自作のDSLなどを構築するときにも
モナドインタフェースを実装するだけでdo記法やモナド向け関数群を使えるようになる
他言語でDSL構築は結構大変だし、オレオレDSLなんてどういう仕様かわかりにくいけど、haskellなら型から検索したり型を見たりすることでどういうアクションがあってどうやって使うのかがわかる
手続き型的な処理とか、失敗する可能性のある処理とか、非決定的処理だとか、そう言った諸々をまとめてモナドとして一般化してる
そのおかげでそれら全てで共通にdo記法やモナド向けの関数といったものが使えて、各種毎に個別に関数を用意したり覚えたりする必要が減る
自作のDSLなどを構築するときにも
モナドインタフェースを実装するだけでdo記法やモナド向け関数群を使えるようになる
他言語でDSL構築は結構大変だし、オレオレDSLなんてどういう仕様かわかりにくいけど、haskellなら型から検索したり型を見たりすることでどういうアクションがあってどうやって使うのかがわかる
567デフォルトの名無しさん
2019/10/17(木) 11:49:22.03ID:fFU5Cjed これがC++だったらJavaScript環境を作ってC++の仕組みを隠蔽するかもな
Haskellでも同じことをする自由はある
Haskellでも同じことをする自由はある
568デフォルトの名無しさん
2019/10/17(木) 21:34:43.47ID:AvAuJv6u 関数脳になるとどんな利点があるのかな?
手続記述は使い回ししにくい?
参照透過性が確保されていて型の情報があれば
算法の記法が手続き的か定義的かを問わず
どちらでもいいような気もするが
手続記述は使い回ししにくい?
参照透過性が確保されていて型の情報があれば
算法の記法が手続き的か定義的かを問わず
どちらでもいいような気もするが
569デフォルトの名無しさん
2019/10/18(金) 00:47:49.97ID:Jux/affY570デフォルトの名無しさん
2019/10/18(金) 06:44:38.21ID:lM5JoyFV >>562
絶対違う
絶対違う
571デフォルトの名無しさん
2019/10/18(金) 09:49:47.43ID:F+Okgjq/ >>569
全然違うんだよなぁ…
全然違うんだよなぁ…
572デフォルトの名無しさん
2019/10/18(金) 12:21:22.11ID:cHgwfEPK コンストラクターがオーバーロードできないから別の列挙型に同じタグ名がつけれないんだけど
どうしたらいい?
どうしたらいい?
573デフォルトの名無しさん
2019/10/18(金) 12:40:18.58ID:B/ouUg1P574デフォルトの名無しさん
2019/10/18(金) 12:41:41.68ID:B/ouUg1P >>572
自分だったら根本的な構造を見直すかな
自分だったら根本的な構造を見直すかな
575デフォルトの名無しさん
2019/10/18(金) 17:04:05.16ID:lM5JoyFV >>574
kwsk
kwsk
576デフォルトの名無しさん
2019/10/18(金) 20:30:34.81ID:O9SciFl2 >>572
DuplicateRecordFields 拡張を使うとできるようになるっぽいよ。
http://lotz84.github.io/haskell/extensible-record.html
DuplicateRecordFields 拡張を使うとできるようになるっぽいよ。
http://lotz84.github.io/haskell/extensible-record.html
577デフォルトの名無しさん
2019/10/18(金) 20:44:14.39ID:lM5JoyFV >>576
俺も一瞬それ思ったけど同名データコンストラクタもできたっけ?
俺も一瞬それ思ったけど同名データコンストラクタもできたっけ?
578デフォルトの名無しさん
2019/10/18(金) 21:22:19.66ID:O9SciFl2 >>577
コンストラクタの方か。見間違えてた
コンストラクタの方か。見間違えてた
579デフォルトの名無しさん
2019/10/18(金) 22:18:25.57ID:O9SciFl2 data 宣言を別モジュールに分けて
両方が必要なら import ... as ... で別名をつけるって方法はどう?
両方が必要なら import ... as ... で別名をつけるって方法はどう?
580デフォルトの名無しさん
2019/10/18(金) 22:56:52.03ID:liCy40EB モナドを導入することで副作用のない
「副作用のチェーンをつくって渡す。」
ちなみに実行は副作用させるというバカみたいなレトリックを実行してるだけ。
バカはそういうものをありがたがるんだよ。
そしてそういうものをありがたがるというのはバカみたいに本質なんだな。
「副作用のチェーンをつくって渡す。」
ちなみに実行は副作用させるというバカみたいなレトリックを実行してるだけ。
バカはそういうものをありがたがるんだよ。
そしてそういうものをありがたがるというのはバカみたいに本質なんだな。
581デフォルトの名無しさん
2019/10/18(金) 23:39:51.57ID:CSj9zhCF モナドのごとく回りくどく分かりにくい文だな
582デフォルトの名無しさん
2019/10/19(土) 00:07:09.37ID:0X24TT// >>575
Haskellは個人の趣味・自己啓発の道具の範疇なので
参考にならないでしょうが…
名前がかぶるのはどこか機能がかぶってたりするかなと
型の使い方を見直したり組み合わせる関数を見直したり
所属するモジュールを移動したりとか。
どうしても名前がかぶるってときは英語名や日本語名
ときには中国語とかも借用する(ただし英字を使う
ローマ字やピンイン表記)か密接に関係する事柄の
接頭辞をつけてる。
Haskellは個人の趣味・自己啓発の道具の範疇なので
参考にならないでしょうが…
名前がかぶるのはどこか機能がかぶってたりするかなと
型の使い方を見直したり組み合わせる関数を見直したり
所属するモジュールを移動したりとか。
どうしても名前がかぶるってときは英語名や日本語名
ときには中国語とかも借用する(ただし英字を使う
ローマ字やピンイン表記)か密接に関係する事柄の
接頭辞をつけてる。
583デフォルトの名無しさん
2019/10/19(土) 00:15:25.34ID:0X24TT// >>580
モナドで副作用・副作用もどきを扱えるけど
モナドの全てが副作用・副作用もどきを伴う
わけではないでしょ。
リストもMaybeもEitherもモナドとして扱う
定義はされているが別にそれをつなげても
副作用があるわけでなし。
モナドで副作用・副作用もどきを扱えるけど
モナドの全てが副作用・副作用もどきを伴う
わけではないでしょ。
リストもMaybeもEitherもモナドとして扱う
定義はされているが別にそれをつなげても
副作用があるわけでなし。
584デフォルトの名無しさん
2019/10/20(日) 21:44:47.02ID:5Lp8lBZ6 非決定計算やIOが同じモナドというククリで実現できるのが大変興味深いです
585デフォルトの名無しさん
2019/10/20(日) 23:54:14.30ID:Wg020iKs なぜそんなにお前らがモナドについてあーでもないこーでもないと話し合ってるのかがわからない
モナドなんていたってシンプルな考え方なのに
モナドなんて単純にどうやって関数を合成するかというルールにすぎない
より正確には、「モナディックな関数」を合成するルール
では、モナディックな関数とは?それは"装飾された値"を返す関数のこと。
どんな装飾が施されたかについては、文脈によって様々だが、たとえば…
・エラー -> 失敗を表すデータもとりうる値 MaybeとかEither Error
・非決定性 -> いくつもの値を同時に表す値 List, Array
・副作用 -> 副作用自体を表すデータ Effect, Aff
・状態を扱う -> 状態を表すデータとセットになった値 Reader , Writer, State
モナドなんていたってシンプルな考え方なのに
モナドなんて単純にどうやって関数を合成するかというルールにすぎない
より正確には、「モナディックな関数」を合成するルール
では、モナディックな関数とは?それは"装飾された値"を返す関数のこと。
どんな装飾が施されたかについては、文脈によって様々だが、たとえば…
・エラー -> 失敗を表すデータもとりうる値 MaybeとかEither Error
・非決定性 -> いくつもの値を同時に表す値 List, Array
・副作用 -> 副作用自体を表すデータ Effect, Aff
・状態を扱う -> 状態を表すデータとセットになった値 Reader , Writer, State
586デフォルトの名無しさん
2019/10/21(月) 00:25:00.67ID:4Py1bsIM シンプルな考え方合成ルールといいつつ
肝心のルールの中身を説明しないで
利点や応用分野のみ紹介する
典型的な日本人話法
モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?
肝心のルールの中身を説明しないで
利点や応用分野のみ紹介する
典型的な日本人話法
モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?
587デフォルトの名無しさん
2019/10/21(月) 00:50:05.83ID:tyOGJJBt いやだから装飾のされ方は物によって様々だって言ってるじゃん
ルールの中身も当然装飾のされ方によって様々なんだから画一的に述べられないってわからないか?
一つ言えるのはbindとpureの定義を与えるってことくらいだが
あるいは同値な定義だが、関手であることを要請した上でjoinとreturnを与えるのでも構わない
数学者のモナドの定義を述べているお前ならこっちのほうが好みかもな
ルールの中身も当然装飾のされ方によって様々なんだから画一的に述べられないってわからないか?
一つ言えるのはbindとpureの定義を与えるってことくらいだが
あるいは同値な定義だが、関手であることを要請した上でjoinとreturnを与えるのでも構わない
数学者のモナドの定義を述べているお前ならこっちのほうが好みかもな
588デフォルトの名無しさん
2019/10/21(月) 11:02:55.47ID:Spzp+9MC 「自己関手の圏」の中身を説明しないからわけがわからない
関手の合成は積?
恒等関手は単位対象だが終対象ではない?
うっかり始対象になったりしたらそれ積じゃなくて和じゃないか
関手の合成は積?
恒等関手は単位対象だが終対象ではない?
うっかり始対象になったりしたらそれ積じゃなくて和じゃないか
589デフォルトの名無しさん
2019/10/21(月) 12:39:15.34ID:4Py1bsIM 中身は数学で明示されてるのでは
590デフォルトの名無しさん
2019/10/21(月) 14:07:32.87ID:Fq1X48Cm 自己関手の圏におけるモノイド対象としてモナドを理解することは、必ずしもプログラミングのためになるものではないから必須ではない。
それでもそれを理解したいのであれば、プログラミングの文脈で理解するのではなくて、ちゃんと圏論の文脈で理解した方がいい。
Bartosz MilewskiのCategory theory for programmerがわかりやすくておすすめ。
それでもそれを理解したいのであれば、プログラミングの文脈で理解するのではなくて、ちゃんと圏論の文脈で理解した方がいい。
Bartosz MilewskiのCategory theory for programmerがわかりやすくておすすめ。
591デフォルトの名無しさん
2019/10/21(月) 14:17:03.91ID:2JzHnDoh 【僕用メモ】
・bind と pure の定義を与える
・関手であることを要請した上で join と return の定義を与える
両者は同値である。
・bind と pure の定義を与える
・関手であることを要請した上で join と return の定義を与える
両者は同値である。
592デフォルトの名無しさん
2019/10/21(月) 14:44:27.76ID:VTam/Iyy だめな理系人間の特徴
初学者に対してひたすらwhatを説明
だいたいコミュ障を併発してる
初学者に対してひたすらwhatを説明
だいたいコミュ障を併発してる
593デフォルトの名無しさん
2019/10/21(月) 14:53:31.64ID:c9dhXgWB594デフォルトの名無しさん
2019/10/21(月) 15:19:59.07ID:ZzgPuxVR >>593
そうでもなくね? っていうか内容がHaskellに関係なかったw
そうでもなくね? っていうか内容がHaskellに関係なかったw
595デフォルトの名無しさん
2019/10/21(月) 15:38:45.76ID:E4DE6I01 お前らって圏論なにで勉強したの
英語の本読んだの?大学の授業とかで習ったの?
英語の本読んだの?大学の授業とかで習ったの?
596デフォルトの名無しさん
2019/10/21(月) 15:49:09.35ID:niRnsl0k 数学の本買って独学
597デフォルトの名無しさん
2019/10/21(月) 16:22:57.20ID:5+ah6i6T 知らん用語が出て来るから初学者で戸惑う人が多いだろうが
内容は小学生でも理解出来るレベル
内容は小学生でも理解出来るレベル
598デフォルトの名無しさん
2019/10/21(月) 16:52:11.20ID:D03iscrb Basic Category Theory, Tom Leinster
英語で読んだ
英語で読んだ
>>598
翻訳でもない和書ってありませんかね…
翻訳でもない和書ってありませんかね…
600デフォルトの名無しさん
2019/10/22(火) 02:26:17.25ID:Y6ckqEQv >>595
数学教室 πの焼き方と、プログラマーのための圏論。
ただ、読んだ後に意味を吟味して閃きが必要だった。
まず普通の関数とモナドな関数を同じと見做す考え。
IOモナドの入力は基本、文字列を受け取るので数文字列を受け取って、整数に変換後2倍する関数を作るとする。
getLine >>= \s -> return $ 2 * read s
これと同じ効果の普通の関数を作ってみる。
getLine’ s = 2 * read s
このgetLineとgetLine’をそれぞれ部分適用で見かけの変数を減らす形に変形。
getLine >>= return.(2*).read
getLine’ = (2*).read
この場合、2つの関数は型と引数からの入力か入力装置からの入力かしか違いがない。
関数の中身から見れば、いつ、どんな文字列が来るか分からない。同じ数文字列が来たら同じ結果を返すと言う意味では同じと見なせる。
数学教室 πの焼き方と、プログラマーのための圏論。
ただ、読んだ後に意味を吟味して閃きが必要だった。
まず普通の関数とモナドな関数を同じと見做す考え。
IOモナドの入力は基本、文字列を受け取るので数文字列を受け取って、整数に変換後2倍する関数を作るとする。
getLine >>= \s -> return $ 2 * read s
これと同じ効果の普通の関数を作ってみる。
getLine’ s = 2 * read s
このgetLineとgetLine’をそれぞれ部分適用で見かけの変数を減らす形に変形。
getLine >>= return.(2*).read
getLine’ = (2*).read
この場合、2つの関数は型と引数からの入力か入力装置からの入力かしか違いがない。
関数の中身から見れば、いつ、どんな文字列が来るか分からない。同じ数文字列が来たら同じ結果を返すと言う意味では同じと見なせる。
601デフォルトの名無しさん
2019/10/22(火) 02:26:29.61ID:Y6ckqEQv そして、圏論の主張は変数は引数無しの関数でも有ると言う事。
以下は関数である。
f x = 2 * x
しかし、部分適用されたカリー化関数は関数でもあり、変数でもある。
f = (2*) (関数でもあり、関数という値を返す変数でもある)
すなわち、x = 1のようなただの変数も、つねに1を返すxと言う引数の無い関数と見なせる。
x = 1 (1と言う値の入った変数であり、常に1を返す引数無しの関数でもある)
Haskellでは表現できないものの、さらに言えば数そのものも圏論では値であり、変数であり、関数である。
単純に書くと以下の通りだが、
1 = 1
ペアノの公理(ペアノ数)を使った方が概念的に分かりやすいかも知れない。
data Nat = Zero | Succ Nat
1 = Succ Zero
以下は関数である。
f x = 2 * x
しかし、部分適用されたカリー化関数は関数でもあり、変数でもある。
f = (2*) (関数でもあり、関数という値を返す変数でもある)
すなわち、x = 1のようなただの変数も、つねに1を返すxと言う引数の無い関数と見なせる。
x = 1 (1と言う値の入った変数であり、常に1を返す引数無しの関数でもある)
Haskellでは表現できないものの、さらに言えば数そのものも圏論では値であり、変数であり、関数である。
単純に書くと以下の通りだが、
1 = 1
ペアノの公理(ペアノ数)を使った方が概念的に分かりやすいかも知れない。
data Nat = Zero | Succ Nat
1 = Succ Zero
602デフォルトの名無しさん
2019/10/22(火) 03:15:18.03ID:Id5sXRgE603デフォルトの名無しさん
2019/10/22(火) 07:00:59.60ID:bWQbmCi2 >>590
youtubeにある彼のビデオレクチャーも良いよ
youtubeにある彼のビデオレクチャーも良いよ
604デフォルトの名無しさん
2019/10/22(火) 11:37:49.35ID:QfoZv31s モノイドのところがよくわからんかったけど読み物として面白かった
https://chrispenner.ca/posts/wc
https://chrispenner.ca/posts/wc
605デフォルトの名無しさん
2019/10/22(火) 13:56:22.87ID:bWQbmCi2606デフォルトの名無しさん
2019/10/22(火) 21:21:34.69ID:r5HMg/cf >>601
>数そのものも圏論では値であり、変数であり、関数である。
もしその様な表現が可能な拡張がされた場合何が起きる出来るんですか?
数値に新規の型を設定して値で変数で関数みたいな扱い出来ないかな
>数そのものも圏論では値であり、変数であり、関数である。
もしその様な表現が可能な拡張がされた場合何が起きる出来るんですか?
数値に新規の型を設定して値で変数で関数みたいな扱い出来ないかな
607デフォルトの名無しさん
2019/10/22(火) 21:31:09.36ID:mzkWHCb9 圏論うろおぼえだけどそれって圏論の範疇だっけ?
圏論ってマッピングする理論であってその対象が値か関数か変数か関知しないのでは?
値が関数ってのはラムダ計算から来るものでしょ
確かにそれらを組み合わせて計算理論になるわけだけど
圏論ってマッピングする理論であってその対象が値か関数か変数か関知しないのでは?
値が関数ってのはラムダ計算から来るものでしょ
確かにそれらを組み合わせて計算理論になるわけだけど
608デフォルトの名無しさん
2019/10/23(水) 02:22:17.73ID:yKBkbeD2 >>601
お前が圏論を全く理解していないことは良くわかった
圏論には「関数」とか「値」とか「変数」といった概念はない
「対象」と「射」との2つの概念があるだけだ
だからお前の次の
>数そのものも圏論では値であり、変数であり、関数である
これは単なる間違いさえ通り越して全くのナンセンス
圏論には値も変数も関数も存在しないのだから
何を対象として何を射とするかは個々の具体的な圏によって異なる
お前が圏論を全く理解していないことは良くわかった
圏論には「関数」とか「値」とか「変数」といった概念はない
「対象」と「射」との2つの概念があるだけだ
だからお前の次の
>数そのものも圏論では値であり、変数であり、関数である
これは単なる間違いさえ通り越して全くのナンセンス
圏論には値も変数も関数も存在しないのだから
何を対象として何を射とするかは個々の具体的な圏によって異なる
609デフォルトの名無しさん
2019/10/23(水) 02:25:20.92ID:yKBkbeD2610デフォルトの名無しさん
2019/10/23(水) 02:29:17.74ID:yKBkbeD2611デフォルトの名無しさん
2019/10/23(水) 03:34:04.69ID:yprcaBdP では何らかの制限がないと取り扱いが難しいよね
例えば英語と日本語の翻訳で使われる意味を咀嚼変換するロジックを圏論だと言われたら
なんか凄く難しそうだなとか
例えば英語と日本語の翻訳で使われる意味を咀嚼変換するロジックを圏論だと言われたら
なんか凄く難しそうだなとか
612デフォルトの名無しさん
2019/10/23(水) 07:48:02.01ID:w9X9/NZW 別に集合論だって写像の集合を考えればいいわけでそんなのは圏論を持ち出さなくても十分
重要なのは圏論は写像の合成(関数合成)を抽象化して扱う理論だということで
だからこそa -> IO bを射とする圏を作れればそこでの射の合成方法は普通の関数合成と同じように扱える
で実際にIOはクライスリトリプル(Monadのインスタンス)を定義できるからa -> IO bを射とするクライスリ圏が定義できる
重要なのは圏論は写像の合成(関数合成)を抽象化して扱う理論だということで
だからこそa -> IO bを射とする圏を作れればそこでの射の合成方法は普通の関数合成と同じように扱える
で実際にIOはクライスリトリプル(Monadのインスタンス)を定義できるからa -> IO bを射とするクライスリ圏が定義できる
613デフォルトの名無しさん
2019/10/23(水) 15:46:04.24ID:QE7mhz5K 質問です。
当方数学科卒で学生時代圏論は死ぬほど使ってました。
しかしアーベル圏という純数学的なお話知ってるだけで、計算論に応用する話は全く勉強した事ない状態です。
そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
当方数学科卒で学生時代圏論は死ぬほど使ってました。
しかしアーベル圏という純数学的なお話知ってるだけで、計算論に応用する話は全く勉強した事ない状態です。
そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
614デフォルトの名無しさん
2019/10/23(水) 18:37:44.76ID:EHUlBTzl そこまで圏論に詳しいなら逆に世の中の有象無象の情報処理の実態を
見て新しい提案ができるんじゃないかと思うけどどう?
見て新しい提案ができるんじゃないかと思うけどどう?
615デフォルトの名無しさん
2019/10/23(水) 18:48:53.05ID:FecPQc4e 型推論とモナドがわかったら解散でいいじゃん
だらだら続けるとサンクコストが増える
だらだら続けるとサンクコストが増える
616デフォルトの名無しさん
2019/10/23(水) 20:01:33.78ID:r6mLYpNF 浮動小数演算みたいなある種のモナド則が成り立たんものを考えると、
逆にモナド則のありがたさがわかる。
そんな程度で十分だよ。
逆にモナド則のありがたさがわかる。
そんな程度で十分だよ。
617デフォルトの名無しさん
2019/10/23(水) 22:29:52.97ID:0mQ7NQWB どちらかと言えば、モノイドの方が役に立つ
618デフォルトの名無しさん
2019/10/23(水) 22:51:28.42ID:MhItXVwr 浮動小数点のモナド?
モナド則の結合律っぽい奴は普通の関数で言うなら
f (g x) == (f . g y) x を要請してるのであって
f,gの計算には依存しないから浮動小数点が破壊することはないよ
モナド則の結合律っぽい奴は普通の関数で言うなら
f (g x) == (f . g y) x を要請してるのであって
f,gの計算には依存しないから浮動小数点が破壊することはないよ
619デフォルトの名無しさん
2019/10/23(水) 22:55:47.94ID:MhItXVwr ミス f (g x) == (f . g) x だった
620デフォルトの名無しさん
2019/10/24(木) 01:14:02.96ID:iVnwkALy f x = x / 0.3
g x = x * 0.3
g x = x * 0.3
621デフォルトの名無しさん
2019/10/24(木) 01:19:57.43ID:iVnwkALy ghci でやってみたら循環小数にならなかった。macOSの電卓でも。
へぇ〜。
へぇ〜。
622デフォルトの名無しさん
2019/10/24(木) 01:57:21.20ID:/X6zPP1d >>613
> そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
> 抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
理論計算機科学(以下、TCSと略)への圏論の応用を勉強したいのならば、最もベーシックなテキストとしては
1. Andrea Asperti & Giuseppe Longo: Categories, Types, and Structures, 306+xii pp., MIT Press (1991)
型理論として単純型付きλ計算と2階の型付きλ計算それぞれに対する圏論的意味論を議論している他、
型無しλ計算の意味論を展開する上で不可欠な再帰的領域方程式とその解に対する圏論的な見方も解説している。
更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
本書の著者の1人であるLongoの論文から全てが始まった)
この本の最大の欠点は誤植がとても多いことと昔のMacで書かれていてテキスト中の数式も図も美しくないことだ。
なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
2. Roy L. Crole: Categories for Types, 335+xvii pp., Cambridge University Press (1993)
様々な型理論(型理論は(関数)プログラミング言語とその型システムを形式的体系としたものと考えて良い)に対する圏論的意味論を議論している。
3. 横内寛文:プログラム意味論,261+vi pp.,共立出版 (1994)
久しく品切れになっていたが少し前に増刷されたので現在はジュンク堂などの大型書店などの店頭で買えるはず。
表示的意味論、型無し・型付きλ計算、領域理論、関数型言語の意味論について1つずつ章を設けて解説した後、この本で必要とする圏論の解説がされ、
プログラミング言語の表示的意味論で必須の再帰的領域方程式とその解法に対する圏論からのアプローチと
λ計算の意味論としてλモデル・λ代数・圏論的モデルとしてのCCC(デカルト閉圏あるいは積閉包圏)について解説している。
この他にもTCSへの圏論の応用としてはオートマトン理論への応用や代数的仕様記述言語の意味論への圏論の応用
(こちらの意味論ではデカルト閉圏は使われない)などがある。
> そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
> 抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
理論計算機科学(以下、TCSと略)への圏論の応用を勉強したいのならば、最もベーシックなテキストとしては
1. Andrea Asperti & Giuseppe Longo: Categories, Types, and Structures, 306+xii pp., MIT Press (1991)
型理論として単純型付きλ計算と2階の型付きλ計算それぞれに対する圏論的意味論を議論している他、
型無しλ計算の意味論を展開する上で不可欠な再帰的領域方程式とその解に対する圏論的な見方も解説している。
更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
本書の著者の1人であるLongoの論文から全てが始まった)
この本の最大の欠点は誤植がとても多いことと昔のMacで書かれていてテキスト中の数式も図も美しくないことだ。
なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
2. Roy L. Crole: Categories for Types, 335+xvii pp., Cambridge University Press (1993)
様々な型理論(型理論は(関数)プログラミング言語とその型システムを形式的体系としたものと考えて良い)に対する圏論的意味論を議論している。
3. 横内寛文:プログラム意味論,261+vi pp.,共立出版 (1994)
久しく品切れになっていたが少し前に増刷されたので現在はジュンク堂などの大型書店などの店頭で買えるはず。
表示的意味論、型無し・型付きλ計算、領域理論、関数型言語の意味論について1つずつ章を設けて解説した後、この本で必要とする圏論の解説がされ、
プログラミング言語の表示的意味論で必須の再帰的領域方程式とその解法に対する圏論からのアプローチと
λ計算の意味論としてλモデル・λ代数・圏論的モデルとしてのCCC(デカルト閉圏あるいは積閉包圏)について解説している。
この他にもTCSへの圏論の応用としてはオートマトン理論への応用や代数的仕様記述言語の意味論への圏論の応用
(こちらの意味論ではデカルト閉圏は使われない)などがある。
623デフォルトの名無しさん
2019/10/24(木) 02:41:27.79ID:/X6zPP1d >>622訂正と補足
まず1に関する説明中の次の箇所を訂正します。つい筆が滑ってKleisliをKreiselと書いてしまった。
誤> 更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
正> 更にHaskellなどで喧しいモナドやKleisli圏についても解説している。(関数プログラミング言語へのモナドの応用は
それから、
> なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
と書いたが、無料の電子版は著者の一人であるLongoの次のURLよりPDFファイルの形で配布されている。
https://www.di.ens.fr/users/longo/files/CategTypesStructures/book.pdf
まず1に関する説明中の次の箇所を訂正します。つい筆が滑ってKleisliをKreiselと書いてしまった。
誤> 更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
正> 更にHaskellなどで喧しいモナドやKleisli圏についても解説している。(関数プログラミング言語へのモナドの応用は
それから、
> なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
と書いたが、無料の電子版は著者の一人であるLongoの次のURLよりPDFファイルの形で配布されている。
https://www.di.ens.fr/users/longo/files/CategTypesStructures/book.pdf
624デフォルトの名無しさん
2019/10/24(木) 09:09:56.34ID:M5uvwdA8625デフォルトの名無しさん
2019/10/24(木) 19:35:38.99ID:iMDLzbYl626デフォルトの名無しさん
2019/10/24(木) 19:42:56.62ID:M5uvwdA8 いやモナド則で語ることなんて結合律以外ないだろ。。
結合律を無条件で仮定できる状況がどれほど負担を減らすかって話なんだが
ここまでバカな絡まれ方するとは思わなかった。
結合律を無条件で仮定できる状況がどれほど負担を減らすかって話なんだが
ここまでバカな絡まれ方するとは思わなかった。
627デフォルトの名無しさん
2019/10/24(木) 19:50:34.49ID:iMDLzbYl ああ、printFile file == readFile file >>= putStrLn だった
しかもそれも誤解しか生まない表現で
要はreadFile file >>= putStrLnをprintFileで置き換えても問題ないってことを言いたかったんだけど
いやほんと5ch向いてないね
しかもそれも誤解しか生まない表現で
要はreadFile file >>= putStrLnをprintFileで置き換えても問題ないってことを言いたかったんだけど
いやほんと5ch向いてないね
628デフォルトの名無しさん
2019/10/24(木) 20:08:28.59ID:3BngmFUW >>627
なんか、あんたは気持ち悪いね
なんか、あんたは気持ち悪いね
629デフォルトの名無しさん
2019/10/24(木) 20:16:05.76ID:iMDLzbYl630デフォルトの名無しさん
2019/10/24(木) 20:22:28.52ID:y9mzZKfZ 単位元を語ってもええんやで
631デフォルトの名無しさん
2019/10/25(金) 04:29:07.52ID:2bZjXkn1 >>629
前提として「足し算の結合律って便利だね」
じゃ足りないの
何が不足なのかな
副作用をモナドの結合連鎖外に及ぼさない事による恩恵が主目的じゃないの?
とくにマルチスレッドコア環境だと色々有難いよね
モナド連鎖の組み合わせとか組み替えとかがスカッとできてイイ!とか
連鎖の中で起きたエラーのリカバリーとかはよくわからん
前提として「足し算の結合律って便利だね」
じゃ足りないの
何が不足なのかな
副作用をモナドの結合連鎖外に及ぼさない事による恩恵が主目的じゃないの?
とくにマルチスレッドコア環境だと色々有難いよね
モナド連鎖の組み合わせとか組み替えとかがスカッとできてイイ!とか
連鎖の中で起きたエラーのリカバリーとかはよくわからん
632デフォルトの名無しさん
2019/10/25(金) 08:07:43.53ID:39WP6mHi >>631
モナドが実際の所どれぐらい便利なのかは分からないけど
(m >>= f) >>= g == m >>= (\x -> f x >>= g)
が言ってることは単純なんだよ
>>=が普通の関数呼び出しのように使えるというだけ
$(普通の関数呼び出しを演算子化したもの)の場合を考えれば分かりやすいかな
g $ (f $ x) == (\y -> g $ (f $ y)) $ x
関数と値の引数が$と>>=では逆だから両辺が逆向きになってるけど
要するに二つの関数を一つの関数まとめても構わないという
誰もが当たり前にやってることの理論的基盤を>>=にも要請してるというだけなんだよ
だから getLine >>= printFile と getLine >>= readFile >>= putStrLn
が同じだと言うためにはこの結合律を満たさなきゃならない
ちなみに二個以上の関数をまとめ上げる場合や多引数の場合もこれで証明できる
モナドが実際の所どれぐらい便利なのかは分からないけど
(m >>= f) >>= g == m >>= (\x -> f x >>= g)
が言ってることは単純なんだよ
>>=が普通の関数呼び出しのように使えるというだけ
$(普通の関数呼び出しを演算子化したもの)の場合を考えれば分かりやすいかな
g $ (f $ x) == (\y -> g $ (f $ y)) $ x
関数と値の引数が$と>>=では逆だから両辺が逆向きになってるけど
要するに二つの関数を一つの関数まとめても構わないという
誰もが当たり前にやってることの理論的基盤を>>=にも要請してるというだけなんだよ
だから getLine >>= printFile と getLine >>= readFile >>= putStrLn
が同じだと言うためにはこの結合律を満たさなきゃならない
ちなみに二個以上の関数をまとめ上げる場合や多引数の場合もこれで証明できる
633デフォルトの名無しさん
2019/10/25(金) 08:33:13.53ID:2bZjXkn1 >>632
モナドの条件が成立すると色々便利な事は認識している
端緒の認識はそれで問題ないと思ったけど
便利だよねって見解が
>こんな糞みたいな主張をする人間が世の中にいることぐらいは分かっておくべきだった
って言われて、え?え?何かマズイ理解なり認識があるのか??
何がマズいのかワカラン??って感想
単純に罵倒してマウント取りたかっただけなら問題ない
モナドの条件が成立すると色々便利な事は認識している
端緒の認識はそれで問題ないと思ったけど
便利だよねって見解が
>こんな糞みたいな主張をする人間が世の中にいることぐらいは分かっておくべきだった
って言われて、え?え?何かマズイ理解なり認識があるのか??
何がマズいのかワカラン??って感想
単純に罵倒してマウント取りたかっただけなら問題ない
634デフォルトの名無しさん
2019/10/25(金) 09:19:09.32ID:dpM8h0bh >>624見たとき何言ってんだコイツと思ったが案の定ボコされてて安心した
論理的な思考ができない人間って怖いわ
論理的な思考ができない人間って怖いわ
635デフォルトの名無しさん
2019/10/25(金) 11:27:36.73ID:2bZjXkn1636デフォルトの名無しさん
2019/10/25(金) 18:07:06.47ID:mPFGj3TJ637デフォルトの名無しさん
2019/10/25(金) 18:15:13.95ID:lPbrkHzC >>633
三段論法的なのが糞だって言ってるだけでその部分は別に間違ってないよ
まあマウンティングするつもりはないんだが
曖昧なこと言っといてそれについて意見したら「バカに絡まれた」なんて
そりゃ感情的にもなるよ確かに大人げないけどさ
三段論法的なのが糞だって言ってるだけでその部分は別に間違ってないよ
まあマウンティングするつもりはないんだが
曖昧なこと言っといてそれについて意見したら「バカに絡まれた」なんて
そりゃ感情的にもなるよ確かに大人げないけどさ
638デフォルトの名無しさん
2019/10/25(金) 18:32:47.40ID:lPbrkHzC639デフォルトの名無しさん
2019/10/25(金) 19:57:54.15ID:jaw68O5t まあかなり意地の悪い例を出したつもりではあったけどね。
「論理的思考」とか言い出す輩が引っかかりそうな例を。
「論理的思考」とか言い出す輩が引っかかりそうな例を。
640デフォルトの名無しさん
2019/10/25(金) 20:50:12.32ID:8KDPUxpr どうでもいいけど「論理的アルゴリズム」だったら簡単にコピーできそう
アルゴリズムとパラダイムの違いの一つは、コピーする自由
アルゴリズムとパラダイムの違いの一つは、コピーする自由
641デフォルトの名無しさん
2019/10/26(土) 00:21:14.14ID:ud4Mu1os モナドの話してる中で一人結合則全般についての話始めて浮動小数点数に関する当たり前の説明せっせとしてんのは草
小学校で習う掛け算も足し算もモナドみたいに便利だけど浮動小数点数はモナドと違って不便だねえ
小学校で習う掛け算も足し算もモナドみたいに便利だけど浮動小数点数はモナドと違って不便だねえ
642デフォルトの名無しさん
2019/10/26(土) 10:10:55.84ID:e6NVGnmw 最近近隣スレで浮動小数点数で恥ずかしい書き込みを繰り返してる香具師を観かけたが
きっとCS知らない浮動小数点数覚えたての厨房が暴れてるんだろう
きっとCS知らない浮動小数点数覚えたての厨房が暴れてるんだろう
643デフォルトの名無しさん
2019/10/26(土) 10:22:10.08ID:az5oKcRh 素人なので確認したい
浮動小数点演算は計算式の組み替えによって生じる
計算ごとの丸め誤差とその蓄積が一意ではない
そこが問題。でいいですか?
浮動小数点演算は計算式の組み替えによって生じる
計算ごとの丸め誤差とその蓄積が一意ではない
そこが問題。でいいですか?
644デフォルトの名無しさん
2019/10/26(土) 12:52:46.96ID:751XFDvk 例えば、3桁の有限桁数で、
123,000 + 987 は、どうなると思う?w
123,000 + 987 は、どうなると思う?w
645デフォルトの名無しさん
2019/10/26(土) 13:03:31.77ID:az5oKcRh646デフォルトの名無しさん
2019/10/27(日) 09:39:17.43ID:E41dDRFH647デフォルトの名無しさん
2019/10/27(日) 12:11:44.86ID:5vE1lFai ヒント
(123000 + 987) + 456
123000 + (987 + 456)
(123000 + 987) + 456
123000 + (987 + 456)
648デフォルトの名無しさん
2019/10/27(日) 12:20:50.14ID:+UrB7+Fx >647
有効桁数3の条件下では
443
443
で結合則?を満たしている
有効桁数3の条件下では
443
443
で結合則?を満たしている
649デフォルトの名無しさん
2019/10/27(日) 14:13:05.51ID:E41dDRFH650デフォルトの名無しさん
2019/10/27(日) 20:56:25.06ID:5vE1lFai >>649
最初からも何も最初言ったの俺じゃないし誰でも気づくだろ
最初からも何も最初言ったの俺じゃないし誰でも気づくだろ
651デフォルトの名無しさん
2019/10/28(月) 15:11:56.47ID:CizzAz3Z 恥の上塗り
652デフォルトの名無しさん
2019/10/31(木) 16:11:16.19ID:Q9035W3u 最近のHaskellは末尾再帰形は当たり前として、余再帰形まで最適化するってマジ?
653デフォルトの名無しさん
2019/10/31(木) 19:47:56.88ID:+pnqrJiF モナドの話すると怒る人が一定数いるのに
最適化の話は難解でもすんなり受け入れられるのなんでだろう
最適化の話は難解でもすんなり受け入れられるのなんでだろう
654デフォルトの名無しさん
2019/10/31(木) 19:53:32.58ID:PeiHf3lU655デフォルトの名無しさん
2019/10/31(木) 20:01:53.96ID:0babd/Ur 年寄りが自分の理解できないことをしゃべるなって
いっているだけでしょ。最適化はなんだかんだいっ
て実践もしくはなんとか理解できる範疇とかでは。
いっているだけでしょ。最適化はなんだかんだいっ
て実践もしくはなんとか理解できる範疇とかでは。
656デフォルトの名無しさん
2019/10/31(木) 20:08:46.83ID:+pnqrJiF 例えば「馬鹿っぽい」の定義はモナドの定義よりもずっと複雑なんだよ
そのわりに「馬鹿っぽい」は難解すぎるという認識はほとんどない
そのわりに「馬鹿っぽい」は難解すぎるという認識はほとんどない
657デフォルトの名無しさん
2019/10/31(木) 21:33:19.89ID:0babd/Ur Haskellや圏論のモナドってライプニッツ由来?ギリシャ哲学由来?
658デフォルトの名無しさん
2019/10/31(木) 22:15:10.01ID:ZttcTVl1 モナドの場合、「俺の理解は正しくて、お前の理解は間違ってる」てな話になりがちだから。
659デフォルトの名無しさん
2019/11/02(土) 11:54:49.10ID:8EQu8ULJ660デフォルトの名無しさん
2019/11/02(土) 21:23:26.95ID:3BGLXMdU 【ぼくようメモ】
Haskellはマルチディスパッチをネイティブサポートしているので、
デザインパターンの一つ、Visitorパターンを気づかない内に使っている。
Haskellはマルチディスパッチをネイティブサポートしているので、
デザインパターンの一つ、Visitorパターンを気づかない内に使っている。
661デフォルトの名無しさん
2019/11/02(土) 22:57:22.40ID:r3wI6psG Haskellを勉強するとどんなメリットが有りますか?
@ Haskellを使って仕事する開発プロジェクトなんてものは世の中に有るのですか?
A @が無いなら開発プロジェクトが無くても仕事の効率化などで、役立てる方法は有るのですか?
B Aも無いなら、勉強して得た知識を日々のJava等の開発プロジェクトで役立てる方法は有るのですか?
@ Haskellを使って仕事する開発プロジェクトなんてものは世の中に有るのですか?
A @が無いなら開発プロジェクトが無くても仕事の効率化などで、役立てる方法は有るのですか?
B Aも無いなら、勉強して得た知識を日々のJava等の開発プロジェクトで役立てる方法は有るのですか?
662デフォルトの名無しさん
2019/11/02(土) 23:45:55.62ID:lY37zOLC 3かな。
コード書く際に
入出力部分と、ディターミニスティックな部分を選り分けるような書き方するようになった。
コード書く際に
入出力部分と、ディターミニスティックな部分を選り分けるような書き方するようになった。
663デフォルトの名無しさん
2019/11/03(日) 00:23:07.97ID:lUqXCL2k >>661
世界に目を向ければ、Reddit でよく求人されてる
世界に目を向ければ、Reddit でよく求人されてる
664デフォルトの名無しさん
2019/11/03(日) 07:05:59.77ID:SWWLrIVQ665デフォルトの名無しさん
2019/11/03(日) 07:44:37.10ID:lUqXCL2k >>664
ディターミニスティック
決定論的な
IOが絡む非決定論的なコードと、引数と戻り値の関係が決まっている決定論的なコードとを、
しっかり分けて書けるようになったと言いたいのだろう。
要するに、副作用のあるコードと純粋なコードを分けるということだ。
ディターミニスティック
決定論的な
IOが絡む非決定論的なコードと、引数と戻り値の関係が決まっている決定論的なコードとを、
しっかり分けて書けるようになったと言いたいのだろう。
要するに、副作用のあるコードと純粋なコードを分けるということだ。
666デフォルトの名無しさん
2019/11/03(日) 10:14:27.60ID:9HD8E/jN 女心と秋の空はデバッグするのが難しいってことだ
667661
2019/11/03(日) 12:44:26.49ID:phxg68Jk 皆さんありがとうございます。
どうやら、あまり勉強する意味がなさそうに感じました。
なぜみなさんはこの言語をおやりになっているのでしょうか?
趣味でしょうか?
どうやら、あまり勉強する意味がなさそうに感じました。
なぜみなさんはこの言語をおやりになっているのでしょうか?
趣味でしょうか?
668デフォルトの名無しさん
2019/11/03(日) 12:48:35.08ID:r9lfrX/A まあ勉強する意味はないといえばないかな。
その当時盛り上がったってのが理由だったりするから趣味といえば趣味。
でもまあその言語がどういうところを気にして作られたかってのを
触って実感するってのはプログラム全般で役に立つと俺は思うけどね。
その当時盛り上がったってのが理由だったりするから趣味といえば趣味。
でもまあその言語がどういうところを気にして作られたかってのを
触って実感するってのはプログラム全般で役に立つと俺は思うけどね。
669デフォルトの名無しさん
2019/11/03(日) 13:13:12.24ID:phxg68Jk Javaから初めて、Javaしか書いたことが無い人というのは再帰メソッドとして実装した方が良いものも、慣れていないし面倒くさいからという理由で再帰にしたがらない傾向が有ります。
Hakellを勉強した人間なら、そういうことが起こらないという利点が有るといいうことでしょうか?
Hakellを勉強した人間なら、そういうことが起こらないという利点が有るといいうことでしょうか?
670デフォルトの名無しさん
2019/11/03(日) 14:27:23.33ID:9HD8E/jN 将棋の居飛車党と振り飛車党みたいなもん
671デフォルトの名無しさん
2019/11/03(日) 14:42:14.64ID:A+q4He3F ループより再帰がいつも正しいわけではないでしょ
Javaなんだし
おれが仕事でやってるプロジェクトでは再帰は基本NGだよ
Javaなんだし
おれが仕事でやってるプロジェクトでは再帰は基本NGだよ
672デフォルトの名無しさん
2019/11/03(日) 15:00:10.66ID:smmSGOst ループと末尾再帰は等価(キリっω
673デフォルトの名無しさん
2019/11/03(日) 15:01:32.59ID:b8FiTQTP haskell学んでも、stack safeな再帰を書けるようになるわけでもないから、
haskellを学ぶ利点だとは思わない
理由を探さなきゃ学ぶ気になれないものには手を出さなければいいんだよ
CSの世界に限っても死ぬまでに学びきれないだけのネタがあるんだし
haskellを学ぶ利点だとは思わない
理由を探さなきゃ学ぶ気になれないものには手を出さなければいいんだよ
CSの世界に限っても死ぬまでに学びきれないだけのネタがあるんだし
674デフォルトの名無しさん
2019/11/03(日) 16:32:47.09ID:nhaRMy12 『達人プログラマー』でも「毎年1つ新しい言語を学べ」と言っている
まあ凡人にそこまでは厳しくとも
たまに新しいプログラミング・パラダイムに触れることは
プログラマーにとって有益であると思うよ
それは知識として即効性のあるものというよりは(そういうのもあるかもしれないが)
1年2年経って効いてくるタイプのものかなと
まあ凡人にそこまでは厳しくとも
たまに新しいプログラミング・パラダイムに触れることは
プログラマーにとって有益であると思うよ
それは知識として即効性のあるものというよりは(そういうのもあるかもしれないが)
1年2年経って効いてくるタイプのものかなと
675デフォルトの名無しさん
2019/11/03(日) 18:49:00.94ID:AdH9k/oI >>661
Aかな
宣言的プログラミングの作法が身につく
普段Javaを使っているのなら、
最近のJavaは関数型プログラミングのシンタックスがかなり増えてきているので
Haskellで高階関数の使い方を理解しておくと、Javaプログラミングに直接的に役立つ
Aかな
宣言的プログラミングの作法が身につく
普段Javaを使っているのなら、
最近のJavaは関数型プログラミングのシンタックスがかなり増えてきているので
Haskellで高階関数の使い方を理解しておくと、Javaプログラミングに直接的に役立つ
676デフォルトの名無しさん
2019/11/03(日) 19:10:14.85ID:UDaenYuS 宣言的プログラミングとは何ですか
677デフォルトの名無しさん
2019/11/03(日) 20:02:00.41ID:JubniDAi 横レスだけど、そんなに役に立たないものなのか...
入門本買おうか悩んでたのに
入門本買おうか悩んでたのに
678デフォルトの名無しさん
2019/11/03(日) 20:22:26.22ID:SWWLrIVQ >>665
副作用ですか
Cのポインター辺りは副作用上等でトリッキーな事をしつつ記述してあるわけで
副作用と脆弱性に苦しんだ結果、RUST
Haskellの恐ろしい所はプログラムが何らかの高度な数学的アルゴリズムな場合があって
別途資料がないと全く理解できない
あっても以下略
副作用ですか
Cのポインター辺りは副作用上等でトリッキーな事をしつつ記述してあるわけで
副作用と脆弱性に苦しんだ結果、RUST
Haskellの恐ろしい所はプログラムが何らかの高度な数学的アルゴリズムな場合があって
別途資料がないと全く理解できない
あっても以下略
679デフォルトの名無しさん
2019/11/03(日) 20:59:17.59ID:phxg68Jk >>670
プロの世界では振り飛車は居飛車より勝ちにくいと言われますが、久保九段や菅井七段のようにそれを使って実践で勝つプロもいます。
アマの世界では振り飛車か居飛車かが直接勝敗に結びつくような高度な戦いができないので好きな方を選べばいいです。
ところが、ビジネスプログラミングの世界ではどうでしょうか?
残念ながら、手続き型プログラミング言語の開発プロジェクトしか存在しません。
関数型は使おうにも使う場所が無いのです。
プロの世界では振り飛車は居飛車より勝ちにくいと言われますが、久保九段や菅井七段のようにそれを使って実践で勝つプロもいます。
アマの世界では振り飛車か居飛車かが直接勝敗に結びつくような高度な戦いができないので好きな方を選べばいいです。
ところが、ビジネスプログラミングの世界ではどうでしょうか?
残念ながら、手続き型プログラミング言語の開発プロジェクトしか存在しません。
関数型は使おうにも使う場所が無いのです。
680デフォルトの名無しさん
2019/11/03(日) 21:02:48.17ID:A+q4He3F ないことはない
たとえIT土方業界であっても
たとえIT土方業界であっても
681デフォルトの名無しさん
2019/11/03(日) 21:12:52.97ID:j4VhEtAF682デフォルトの名無しさん
2019/11/03(日) 21:23:44.54ID:r9lfrX/A 宣言型を変にもてはやす記事とかあるけどさ、
あれバグがあるときに凄まじくデバッグしにくいってことはちゃんと知っておいた方がいいぞ。
あれバグがあるときに凄まじくデバッグしにくいってことはちゃんと知っておいた方がいいぞ。
683デフォルトの名無しさん
2019/11/03(日) 21:26:11.59ID:j4VhEtAF >>682
それはいくらなんでもド素人すぎるだろう
それはいくらなんでもド素人すぎるだろう
684デフォルトの名無しさん
2019/11/03(日) 21:44:19.05ID:r9lfrX/A >>683
多分、君は論理プログラミングとか制約プログラミングについて理解してないんだろう。
多分、君は論理プログラミングとか制約プログラミングについて理解してないんだろう。
685デフォルトの名無しさん
2019/11/03(日) 21:49:28.47ID:j4VhEtAF688デフォルトの名無しさん
2019/11/03(日) 21:59:29.92ID:A+q4He3F >>685
横からだけど
凡人にとっては数学的な静的な関係を見つけ出すのはしんどいことが多い
副作用あろうが、ソースコードをステップ実行でトレースできる手続き型の方が
問題解析が楽ってことは往々にしてある
横からだけど
凡人にとっては数学的な静的な関係を見つけ出すのはしんどいことが多い
副作用あろうが、ソースコードをステップ実行でトレースできる手続き型の方が
問題解析が楽ってことは往々にしてある
689デフォルトの名無しさん
2019/11/03(日) 22:04:59.57ID:nJ4Xpsy6690デフォルトの名無しさん
2019/11/03(日) 22:44:06.12ID:ksAXIGkW モナドって結局、計算効果Tをもたらすプログラム(T-プログラム)は
クライスリ圏をなすからクライスリトリプル(モナド)がT-プログラムの
合成規則として必要だから出てくる
クライスリ圏をなすからクライスリトリプル(モナド)がT-プログラムの
合成規則として必要だから出てくる
691デフォルトの名無しさん
2019/11/03(日) 22:45:11.48ID:A+q4He3F 駄目な理系君の典型
692デフォルトの名無しさん
2019/11/03(日) 22:56:40.83ID:l1Ex5n/D693デフォルトの名無しさん
2019/11/03(日) 23:34:12.73ID:/tZ0XI+t694デフォルトの名無しさん
2019/11/04(月) 05:48:03.18ID:PrFaR+H+ モナドの副作用云々は
Scala Monix の並列プログラミングも面白い
Scala Monix の並列プログラミングも面白い
695デフォルトの名無しさん
2019/11/04(月) 06:29:33.14ID:u0qouhFJ >>678
恐ろしさというよりも
Haskellの仕様その他聞くと全く関係ない数学の話をしだす奴ばかりでカンファレンス途中で抜けてきたことがある
数学には全く興味ないんだがね
言っても聞きやしないこいつらとは合わないわと思った
恐ろしさというよりも
Haskellの仕様その他聞くと全く関係ない数学の話をしだす奴ばかりでカンファレンス途中で抜けてきたことがある
数学には全く興味ないんだがね
言っても聞きやしないこいつらとは合わないわと思った
696デフォルトの名無しさん
2019/11/04(月) 07:07:21.47ID:PrFaR+H+ >>695
マジでHaskellは数学者が数学者の為にデザインしたみたいなものなので
ネット上のコードも数学的専門性に全振りしたものが普通にある
そんなのは数学の専門課程と無関係な人間には理解できない
だけど、英文の赤黒木を扱うHaskellのコードは恐ろしくスッキリ短くて
余分なノイズが少ない
全体の把握が楽だった、恐ろしく高密度かも
コメントで書く詳細説明≒Haskellのコード
マジでHaskellは数学者が数学者の為にデザインしたみたいなものなので
ネット上のコードも数学的専門性に全振りしたものが普通にある
そんなのは数学の専門課程と無関係な人間には理解できない
だけど、英文の赤黒木を扱うHaskellのコードは恐ろしくスッキリ短くて
余分なノイズが少ない
全体の把握が楽だった、恐ろしく高密度かも
コメントで書く詳細説明≒Haskellのコード
697デフォルトの名無しさん
2019/11/04(月) 12:15:05.55ID:GOdOYVw0 型の宣言だけならコードの中に埋め込むことはできた
だが数学の知識をすべて宣言するのは無理
だからコードを読みながら数学勉強しようと思ったら、わかることは静的型ばっかりだぞ
そもそも数学は広大過ぎてどこから手をつけるか迷うから静的型から始めるのは合理的
だが数学の知識をすべて宣言するのは無理
だからコードを読みながら数学勉強しようと思ったら、わかることは静的型ばっかりだぞ
そもそも数学は広大過ぎてどこから手をつけるか迷うから静的型から始めるのは合理的
698デフォルトの名無しさん
2019/11/04(月) 20:52:45.92ID:t2f72QmD 数学の後ろ盾があるとよくわからない安心・万能感を錯覚し
これがよくわからない人を呼び寄せてしまう
この魅力はオカルトめいている
謎多き異性に惹かれてしまうのと似ている
これがよくわからない人を呼び寄せてしまう
この魅力はオカルトめいている
謎多き異性に惹かれてしまうのと似ている
699デフォルトの名無しさん
2019/11/04(月) 21:01:45.20ID:0O6JYxLK キモすぎてわろた
701デフォルトの名無しさん
2019/11/04(月) 21:24:51.70ID:GOdOYVw0 オカルトめいているのは数学でも言語でもない
人間の感情がオカルトめいているのだ
人間の感情がオカルトめいているのだ
702デフォルトの名無しさん
2019/11/04(月) 21:59:28.69ID:PrFaR+H+ >>700
英語の参考資料(ブラウザで翻訳しつつ
Red-Black Trees in a Functional Setting
ttps://pdfs.semanticscholar.org/7756/16cf29e9c4e6d06e5999116f777e431cafa3.pdf
英語の参考資料(ブラウザで翻訳しつつ
Red-Black Trees in a Functional Setting
ttps://pdfs.semanticscholar.org/7756/16cf29e9c4e6d06e5999116f777e431cafa3.pdf
704デフォルトの名無しさん
2019/11/05(火) 17:15:35.86ID:GEIgbGGA PostgREST は Haskell のキラーコンテンツになれるか
705デフォルトの名無しさん
2019/11/05(火) 20:00:05.59ID:PndodFqR Haskellの代数的データ構造は、速度が低い方に引かれるけど、恐ろしく合理的な手法かも知れない
中身は基本Lispの構文糖衣相当だからLIST処理のコストがそのまま処理速度に反映される
ただ、数学者が数学者の為にデザインした分だけ優れた表現力をもっている
C++で
class TEST {int a, b, c}; が
Haskellでは
Test Int Int Int になって
関数の定義時に
add (Test x y z) =
z + y + z
関数定義で型指定と値を変数名に拘束して計算する
test = Test 1 2 3
add test
なんか凄い気がする
中身は基本Lispの構文糖衣相当だからLIST処理のコストがそのまま処理速度に反映される
ただ、数学者が数学者の為にデザインした分だけ優れた表現力をもっている
C++で
class TEST {int a, b, c}; が
Haskellでは
Test Int Int Int になって
関数の定義時に
add (Test x y z) =
z + y + z
関数定義で型指定と値を変数名に拘束して計算する
test = Test 1 2 3
add test
なんか凄い気がする
706デフォルトの名無しさん
2019/11/05(火) 20:14:52.01ID:2pF9vl9I Simon Peyton Jonesもなんかよくわからんけど関数型言語カッケーと思ったからやった
って言ってるくらいだからそういうのでいいんかもなとは思う。
って言ってるくらいだからそういうのでいいんかもなとは思う。
707デフォルトの名無しさん
2019/11/05(火) 20:40:52.74ID:9FWI0Jsd >>705
C++17なら、そこそこそれっぽく書けないか?
struct Test { int a, b, c; };
auto add(Test t) {
auto [x, y, z] = t;
return x + y + z;
}
auto test = Test{ 1, 2, 3 };
add(test);
C++17なら、そこそこそれっぽく書けないか?
struct Test { int a, b, c; };
auto add(Test t) {
auto [x, y, z] = t;
return x + y + z;
}
auto test = Test{ 1, 2, 3 };
add(test);
708デフォルトの名無しさん
2019/11/05(火) 20:47:05.49ID:9FWI0Jsd おっと、型定義はこっちのほうがそれっぽいか
#include <tuple>
using Test = std::tuple<int, int, int>;
#include <tuple>
using Test = std::tuple<int, int, int>;
709デフォルトの名無しさん
2019/11/05(火) 20:58:36.52ID:CZEUqG6i ええやん
710デフォルトの名無しさん
2019/11/05(火) 21:21:54.18ID:qlchjqLq C言語のswitchとenumが貧弱だったせいでコールバック地獄が始まったわけだが
コールバックの一部を、代数的データ型の場合分けで代替できる
数学者のためのデザインとの指摘はあたらない
コールバックの一部を、代数的データ型の場合分けで代替できる
数学者のためのデザインとの指摘はあたらない
711デフォルトの名無しさん
2019/11/06(水) 01:26:55.45ID:rSRNMbA2712デフォルトの名無しさん
2019/11/06(水) 11:05:04.05ID:eV2NmORn haskellで組んだos詳細きぼん
713デフォルトの名無しさん
2019/11/06(水) 18:02:57.62ID:rSRNMbA2 HaskellでOSを作るプロジェクトがある
Haskellそのものがガベージコレクションが必要なLispの構文糖衣的性格があるので
通常のOSはGCを利用するではなく、必要であればGC的メモリー管理もしますな立場
Haskellのそこら辺の拡張を無理やり行ってとりあえず動いてますと言う体裁だそうです
LispでOSを作ればシステムの軽さ速度に制限が起きることと同じです
一応これ
Haskell OS
ttp://programatica.cs.pdx.edu/House/
見解の元ネタに近いもの
Can a operating system be made completely in Haskell?
ttps://www.quora.com/Can-a-operating-system-be-made-completely-in-Haskell
Haskellそのものがガベージコレクションが必要なLispの構文糖衣的性格があるので
通常のOSはGCを利用するではなく、必要であればGC的メモリー管理もしますな立場
Haskellのそこら辺の拡張を無理やり行ってとりあえず動いてますと言う体裁だそうです
LispでOSを作ればシステムの軽さ速度に制限が起きることと同じです
一応これ
Haskell OS
ttp://programatica.cs.pdx.edu/House/
見解の元ネタに近いもの
Can a operating system be made completely in Haskell?
ttps://www.quora.com/Can-a-operating-system-be-made-completely-in-Haskell
714デフォルトの名無しさん
2019/11/06(水) 18:52:46.75ID:KNNfVqhy そういえば随分以前にLISP専用プロセッサを開発したっていう
大学があったなぁ。
大学があったなぁ。
715デフォルトの名無しさん
2019/11/06(水) 19:42:19.17ID:o3tEvZiY 30年くらい前
京大だかなんだか
京大だかなんだか
716デフォルトの名無しさん
2019/11/06(水) 19:49:43.93ID:hVaPqBLT その成果は同じく遅延評価があるTCLに結実したんですか。
三十年たっていると若者の人生相談にのってあげたりしないといけないですね
三十年たっていると若者の人生相談にのってあげたりしないといけないですね
717デフォルトの名無しさん
2019/11/06(水) 22:09:20.32ID:nryCaCA5 Haskellは世界を救うってセミナーで言ってたけど。
718デフォルトの名無しさん
2019/11/06(水) 22:15:29.42ID:8uVcy+F0 救われちゃったら、ハスケルハックしときゃいいのか
719デフォルトの名無しさん
2019/11/06(水) 22:17:29.04ID:nryCaCA5 みずほのシステム移行にHaskellが採用されていたなら半年で完了できていたって言ってたよ。
720デフォルトの名無しさん
2019/11/06(水) 22:17:52.37ID:nryCaCA5 コンパイルを通ればバグがないことを保障されるし。
721デフォルトの名無しさん
2019/11/06(水) 22:36:34.34ID:E2YfCG0n722デフォルトの名無しさん
2019/11/06(水) 22:41:32.49ID:nryCaCA5 セミナーでは数学の素養が足りないからだって言ってたけど、僕はもう手遅れなので、次世代に期待してます。
723デフォルトの名無しさん
2019/11/06(水) 23:00:13.47ID:E2YfCG0n 数学自体は結構勉強したけど 圏論のよさはよくわかんね
ある意味数学の分野で一番かもしれない、圏論のよさが分からんのは
次はホモロジー代数かな
代数幾何は一番時間食ったけど、理解できていないので除外するけど
ある意味数学の分野で一番かもしれない、圏論のよさが分からんのは
次はホモロジー代数かな
代数幾何は一番時間食ったけど、理解できていないので除外するけど
724デフォルトの名無しさん
2019/11/06(水) 23:27:03.30ID:Ly3pzzPK725デフォルトの名無しさん
2019/11/07(木) 00:27:07.92ID:/6vjWhrz パタンマッチの要素不足やらリストの範囲外参照やら
STMの糞詰まりやらいろいろ実行時エラーの要素は
あるよね
STMの糞詰まりやらいろいろ実行時エラーの要素は
あるよね
726デフォルトの名無しさん
2019/11/07(木) 00:49:38.56ID:T7e/rKHL まあ少なくとも、意図した型じゃないのに実行できる上、そのまま実行時に死ぬことすらしない言語よりはよっぽどマシ
(ちょうど今、某動的型付言語でハマってキレてた)
(ちょうど今、某動的型付言語でハマってキレてた)
727デフォルトの名無しさん
2019/11/07(木) 00:57:14.10ID:/6vjWhrz w
遅くまでお疲れ様w
遅くまでお疲れ様w
728デフォルトの名無しさん
2019/11/07(木) 04:03:06.11ID:8Vzx7lLq >>719
COBOLのソースをHaskellで組んだプログラムで解析して
全体の処理、依存関係資料を作成
それを参考にしつつ java他へ移行じゃなかったけ?
詳細はググってください
COBOLのコードはトリッキーな記述はしない素直系だから解析はかどるんちゃう?
COBOLのソースをHaskellで組んだプログラムで解析して
全体の処理、依存関係資料を作成
それを参考にしつつ java他へ移行じゃなかったけ?
詳細はググってください
COBOLのコードはトリッキーな記述はしない素直系だから解析はかどるんちゃう?
729デフォルトの名無しさん
2019/11/07(木) 06:10:19.59ID:RqdAjhZM >>723
英語読めない人が、英語のよさがわからんというのと同じじゃね
あなたが読めるものに誰かが翻訳してくれるのを待つか、
あなたが読めるようになるか
代数幾何なんて圏論で再構築されているから圏論の言葉がわからないと
どうしようもないけど、ホモロジー代数まで有用さがわからないというのは
代数が向いてないのか、興味が隔たっているのか微妙なところ
英語読めない人が、英語のよさがわからんというのと同じじゃね
あなたが読めるものに誰かが翻訳してくれるのを待つか、
あなたが読めるようになるか
代数幾何なんて圏論で再構築されているから圏論の言葉がわからないと
どうしようもないけど、ホモロジー代数まで有用さがわからないというのは
代数が向いてないのか、興味が隔たっているのか微妙なところ
730デフォルトの名無しさん
2019/11/07(木) 06:36:09.91ID:RqdAjhZM >>721
関数型パラダイムの、ユーザ向けの簡単な部分のいいとこどりは各言語でされているし、
人気もあると思う
それを超えて関数型言語に入ろうとすると、面倒くささのほうが勝っちゃうのかも
F#は、実行速度が遅かったのも大きいと思う
関数型パラダイムの、ユーザ向けの簡単な部分のいいとこどりは各言語でされているし、
人気もあると思う
それを超えて関数型言語に入ろうとすると、面倒くささのほうが勝っちゃうのかも
F#は、実行速度が遅かったのも大きいと思う
731デフォルトの名無しさん
2019/11/07(木) 06:48:07.50ID:OeHLbL3M F#が遅いって適当なこと言ってんな
732デフォルトの名無しさん
2019/11/07(木) 07:46:21.60ID:XLcDzJj2 RISCとCISCって本当に2方式独立してんのか
圏論って複素解析を婉曲的に表現してんじゃないのか?
アイレンバーグは4元数も研究してたしバーコフ息子は流体力学研究してた
圏論って複素解析を婉曲的に表現してんじゃないのか?
アイレンバーグは4元数も研究してたしバーコフ息子は流体力学研究してた
733デフォルトの名無しさん
2019/11/07(木) 07:52:29.18ID:XLcDzJj2 CPUレベルで実は関数型言語に翻訳されてたら
数学的に解析しやすいし高速化も数学的にできるしバグも数学的にとれる
という妄想をするんだが
失敗の歴史をウソと考えると
数学的に解析しやすいし高速化も数学的にできるしバグも数学的にとれる
という妄想をするんだが
失敗の歴史をウソと考えると
734デフォルトの名無しさん
2019/11/07(木) 09:47:06.79ID:8Vzx7lLq 現行の半導体プロセッサはスイッチングで起きる0と1状態を基本にして組みあがっている関係で
他の技術(量子関係?)が発達しない限り関数的内部表現うんぬんはLISPが誕生した時点で完了してます
テキストベースの文字列を実行可能なコンピュータプログラムに変換する行為は
文字、テキストベースである限りLIPSの構文糖衣と見なせます
他の技術(量子関係?)が発達しない限り関数的内部表現うんぬんはLISPが誕生した時点で完了してます
テキストベースの文字列を実行可能なコンピュータプログラムに変換する行為は
文字、テキストベースである限りLIPSの構文糖衣と見なせます
735デフォルトの名無しさん
2019/11/07(木) 10:11:56.72ID:n7hI0M2o >>721
カプセル化の恩恵を受けられないからかと
Haskell含む関数型はは仕組み上データを分離/隔離できないのでロジックに比重を置きすぎてるきらいがある
一般的にはクラスに任せたい、内容を知らなくても扱える構造が欲しいわけで
関数ドリブンではやはり困る
個人的にはCに逆戻りしてる印象すらあるね
カプセル化の恩恵を受けられないからかと
Haskell含む関数型はは仕組み上データを分離/隔離できないのでロジックに比重を置きすぎてるきらいがある
一般的にはクラスに任せたい、内容を知らなくても扱える構造が欲しいわけで
関数ドリブンではやはり困る
個人的にはCに逆戻りしてる印象すらあるね
736デフォルトの名無しさん
2019/11/07(木) 11:12:23.51ID:6eFvSmvg ブライアン・カーニハンもf#の中間言語は
解析しやすいCであるべきだってプロジェクト立ち上げれば
関数型といいつ中身は手続き型でデバッガの資産も使い回せるから
人気でるかもよ。
解析しやすいCであるべきだってプロジェクト立ち上げれば
関数型といいつ中身は手続き型でデバッガの資産も使い回せるから
人気でるかもよ。
737デフォルトの名無しさん
2019/11/07(木) 11:36:14.12ID:uxj9LdkK Cに逆戻りしている・・・型安全とガベコレがあるCを作ってしまったのか
738デフォルトの名無しさん
2019/11/07(木) 11:51:10.43ID:dB1QBGXo739デフォルトの名無しさん
2019/11/07(木) 12:41:20.34ID:y+UtRegG モジュールがあるからカプセル化の恩恵は受けられるのでは
740デフォルトの名無しさん
2019/11/07(木) 14:23:10.73ID:B1e2KIDS >>735
実装詳細の隠蔽にPatternSynonymsが使えるよ
https://haskell-explained.gitlab.io/blog/posts/2019/08/27/pattern-synonyms/index.html
実装詳細の隠蔽にPatternSynonymsが使えるよ
https://haskell-explained.gitlab.io/blog/posts/2019/08/27/pattern-synonyms/index.html
741デフォルトの名無しさん
2019/11/07(木) 14:56:51.38ID:n7hI0M2o それはオブジェクトじゃないから目的が違うかもね
742デフォルトの名無しさん
2019/11/07(木) 15:20:12.79ID:B1e2KIDS >>741
でもまさに内容を知らなくても扱える構造だぜ?
でもまさに内容を知らなくても扱える構造だぜ?
743デフォルトの名無しさん
2019/11/07(木) 16:02:50.99ID:uxj9LdkK カプセル化「継承とポリモーフィズムがやられたようだな・・・」
744デフォルトの名無しさん
2019/11/07(木) 16:07:19.92ID:y+UtRegG カプセル化: 抽象データ型、pattern synonym等
継承: クラス継承
ポリモーフィズム: 存在量化によるサブタイピング多相
haskellってストラウストラップの言うOOP言語なのでは
継承: クラス継承
ポリモーフィズム: 存在量化によるサブタイピング多相
haskellってストラウストラップの言うOOP言語なのでは
745デフォルトの名無しさん
2019/11/07(木) 18:28:48.58ID:THHm8pjB746デフォルトの名無しさん
2019/11/07(木) 19:14:04.10ID:y+UtRegG ホモが寄ってくる
747デフォルトの名無しさん
2019/11/07(木) 19:41:36.65ID:a+LjUnl5 >>745
コホモロジー全般を抽象的に取り扱える。
コホモロジー全般を抽象的に取り扱える。
748デフォルトの名無しさん
2019/11/07(木) 21:38:48.71ID:QQLc3fgk >>745
俺もまだあやふやなんだけどどうも複素解析で積分するとコーシーの積分定理みたいに
純トポロジカルに積分値決まるじゃん
どうもモチベーションはそこらへんで
複素平面だと複素解析の教科書みたいに簡単にいけるけど
複素多様体上で線積分しようとするとややこしいからざっくりややこしいところを
ホモロジー代数って分科したみたい
俺もまだあやふやなんだけどどうも複素解析で積分するとコーシーの積分定理みたいに
純トポロジカルに積分値決まるじゃん
どうもモチベーションはそこらへんで
複素平面だと複素解析の教科書みたいに簡単にいけるけど
複素多様体上で線積分しようとするとややこしいからざっくりややこしいところを
ホモロジー代数って分科したみたい
749デフォルトの名無しさん
2019/11/07(木) 21:48:30.40ID:QQLc3fgk ポアンカレから来ているし本当に突き詰めるとたぶん複素解析力学の問題解けるんだと思う
750デフォルトの名無しさん
2019/11/07(木) 22:17:56.72ID:THHm8pjB751デフォルトの名無しさん
2019/11/08(金) 02:23:56.93ID:xHGwPMhN >>732
> 圏論って複素解析を婉曲的に表現してんじゃないのか?
的外れにも程がある
層sheafは解析接続の考えを多変数複素関数へと拡張する発想で生まれたものだが
圏は複素解析から出てきたものではない
> 圏論って複素解析を婉曲的に表現してんじゃないのか?
的外れにも程がある
層sheafは解析接続の考えを多変数複素関数へと拡張する発想で生まれたものだが
圏は複素解析から出てきたものではない
752デフォルトの名無しさん
2019/11/08(金) 07:14:54.57ID:vRM9u/Iy753デフォルトの名無しさん
2019/11/08(金) 07:33:23.28ID:KkBgvLKM >>745
ホモロジー代数の有用性...
代数系の多くの分野の主力ツールなので知らないと入門書を終えた後に代数系で先に進めない
くらいには使われています。直接使われていなくてもやってることはホモロジー代数由来の
ことがよくあります
古くは、ホモロジー代数の枠組み(コホモロジーなことが多い)で完全列が見つかると
機械な計算だけでいろいろな結果が出てくるというのが強みでしたけど、その後は
ホモロジー代数の枠組みにはまらないものを一般化したりして新しい枠組みを作って
ホモロジー代数のように扱えるようにしてきて多くの分野が生まれています。
derived categoryやtriangulated categoryもそうですし、環論のquasi-frobenius ring
(入門書にある森田の定理の延長)などもこの線
自分で圏や代数構造をつくるのでなければ圏も代数も知らなくていいと思いますけどね
ホモロジー代数の有用性...
代数系の多くの分野の主力ツールなので知らないと入門書を終えた後に代数系で先に進めない
くらいには使われています。直接使われていなくてもやってることはホモロジー代数由来の
ことがよくあります
古くは、ホモロジー代数の枠組み(コホモロジーなことが多い)で完全列が見つかると
機械な計算だけでいろいろな結果が出てくるというのが強みでしたけど、その後は
ホモロジー代数の枠組みにはまらないものを一般化したりして新しい枠組みを作って
ホモロジー代数のように扱えるようにしてきて多くの分野が生まれています。
derived categoryやtriangulated categoryもそうですし、環論のquasi-frobenius ring
(入門書にある森田の定理の延長)などもこの線
自分で圏や代数構造をつくるのでなければ圏も代数も知らなくていいと思いますけどね
754デフォルトの名無しさん
2019/11/08(金) 10:55:25.73ID:q9/Fdf+e >>753
有用性について何一つ説明してないw
有用性について何一つ説明してないw
755デフォルトの名無しさん
2019/11/08(金) 18:27:28.35ID:vRM9u/Iy Haskellって素晴らしい土台造りの研究に終始して、中々家を建てない印象
756デフォルトの名無しさん
2019/11/08(金) 18:41:50.96ID:O4xqpbU0 もう立ててあるんだろ。MSのpower shellも当初はモナドシェルという
名称だったけど無関係だとは思えない
名称だったけど無関係だとは思えない
757デフォルトの名無しさん
2019/11/08(金) 19:37:52.83ID:tNfNofGs 印象と言っているのでは?
758デフォルトの名無しさん
2019/11/08(金) 20:48:21.44ID:bTjIiHb/ haskellってほんのちょっとしたものにも名前つけなきゃいけなくて困る
759デフォルトの名無しさん
2019/11/08(金) 21:26:54.71ID:nzoS2I9V 素晴らしい世代別GCの研究はする
でも今作ってるアプリは参照カウントで十分
こういうとこだろ
でも今作ってるアプリは参照カウントで十分
こういうとこだろ
760745
2019/11/08(金) 22:49:41.82ID:FXrQ9F3T761デフォルトの名無しさん
2019/11/09(土) 01:29:11.95ID:kdUUP+4v >>758
たとえば?
たとえば?
762デフォルトの名無しさん
2019/11/09(土) 17:05:19.55ID:5gH5tpDv 型シグネチャちゃんと書いとけば、後はポイントフリーにしてお茶を濁して、利用者が命名してねって感じに逃げることも可能
763デフォルトの名無しさん
2019/11/09(土) 18:32:42.34ID:y5YvoXPL HKD(Higher Kinded Datatype)ってのはな
おまえら例えばコマンドラインツールのオプションとかを扱うとき
Options <$> ... <*> ... みたいにしてデータを返すアクションを構築してるだろうけどさ
そこの ... 同士に共通性があるわけじゃん。
コマンド引数>環境変数>設定ファイルの優先順位で読み出されたりするじゃん。
でも各フェーズごとの処理をまとめるのはこのままじゃ難しいわけよ
ところが方針を変えて、中身と外見がひっくり返ったような
data Options_ f = Options _ { verbosity :: f Int, ...}
を使うとエントリごとに Nothing にしたり出来るようになって、
Options_ を一般化したやつらが Generic 介しておんなじように舐められるから処理の共通化もできて、
値の合成もしやすく、コンパイラの warning でエントリの処理漏れを検知できて、いいよね。
このパワーアップしたデータみたいなもんを高カインド・データ(HKD)って呼ぶぞって話
おまえら例えばコマンドラインツールのオプションとかを扱うとき
Options <$> ... <*> ... みたいにしてデータを返すアクションを構築してるだろうけどさ
そこの ... 同士に共通性があるわけじゃん。
コマンド引数>環境変数>設定ファイルの優先順位で読み出されたりするじゃん。
でも各フェーズごとの処理をまとめるのはこのままじゃ難しいわけよ
ところが方針を変えて、中身と外見がひっくり返ったような
data Options_ f = Options _ { verbosity :: f Int, ...}
を使うとエントリごとに Nothing にしたり出来るようになって、
Options_ を一般化したやつらが Generic 介しておんなじように舐められるから処理の共通化もできて、
値の合成もしやすく、コンパイラの warning でエントリの処理漏れを検知できて、いいよね。
このパワーアップしたデータみたいなもんを高カインド・データ(HKD)って呼ぶぞって話
764デフォルトの名無しさん
2019/11/09(土) 18:41:35.48ID:PlRJlzfP コマンドオプションを無駄に複雑にしないように設計に時間使う方が有意義。
てかオプションごとき糞みたいな複雑な解析いれるくらいならすべて設定ファイルにしろよ。
てかオプションごとき糞みたいな複雑な解析いれるくらいならすべて設定ファイルにしろよ。
765デフォルトの名無しさん
2019/11/09(土) 19:36:35.25ID:LdPLX9iY なーる。多変数Maybeでコマンドレットか。
getoptにs付けるか付けんかとかいみなかったんや
getoptにs付けるか付けんかとかいみなかったんや
766デフォルトの名無しさん
2019/11/09(土) 19:49:25.81ID:LdPLX9iY 首相って数学そんな明るいの?
767デフォルトの名無しさん
2019/11/10(日) 09:53:34.75ID:UPgh4+Yq >>764
オプションを上書きできないと不便だし、
ツールごとにどんなに設計しようと不可避の複雑さは残るだろうさ。
HKD使えば複雑な解析にはならない。
https://chrispenner.ca/posts/hkd-options
ちな Options から Options_ を Generic で作るやつもある
https://github.com/i-am-tom/higgledy
オプションを上書きできないと不便だし、
ツールごとにどんなに設計しようと不可避の複雑さは残るだろうさ。
HKD使えば複雑な解析にはならない。
https://chrispenner.ca/posts/hkd-options
ちな Options から Options_ を Generic で作るやつもある
https://github.com/i-am-tom/higgledy
768デフォルトの名無しさん
2019/11/10(日) 20:10:37.56ID:MbFf7EI6 いや普通に作ってればそんな複雑にはならんわ。。
無理やり用途を探してるってのはわかるけどさ。
無理やり用途を探してるってのはわかるけどさ。
769デフォルトの名無しさん
2019/11/10(日) 21:36:01.67ID:UPgh4+Yq >>768
そうかな。改善前と同等の機能のコードをもっとシンプルに書ける?
個人的にはさらにリッチに、設定値が原因で問題が起きた時「設定ファイル〜のここで定義された値が原因でコケたよ」
くらいのことも言ってくれると嬉しい。HKD に Writer を突っ込んだりすれば出来る。
そうかな。改善前と同等の機能のコードをもっとシンプルに書ける?
個人的にはさらにリッチに、設定値が原因で問題が起きた時「設定ファイル〜のここで定義された値が原因でコケたよ」
くらいのことも言ってくれると嬉しい。HKD に Writer を突っ込んだりすれば出来る。
770デフォルトの名無しさん
2019/11/14(木) 21:29:15.91ID:U/F2ohqe https://www.stepup-school.net/news/detail/728
微分方程式と圏論と量子コンピュータやるっていうけど
こういうところで圏論という言葉が出てくるの不思議な感じがする
微分方程式と圏論と量子コンピュータやるっていうけど
こういうところで圏論という言葉が出てくるの不思議な感じがする
771デフォルトの名無しさん
2019/11/15(金) 01:56:55.98ID:m2M4hoVH >>770
> こういうところで圏論という言葉が出てくるの不思議な感じがする
圏論は現代の数学を記述するための言語だから、ある程度以上のレベルの数学を教えようとすれば圏論という言葉を学ぶのは避けられない
ちょうど、現代では英語という言葉を学んでおかなければ数学や自然科学で重要な研究論文を読んで学ぶことができないようにね
> こういうところで圏論という言葉が出てくるの不思議な感じがする
圏論は現代の数学を記述するための言語だから、ある程度以上のレベルの数学を教えようとすれば圏論という言葉を学ぶのは避けられない
ちょうど、現代では英語という言葉を学んでおかなければ数学や自然科学で重要な研究論文を読んで学ぶことができないようにね
772デフォルトの名無しさん
2019/11/15(金) 06:45:41.36ID:CTCYdIoU >>770
ステマ
ステマ
773デフォルトの名無しさん
2019/11/15(金) 11:19:15.11ID:mFhZFK7X だから自由ソフトウェアとか割れとかを宣伝して商品は宣伝しないスタイルがある
774デフォルトの名無しさん
2019/11/15(金) 19:57:11.81ID:uG++m6MK PostgREST は Haskell のキラーコンテンツになれるか
775デフォルトの名無しさん
2019/11/16(土) 00:01:26.66ID:TatvE4r/ 結局代数幾何やらずに圏論語っても胡散臭いものにしかならん。
別に代数幾何がすべてとはおもわんが起源ではある。
別に代数幾何がすべてとはおもわんが起源ではある。
776デフォルトの名無しさん
2019/11/16(土) 01:13:46.97ID:yrgQ+1iB 集合論と集合の圏が胡散臭い
だったら射はあっても冪はない圏などを考えれば胡散臭さは軽減される気がする
だったら射はあっても冪はない圏などを考えれば胡散臭さは軽減される気がする
777デフォルトの名無しさん
2019/11/16(土) 09:25:34.99ID:0kRbSQZl >射はあっても冪はない圏
集合論を取っ払うなんてことは圏論は望んでねーわ。
馬鹿すぎて話にならん。
集合論を取っ払うなんてことは圏論は望んでねーわ。
馬鹿すぎて話にならん。
778デフォルトの名無しさん
2019/11/16(土) 11:41:35.91ID:Zb6iL5XI 馬鹿を取っ払いたい願望があるとはっきり言い切る方が簡潔で良い
779デフォルトの名無しさん
2019/11/17(日) 11:04:47.89ID:zhdkDGU4 私代数幾何ではありませんが数学科で代数系で圏論バリバリ使ってました。
しかし計算論への圏論の応用という意味ではほとんど役に立ってません。
圏論はその表現力の高さゆえにほとんどの数学に登場します。
しかし逆に言えばその登場の仕方で全く別の顔で出てくるのである一つのジャンルで出てくる圏論を極めても他ではほとんど役に立たなくなる事は多々あると思います。
まだ計算論で出てくる圏論の勉強は始めようとしてるとこなので代数幾何に出てくる圏論がどの程度役に立つかは断言はできませんが、あまり期待はできないと思います。
しかし計算論への圏論の応用という意味ではほとんど役に立ってません。
圏論はその表現力の高さゆえにほとんどの数学に登場します。
しかし逆に言えばその登場の仕方で全く別の顔で出てくるのである一つのジャンルで出てくる圏論を極めても他ではほとんど役に立たなくなる事は多々あると思います。
まだ計算論で出てくる圏論の勉強は始めようとしてるとこなので代数幾何に出てくる圏論がどの程度役に立つかは断言はできませんが、あまり期待はできないと思います。
780デフォルトの名無しさん
2019/11/17(日) 11:15:51.64ID:X9AhIAwA CSに出て来る圏論はフェイク
781デフォルトの名無しさん
2019/11/17(日) 12:27:10.16ID:zvcjV9Be 型はフェイクではない
○○を応用した成果が型である
ゆえに○○はフェイクではない
このように「応用」や「成果」の概念がフェイクに加担している
○○を応用した成果が型である
ゆえに○○はフェイクではない
このように「応用」や「成果」の概念がフェイクに加担している
782デフォルトの名無しさん
2019/11/17(日) 20:43:59.01ID:56xYlt3M >>780
> CSに出て来る圏論はフェイク
CSとCSでないとの境界は曖昧なわけだが
例えば構成主義的な型理論などはその典型だ
少なくともBart JacobsのCategorical Logic and Type Theoryでの型理論はCSでなく数理論理学で
そこで出て来る圏論はフェイクでなく本物だと思うがねえ
Lambek & Scott (Phil)とそこで出て来る圏論に関しても同様
だからこそ数学を基礎付ける枠組みとしてのHTT (Homotopical Type Theory)などという考えが出てくるわけで
逆に言えば代数幾何で出て来る圏論は間違いなく本物なのは事実だが数理論理学で出て来る圏論から見ると酷く偏った部分だけだし
逆から見れば数理論理で出て来る圏論は代数幾何の圏論から見れば同様に非常に偏って見える
最近の高階圏や高次元圏の隆盛を見てもわかるとおり圏論の可能性は極めて広く豊かだから
「××で出て来る圏論はフェイク」といった主張はナンセンスだよ
ただ、本来、数学を知らずに使えねばならない単なるプログラミング言語に過ぎないのに
「圏論がどうした、モナドがどうした」、といって圏論を勉強しておかないとプログラムを書けないかの如く喧伝するのは
フェイクというか一種の羊頭狗肉あるいは虎の威(圏論、あるいは純粋数学という一種の高級ブランド)を借りる狐(プログラミング言語という実用道具)であり
間違った姿勢だとは思うけれどね
> CSに出て来る圏論はフェイク
CSとCSでないとの境界は曖昧なわけだが
例えば構成主義的な型理論などはその典型だ
少なくともBart JacobsのCategorical Logic and Type Theoryでの型理論はCSでなく数理論理学で
そこで出て来る圏論はフェイクでなく本物だと思うがねえ
Lambek & Scott (Phil)とそこで出て来る圏論に関しても同様
だからこそ数学を基礎付ける枠組みとしてのHTT (Homotopical Type Theory)などという考えが出てくるわけで
逆に言えば代数幾何で出て来る圏論は間違いなく本物なのは事実だが数理論理学で出て来る圏論から見ると酷く偏った部分だけだし
逆から見れば数理論理で出て来る圏論は代数幾何の圏論から見れば同様に非常に偏って見える
最近の高階圏や高次元圏の隆盛を見てもわかるとおり圏論の可能性は極めて広く豊かだから
「××で出て来る圏論はフェイク」といった主張はナンセンスだよ
ただ、本来、数学を知らずに使えねばならない単なるプログラミング言語に過ぎないのに
「圏論がどうした、モナドがどうした」、といって圏論を勉強しておかないとプログラムを書けないかの如く喧伝するのは
フェイクというか一種の羊頭狗肉あるいは虎の威(圏論、あるいは純粋数学という一種の高級ブランド)を借りる狐(プログラミング言語という実用道具)であり
間違った姿勢だとは思うけれどね
783デフォルトの名無しさん
2019/11/17(日) 20:55:22.99ID:N5iPOVW/ そうそう
多言語との差別化、マウント
選民主義の道具
あるいは原理主義で貫いてますよという言い訳みたいなもの
圏論必須みたいに言うのはバカ
多言語との差別化、マウント
選民主義の道具
あるいは原理主義で貫いてますよという言い訳みたいなもの
圏論必須みたいに言うのはバカ
784デフォルトの名無しさん
2019/11/17(日) 21:23:18.02ID:S3IAhXB4 とはいえほとんどのプログラマが欲しいのはどうせ虎の威だろ。
だからこの業界は何の発展もない。
だからこの業界は何の発展もない。
785デフォルトの名無しさん
2019/11/17(日) 21:25:48.05ID:4jNKOHdS 何言ってのこの人
786デフォルトの名無しさん
2019/11/17(日) 21:55:46.27ID:N5iPOVW/787デフォルトの名無しさん
2019/11/17(日) 22:02:43.05ID:nzTNCHtX PostgREST は Haskell のキラーコンテンツになれるか
788デフォルトの名無しさん
2019/11/17(日) 22:12:35.26ID:zvcjV9Be 動的型付け原理主義なら権威もないしダメージもないんだが
ノーダメージな選択肢を冷笑して程々のダメージ受けてるやつもそれはそれで難儀な性格だ
ノーダメージな選択肢を冷笑して程々のダメージ受けてるやつもそれはそれで難儀な性格だ
789デフォルトの名無しさん
2019/11/17(日) 23:21:11.81ID:S3IAhXB4 まあ権威が言ってんだからで済ましたり静的チェックしてるから大丈夫とか
言い聞かせる方が地道にベンチマーク取るよりよっぽど楽だからな。
結局はそういうことだろ。
言い訳をしたいんだよ。
言い聞かせる方が地道にベンチマーク取るよりよっぽど楽だからな。
結局はそういうことだろ。
言い訳をしたいんだよ。
790デフォルトの名無しさん
2019/11/18(月) 07:09:05.16ID:6/WJcbq2791デフォルトの名無しさん
2019/11/18(月) 11:01:11.35ID:ahZzeXy3 rubyをいくらdisっても構わないと思うが
disるだけじゃ何も産まれないからな
disるだけじゃ何も産まれないからな
792デフォルトの名無しさん
2019/11/18(月) 19:55:00.90ID:6QIkNIz7 どこが嫌いかより、どこが好きかで言語を語れよ!
793デフォルトの名無しさん
2019/11/19(火) 11:11:47.89ID:8naC8O/U 反日パヨク野党にはほめるところもすきなところも何もないわ
794デフォルトの名無しさん
2019/11/19(火) 13:04:27.10ID:TS8kcjoi 誰だよそいつは
自分を匿名化するのは別にいいけど敵を匿名にするなよ
自分を匿名化するのは別にいいけど敵を匿名にするなよ
795デフォルトの名無しさん
2019/11/19(火) 14:46:28.06ID:qFuVzVhm796デフォルトの名無しさん
2019/11/19(火) 20:45:50.91ID:EAp6ZFS6 何が問題のある機能か語る方がプログラム技術は向上する。
好きなものだけやってるバカは働いてほしくない。
好きなものだけやってるバカは働いてほしくない。
797デフォルトの名無しさん
2019/11/20(水) 11:22:47.40ID:9VJHrV5/ 技術自体が目的になることを問題視する風潮なので
サイコパスですら手段の目的化には強い罪悪感を持つようだ
もはやサイコパスでもなんでもないただの人
サイコパスですら手段の目的化には強い罪悪感を持つようだ
もはやサイコパスでもなんでもないただの人
798デフォルトの名無しさん
2019/11/20(水) 11:23:39.17ID:ADcW+Cyo つまらない
799デフォルトの名無しさん
2019/11/20(水) 13:02:17.44ID:i01367Jm 東京でのhaskellプログラマの求人だとさ
https://www.reddit.com/r/haskell/comments/dyh4rz/job_purescript_and_haskell_tokyo_or_remote/
https://www.reddit.com/r/haskell/comments/dyh4rz/job_purescript_and_haskell_tokyo_or_remote/
800デフォルトの名無しさん
2019/11/21(木) 20:19:49.90ID:BfqobOk+ apiサーバー実装としてhaskell結構いけるという話が出てるな。
ちと興味出てきた。
モナドガーとかずっと言ってるバカしかいないのかと思ってたがそうでもないようだ。
ちと興味出てきた。
モナドガーとかずっと言ってるバカしかいないのかと思ってたがそうでもないようだ。
801デフォルトの名無しさん
2019/11/27(水) 15:44:41.54ID:iuzce+69 よわそう
802デフォルトの名無しさん
2019/11/28(木) 00:39:29.58ID:W12oiqHO 圏論流行っているのって、人工知能の機械学習の理論のベースが複素多様体(複素ファジー)
にあってアルゴリズムに落とし込むにあたってバッチリ実学になるからとかそういう理由から?
にあってアルゴリズムに落とし込むにあたってバッチリ実学になるからとかそういう理由から?
803デフォルトの名無しさん
2019/11/28(木) 00:44:08.38ID:W12oiqHO haskellの真価は機械学習で出るとかそういうやつかな。勝手に納得くっそー。
804デフォルトの名無しさん
2019/11/28(木) 00:58:23.73ID:O/IccFcB FRPの金脈は掘り尽くされてみな失望して出て行ったの?
Haskellでゲーム作りを通してFRPを学べるみたいな本がLeanpubで書かれてたけど
作者途中で断念しちゃったんだよね
Haskellでゲーム作りを通してFRPを学べるみたいな本がLeanpubで書かれてたけど
作者途中で断念しちゃったんだよね
805デフォルトの名無しさん
2019/11/28(木) 00:59:05.39ID:W12oiqHO ちくしょう。
806デフォルトの名無しさん
2019/11/28(木) 01:00:13.06ID:W12oiqHO 慈善事業で地位向上やってたんだろうが。ちくしょう。
807デフォルトの名無しさん
2019/11/28(木) 01:06:40.27ID:W12oiqHO くっそ。こんな頭に線繋いで文意の通らないコミュニケーションとれるとか。
公認基地外化してなんてやろうだ。
邪魔するつもりはないが、全国クイズ大会とかいつまでやるつもりだ。
公認基地外化してなんてやろうだ。
邪魔するつもりはないが、全国クイズ大会とかいつまでやるつもりだ。
808デフォルトの名無しさん
2019/11/28(木) 19:49:21.00ID:mtRfePwe >>802
圏論の流行の理由はそっち方面とは全く関係ない
一つは関数型プログラミング言語の型の体系の理論的基盤である型理論が圏論と直接的な繋がりがあるところから
もう一つは実用プログラムとしては避けて通れない例外処理や状態の概念をHaskellのような関数型プログラミングで扱うための理論的基盤としてのモナドから
圏論の流行の理由はそっち方面とは全く関係ない
一つは関数型プログラミング言語の型の体系の理論的基盤である型理論が圏論と直接的な繋がりがあるところから
もう一つは実用プログラムとしては避けて通れない例外処理や状態の概念をHaskellのような関数型プログラミングで扱うための理論的基盤としてのモナドから
809デフォルトの名無しさん
2019/11/28(木) 22:20:47.13ID:8LP6mRiM 関数型言語設計者にとっては重要だとしても、
Haskellを使っている人にはどうでもいい理論ってことか。
>>圏論
Haskellを使っている人にはどうでもいい理論ってことか。
>>圏論
810デフォルトの名無しさん
2019/11/28(木) 22:28:37.21ID:KJlOY0hh アリアドネーの糸か蜘蛛の糸か。
でもどのみち結論はゼロサムだろう。
でもどのみち結論はゼロサムだろう。
811デフォルトの名無しさん
2019/11/29(金) 10:03:34.54ID:KypBmx9c arrayパッケージのData.Array.! は配列に O(1) の計算量で参照できるのでしょうか?
812デフォルトの名無しさん
2019/11/29(金) 13:42:47.90ID:KypBmx9c813デフォルトの名無しさん
2019/11/29(金) 13:57:38.91ID:BnvrknGG せやろか
814デフォルトの名無しさん
2019/11/29(金) 23:26:58.09ID:rLKSZgh6 命題
IOモナドではない ⇒ O(1)で参照できる配列構造を作れない
を証命せよ
IOモナドではない ⇒ O(1)で参照できる配列構造を作れない
を証命せよ
815デフォルトの名無しさん
2019/11/29(金) 23:37:51.77ID:UeTdOBou 漢字間違ってんぞ
816デフォルトの名無しさん
2019/12/01(日) 02:50:14.51ID:M279qGKp 我々は副作用は使ってないっ!キリッ
完全にクリーンなプログラムを書いているのだ!キリッキリッ
完全にクリーンなプログラムを書いているのだ!キリッキリッ
817デフォルトの名無しさん
2019/12/01(日) 12:50:50.29ID:ZEhocPVE 色々なコホモロジーの同型の証明については圏論は力を発揮するが、
型理論においてはそういう風にも考えられるよね?以上の意味はない。
単なる箔付けだな。
型理論においてはそういう風にも考えられるよね?以上の意味はない。
単なる箔付けだな。
818デフォルトの名無しさん
2019/12/01(日) 15:15:43.80ID:3hecj3NX doは単なる構文糖だな
それで、Pythonのlambdaの仕様を変える必要がないことが証明されてしまった
これだけでも十分大きい
それで、Pythonのlambdaの仕様を変える必要がないことが証明されてしまった
これだけでも十分大きい
819デフォルトの名無しさん
2019/12/01(日) 15:24:48.19ID:3P4UY/g+ その話kwsk
820デフォルトの名無しさん
2019/12/01(日) 17:20:16.47ID:m0gK1jxj >>817
一つの型理論に対するモデルは原理的に様々なモデルがあり得る
その様々なモデルをまとめて特徴づけるのには圏論が便利なんだよ
いわゆる圏論的モデルだよ
圏論的モデルというのは本来の(数理論理学での)意味での具体的なモデルでなくて
与えられた理論に対するモデル全般が満たすべき性質の圏論による公理化とでも言ったほうが良い感じの代物だからね
それと型理論に応じて圏論モデルとしての圏には特有の興味深い構造(例えばデカルト閉圏とかモノイダル閉圏とかね)を持つケースが多い
一つの型理論に対するモデルは原理的に様々なモデルがあり得る
その様々なモデルをまとめて特徴づけるのには圏論が便利なんだよ
いわゆる圏論的モデルだよ
圏論的モデルというのは本来の(数理論理学での)意味での具体的なモデルでなくて
与えられた理論に対するモデル全般が満たすべき性質の圏論による公理化とでも言ったほうが良い感じの代物だからね
それと型理論に応じて圏論モデルとしての圏には特有の興味深い構造(例えばデカルト閉圏とかモノイダル閉圏とかね)を持つケースが多い
821デフォルトの名無しさん
2019/12/01(日) 18:31:03.50ID:XkMP/E25 >圏論的モデルというのは本来の(数理論理学での)意味での具体的なモデルでなくて
>与えられた理論に対するモデル全般が満たすべき性質の圏論による公理化とでも言ったほうが良い感じの代物だからね
なるほど、数学基礎論の方面をあんま知らんからそういう発想になるわけか。
>与えられた理論に対するモデル全般が満たすべき性質の圏論による公理化とでも言ったほうが良い感じの代物だからね
なるほど、数学基礎論の方面をあんま知らんからそういう発想になるわけか。
822デフォルトの名無しさん
2019/12/01(日) 20:45:57.22ID:3P4UY/g+ は?ちゃんと言え
823デフォルトの名無しさん
2019/12/01(日) 21:43:32.61ID:DFWCjLrg いわゆる同型を除いて一意的(up to isomorphism)なモデルなことではないか。
どういうものかはわからんが。
どういうものかはわからんが。
824デフォルトの名無しさん
2019/12/02(月) 19:35:22.17ID:+Z2AJKW1 もうよElixirやろうぜElixir
Haskellに近いコーディングパターンマッチングも出来るし
もう、色々ユルユル
非同期マルチスレッドプログラムで受け手がないのにメッセージ送り捲れる(メール形式なので)
割り当てメモリーを使い切るとエラーで止まるけど(メールボックス満杯)
もう、ユルで目からウロコ
Haskellに近いコーディングパターンマッチングも出来るし
もう、色々ユルユル
非同期マルチスレッドプログラムで受け手がないのにメッセージ送り捲れる(メール形式なので)
割り当てメモリーを使い切るとエラーで止まるけど(メールボックス満杯)
もう、ユルで目からウロコ
825デフォルトの名無しさん
2019/12/02(月) 19:39:36.79ID:6AEGHd3a メールボックスがオーバーフローしない証明しながらコーディングするんすか?
826デフォルトの名無しさん
2019/12/02(月) 20:11:00.44ID:+Z2AJKW1 メールボックスだから受け手のプログラムも起動して非同期でメッセージを受け取って
メールボックスから消せばOk.
通常はメッセージの送り手スレッドがメールボックスの空き待ちになるだろ
メールボックス管理は独立したスレッドで動くんじゃね?
とにかくユルイ
僕でも出来たヽ(^o^)丿な感じ
メールボックスから消せばOk.
通常はメッセージの送り手スレッドがメールボックスの空き待ちになるだろ
メールボックス管理は独立したスレッドで動くんじゃね?
とにかくユルイ
僕でも出来たヽ(^o^)丿な感じ
827デフォルトの名無しさん
2019/12/02(月) 20:42:42.47ID:Y5cjsI9c >>822
完全性定理でググレカス。
完全性定理でググレカス。
828デフォルトの名無しさん
2019/12/06(金) 04:46:46.01ID:Nw0PFMDP 話題は?
829デフォルトの名無しさん
2019/12/07(土) 00:50:28.71ID:mKAqVLXw Nothing
830デフォルトの名無しさん
2019/12/07(土) 02:10:24.53ID:nHnMq71L ライブラリーのソースコードをレビューしてるWebサイトってありますか?
この書き方は秀逸だとか、これは泥臭いとか
バージョンアップでのコードの進化を追ったり
英語でも全く構わないのですが
この書き方は秀逸だとか、これは泥臭いとか
バージョンアップでのコードの進化を追ったり
英語でも全く構わないのですが
831デフォルトの名無しさん
2019/12/07(土) 04:27:22.19ID:AZmQeN3A Windows 10 64bit 上で FFI (ccall) 使って Haskell の関数を呼び出してて
呼ぶ前に hs_init() が必要なのは,なんとなくわかるんだけど
hs_exit() の方は,そのあとアプリケーション全体がすぐ終了する場合は
呼ばなくてもいい?
Windows が呼び出し元のプロセスも Haskell ランタイムも開放してくれるよね
hs_exit() 呼ばなくても。たぶん
この辺,わかる人いますか
呼ぶ前に hs_init() が必要なのは,なんとなくわかるんだけど
hs_exit() の方は,そのあとアプリケーション全体がすぐ終了する場合は
呼ばなくてもいい?
Windows が呼び出し元のプロセスも Haskell ランタイムも開放してくれるよね
hs_exit() 呼ばなくても。たぶん
この辺,わかる人いますか
832デフォルトの名無しさん
2019/12/07(土) 12:36:43.68ID:ZsYnLuoj プロセス切り離せば?
そうでもしないと他言語呼び出しなんて低レイヤーデバッグする覚悟ないとやってられんぞ。
そうでもしないと他言語呼び出しなんて低レイヤーデバッグする覚悟ないとやってられんぞ。
833デフォルトの名無しさん
2019/12/07(土) 20:22:19.70ID:JHE2lozm やってられない理由は低級言語でもHaskellでもなくGHC
Haskell実装はGHC以外にもいくらでもありえるから
Haskell実装はGHC以外にもいくらでもありえるから
834デフォルトの名無しさん
2019/12/07(土) 21:02:46.11ID:KFm7FNER Haskellでスマホアプリ作りたいの!
835831
2019/12/08(日) 05:30:16.98ID:9cPQrEyK836デフォルトの名無しさん
2019/12/10(火) 15:02:27.60ID:6qyfceqR 計算のキャッシュをしたい。
ある重い計算 heavy :: IO Char があってそれを f,g :: IO () から呼び出す。
一度 heavy が呼び出されて Char が返ってきた後はそれを使いまわしたい。
f で呼び出したなら、その結果の Char を g でも使う。
ただし heavy の実行は f,g のどちらかが呼ばれるまではしたくない。
cachedHeavy = unsafePerformIO heavy
とすれば cachedHeavy が利用されたときに一度だけ簡約がおこなわれて、
その時だけ heavy が実行されるので、これを使えば事は足りる。
でもなるべく unsafe は使いたくない。どうすればいいでしょうか。
ある重い計算 heavy :: IO Char があってそれを f,g :: IO () から呼び出す。
一度 heavy が呼び出されて Char が返ってきた後はそれを使いまわしたい。
f で呼び出したなら、その結果の Char を g でも使う。
ただし heavy の実行は f,g のどちらかが呼ばれるまではしたくない。
cachedHeavy = unsafePerformIO heavy
とすれば cachedHeavy が利用されたときに一度だけ簡約がおこなわれて、
その時だけ heavy が実行されるので、これを使えば事は足りる。
でもなるべく unsafe は使いたくない。どうすればいいでしょうか。
837デフォルトの名無しさん
2019/12/10(火) 15:23:28.41ID:hI+yeapE 何もしなくても最適化で一回しか使われなくなるんじゃないの
haskellはそんなに馬鹿なの?
haskellはそんなに馬鹿なの?
838デフォルトの名無しさん
2019/12/10(火) 15:23:58.32ID:48kVELqA memcached
839デフォルトの名無しさん
2019/12/10(火) 17:01:00.59ID:6qyfceqR840デフォルトの名無しさん
2019/12/11(水) 22:52:31.45ID:r4LYbsNN -- cached :: IO a -> IO (IO a)
main = cached heavy >>= \ cachedHeavy -> 云々
こういうのでいいならunsafePerformIOは不要
main = cached heavy >>= \ cachedHeavy -> 云々
こういうのでいいならunsafePerformIOは不要
841デフォルトの名無しさん
2019/12/12(木) 11:38:57.75ID:y6+ig4ik >>840
はい。 f,g はトップレベルではなくIOアクションの中で定義しても大丈夫です。
IORefを使わなきゃ無理かな、と思ってたんだけど、これは目から鱗でした。
cached = pure
でいいんだよね?単にモナド一枚かぶせるだけで計算のキャッシュになるなんて、
今年一番のオドロキですわ
はい。 f,g はトップレベルではなくIOアクションの中で定義しても大丈夫です。
IORefを使わなきゃ無理かな、と思ってたんだけど、これは目から鱗でした。
cached = pure
でいいんだよね?単にモナド一枚かぶせるだけで計算のキャッシュになるなんて、
今年一番のオドロキですわ
842デフォルトの名無しさん
2019/12/12(木) 13:37:02.84ID:9RMznkJC843デフォルトの名無しさん
2019/12/12(木) 15:32:55.96ID:y6+ig4ik844デフォルトの名無しさん
2019/12/12(木) 15:46:44.83ID:y6+ig4ik つまり… こんな感じでいいのかしら
cached :: IO a -> IO (IO a)
cached f = do
r <- newIORef Nothing
pure $ do
c <- readIORef r
case c of
Nothing -> do
ts <- f
modifyIORef r . const . Just $ ts
pure ts
Just ts -> pure ts
> x <- cached $ print "heavy" >> pure 42
> x
"heavy"
42
> x
42
cached :: IO a -> IO (IO a)
cached f = do
r <- newIORef Nothing
pure $ do
c <- readIORef r
case c of
Nothing -> do
ts <- f
modifyIORef r . const . Just $ ts
pure ts
Just ts -> pure ts
> x <- cached $ print "heavy" >> pure 42
> x
"heavy"
42
> x
42
845デフォルトの名無しさん
2019/12/13(金) 00:08:15.85ID:0IkxZSMD IORefをご存知でない?
846デフォルトの名無しさん
2019/12/13(金) 11:45:01.85ID:Zghtw6X7 >>845
間違っているところがあったら、具体的に教えていただきたい。
間違っているところがあったら、具体的に教えていただきたい。
847デフォルトの名無しさん
2019/12/14(土) 10:44:10.58ID:EaJih9JU cabalファイルの中でexectableで同じcabalファイルの
ライブラリー名をbuild-dependsにかいてあるのに
そのライブラリーのbuild-depensを全部書かないとコンパイルできない
のはなんで?テンプレート使ってるからとかある?
ライブラリー名をbuild-dependsにかいてあるのに
そのライブラリーのbuild-depensを全部書かないとコンパイルできない
のはなんで?テンプレート使ってるからとかある?
848デフォルトの名無しさん
2019/12/14(土) 14:55:50.10ID:EaJih9JU ソースディレクトリをexeとlibに別々にしたら直った
なんだこのバグは酷いバグだ
なんだこのバグは酷いバグだ
849デフォルトの名無しさん
2019/12/16(月) 18:39:37.82ID:fwNQkg00 岡部健 (Ken Okabe)今度はQuoraでもアカウントBANされる
https://link.medium.com/EX3Y4COIs2
https://link.medium.com/EX3Y4COIs2
850デフォルトの名無しさん
2019/12/16(月) 19:25:09.38 終わったコンテンツでしょ、彼はもう
851デフォルトの名無しさん
2019/12/17(火) 00:03:50.44ID:3VYtFLTP オワコン。人間もっとやることある
852デフォルトの名無しさん
2019/12/17(火) 08:07:51.17ID:hHVSxQ9g キャッシュ? https://wandbox.org/permlink/98ZKnQW0uSr5c5CV
f () = print "hoge" >> getLine >>= \x -> print "foo" >> return (\() -> x)
main = do
putStrLn "1234"
f () >>= \g -> do
let e = g ()
print e
print e
f () = print "hoge" >> getLine >>= \x -> print "foo" >> return (\() -> x)
main = do
putStrLn "1234"
f () >>= \g -> do
let e = g ()
print e
print e
853836
2019/12/17(火) 15:16:27.15ID:zdxsmCDQ854デフォルトの名無しさん
2019/12/17(火) 22:59:40.32ID:nTHXuzTI そもそもライブラリを全てimportする奴はいないので
使わなかったライブラリのコードは最後まで実行されない
全てのライブラリについて使うか使わないか予測できないならば実行の順序は予測できない
使わなかったライブラリのコードは最後まで実行されない
全てのライブラリについて使うか使わないか予測できないならば実行の順序は予測できない
855デフォルトの名無しさん
2019/12/18(水) 00:29:20.63ID:RN3F5ybK856デフォルトの名無しさん
2019/12/18(水) 09:15:25.20ID:fJHQ6oEy え、岡部健ってQuoraで暴れてたの?
アカウント停止はまた癇癪起こして名誉毀損してたとかが理由??
アカウント停止はまた癇癪起こして名誉毀損してたとかが理由??
857デフォルトの名無しさん
2019/12/18(水) 11:17:26.49ID:RrfoIO3F >>856
彼がなにかしらのコミュニティーでうまくやっていけないのは、これまでの活動からわかりきっている。
むしろ、Quoraではよく持った方だと思うよ。お薬をきちんと服用するようになってるんだろうね。
彼がなにかしらのコミュニティーでうまくやっていけないのは、これまでの活動からわかりきっている。
むしろ、Quoraではよく持った方だと思うよ。お薬をきちんと服用するようになってるんだろうね。
858デフォルトの名無しさん
2019/12/18(水) 14:06:51.57ID:eMsBbOWH あいつか
859デフォルトの名無しさん
2019/12/19(木) 00:31:57.76ID:MqZ434Qi haskell自体はいいんだけどstackとかhieとかいちいちでかくてめんどくさい
本当にhaskell書いてる人はいるの?
本当にhaskell書いてる人はいるの?
860デフォルトの名無しさん
2019/12/19(木) 07:07:47.77ID:lwXrm8Zb 依存関係を管理するのは理想
依存関係を消すのが現実
C++やSTLに依存することすら嫌ってCだけで書くみたいな現実
依存関係を消すのが現実
C++やSTLに依存することすら嫌ってCだけで書くみたいな現実
861デフォルトの名無しさん
2019/12/19(木) 07:48:35.49ID:gwJfRXBJ hieはもうちょっとなんとかならんのかとは思う
862デフォルトの名無しさん
2019/12/19(木) 10:21:19.22ID:+cpLTGtZ >>860
Rubyをdisるのは止めれ
Rubyをdisるのは止めれ
863デフォルトの名無しさん
2019/12/19(木) 14:13:07.54ID:rbd8D3sc 実際にHaskellでコード書いてみると分かるけど
コンパイル通れば計算結果は確かに正しいんだけど
巨大なメモリを謎に使うようなバグが混入する事が結構あって
その種類のバグってエラー吐かないから特定がめっちゃ難しい。
巨大なプロジェクトでHaskell使うのは現実的には無理だと思う。
コンパイル通れば計算結果は確かに正しいんだけど
巨大なメモリを謎に使うようなバグが混入する事が結構あって
その種類のバグってエラー吐かないから特定がめっちゃ難しい。
巨大なプロジェクトでHaskell使うのは現実的には無理だと思う。
864デフォルトの名無しさん
2019/12/19(木) 14:32:39.93ID:0ocPbHfL それ
haskell で書かれたプログラムのパフォーマンスチューニングむずすぎる
haskell で書かれたプログラムのパフォーマンスチューニングむずすぎる
865デフォルトの名無しさん
2019/12/19(木) 14:54:58.39 あればあるだけ使おうとするんでない?
足りなくなってからようやく(これからやる処理に必要最低限の)ガベコレ
この繰り返しだから永遠に自転車操業
足りなくなってからようやく(これからやる処理に必要最低限の)ガベコレ
この繰り返しだから永遠に自転車操業
866デフォルトの名無しさん
2019/12/19(木) 19:09:11.03ID:rbd8D3sc この種のバグの混入原因って大抵の場合
ネットに散らばっている'Haskellらしい'記法にあったりするから
初心者の頃に読んだ書き方が
「(実はこの人全然Haskellでコード書いてないじゃんっ!!)」
と気が付くまでワンセット
ネット上だと処理が大きくなると破綻するようなサンプルコードばっかりでウンザリする
特に遅延評価を活用するような記法は
大抵メモリ関連のバグの原因になるから実際には避けなきゃダメなのばかり
ネットに散らばっている'Haskellらしい'記法にあったりするから
初心者の頃に読んだ書き方が
「(実はこの人全然Haskellでコード書いてないじゃんっ!!)」
と気が付くまでワンセット
ネット上だと処理が大きくなると破綻するようなサンプルコードばっかりでウンザリする
特に遅延評価を活用するような記法は
大抵メモリ関連のバグの原因になるから実際には避けなきゃダメなのばかり
867デフォルトの名無しさん
2019/12/19(木) 20:23:04.10ID:l1p3Y60G デフォルトの挙動性格評価にするやつあったよね
あれ使ってる?
あれ使ってる?
868デフォルトの名無しさん
2019/12/19(木) 20:49:23.97ID:lwXrm8Zb ガベコレ言語を全否定してみるのも一つの方法
たとえばスマホが壊れたら全部新品にするかそれとも壊れた部品を特定してそこだけ修理するか
たとえばスマホが壊れたら全部新品にするかそれとも壊れた部品を特定してそこだけ修理するか
869デフォルトの名無しさん
2019/12/19(木) 20:50:47.99ID:mvsIV7PX 結局最適化しようとするとコンパイラのくせをしっかり理解してたり
凄まじい技術力がいるという。。
凄まじい技術力がいるという。。
870デフォルトの名無しさん
2019/12/19(木) 23:44:31.80 つまり Rust の時代か
871デフォルトの名無しさん
2019/12/20(金) 10:00:27.91ID:lm7vpsLR Rustってhaskellerにも結構評判いいけどどうなの
872デフォルトの名無しさん
2019/12/20(金) 11:16:14.21ID:MYxSal4F >>871
俺は「あぁ,Haskell でいうアレね」みたいな感じで学べた
厳密な感じが好きなら,気にいるんじゃないのかな
ドキュメントも揃っていて学びやすいと思う
ただ,俺はいまいち使い所を見いだせてない
Haskell で書ける分野なら Haskell で書いちゃうし
ちょっとしたツールとかサーバーサイドとかは Go のが楽だし
WebAssembly を生成するために使うのが
今一番,Rust の活きる分野な気がする
Rust は,クロスコンパイルが楽なので
(個人の感想です
俺は「あぁ,Haskell でいうアレね」みたいな感じで学べた
厳密な感じが好きなら,気にいるんじゃないのかな
ドキュメントも揃っていて学びやすいと思う
ただ,俺はいまいち使い所を見いだせてない
Haskell で書ける分野なら Haskell で書いちゃうし
ちょっとしたツールとかサーバーサイドとかは Go のが楽だし
WebAssembly を生成するために使うのが
今一番,Rust の活きる分野な気がする
Rust は,クロスコンパイルが楽なので
(個人の感想です
873デフォルトの名無しさん
2019/12/20(金) 11:25:55.75ID:mQBHONqp >>871
ただのLisp方言やML方言はもう飽きたってことだろ
ただのLisp方言やML方言はもう飽きたってことだろ
874デフォルトの名無しさん
2019/12/20(金) 12:03:56.77ID:tZwYgFV3 「C言語は純粋関数型」と言ってたのってQuoraの岡部健?
875デフォルトの名無しさん
2019/12/20(金) 21:36:07.96ID:/W4lQx2e フロントをrustで書くとか一番馬鹿な選択だろ。話にならん。
876デフォルトの名無しさん
2019/12/23(月) 17:59:43.65ID:/flai8cL もしかしてParsecってあんまり使われてない?
Parsecのドキュメントが2001年とか古いのしか無くて、最初のサンプルコードすら通らない
ライブラリの使い方が解らなくていきなり躓いてる
Parsecのドキュメントが2001年とか古いのしか無くて、最初のサンプルコードすら通らない
ライブラリの使い方が解らなくていきなり躓いてる
877デフォルトの名無しさん
2019/12/23(月) 18:29:48.72ID:B7hjQJ1Z ここの住民、圏論とかの話だと玄人っぽいのにプログラミングの話になると初心者っぽくて謎
878デフォルトの名無しさん
2019/12/23(月) 20:24:57.43ID:E1rjr0pL >>876
ドキュメントと言うのが何を指しているのか具体的なURLを示してくれないと、
何が原因でどう躓いているのか、助けようにも調べる取っ掛かりが無くて困る。
あと、本当にその古いドキュメントとやらしか学習資料は無いのか?
他にチュートリアルやブログなどは参考にならないのか?
ドキュメントと言うのが何を指しているのか具体的なURLを示してくれないと、
何が原因でどう躓いているのか、助けようにも調べる取っ掛かりが無くて困る。
あと、本当にその古いドキュメントとやらしか学習資料は無いのか?
他にチュートリアルやブログなどは参考にならないのか?
879デフォルトの名無しさん
2019/12/23(月) 20:56:14.64ID:A/dzNHpI どうせ躓くなら一番最初に躓く初心者っぽい奴の方が運が良い
ビギナーズラック
巨大なメモリを使う巨大なプロジェクトの完成直前に躓くのはかなり運が悪い
ビギナーズラック
巨大なメモリを使う巨大なプロジェクトの完成直前に躓くのはかなり運が悪い
880デフォルトの名無しさん
2019/12/23(月) 21:51:15.50ID:pH3djwe1 >>876
Parsec の開発は今や"メンテナンスモード"に入っていて、代わりに attoparsec や megaparsec が活発。
https://haskell.e-bigmoon.com/posts/2019/07-14-megaparsec-tutorial.html
Parsec の開発は今や"メンテナンスモード"に入っていて、代わりに attoparsec や megaparsec が活発。
https://haskell.e-bigmoon.com/posts/2019/07-14-megaparsec-tutorial.html
881デフォルトの名無しさん
2019/12/23(月) 21:58:54.38ID:/flai8cL ここ[parsec: Monadic parser combinators](http://hackage.haskell.org/package/parsec)に載ってる
これ[Parsec, a fast combinator parser](https://web.archive.org/web/20140528151730/http://legacy.cs.uu.nl/daan/download/parsec/parsec.pdf)です
他のは、ついでにParsecに触れているという感じで、詳しそうなのはこれしか見付けられませんでした
<続く>
これ[Parsec, a fast combinator parser](https://web.archive.org/web/20140528151730/http://legacy.cs.uu.nl/daan/download/parsec/parsec.pdf)です
他のは、ついでにParsecに触れているという感じで、詳しそうなのはこれしか見付けられませんでした
<続く>
882デフォルトの名無しさん
2019/12/23(月) 21:59:30.49ID:/flai8cL 最初のサンプルコードをGHCiで打ち込んで試そうとしてるんですが、
Prelude> module Main where
Prelude> import Parsec
<no location info>: error:
Could not find module ‘Parsec’
Perhaps you meant Parser (needs flag -package-key ghc-8.6.5)
モジュールが見つからないと言われます
最新バージョンの名前空間?と明らかに違っているので、
ここ[Text.Parsec](http://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec.html)で、この二行
import Text.Parsec.Prim
import Text.Parsec.Combinator
を見付け書いたところ
Prelude> import Text.Parsec.Prim
Prelude Text.Parsec.Prim> import Text.Parsec.Combinator
<続く>
Prelude> module Main where
Prelude> import Parsec
<no location info>: error:
Could not find module ‘Parsec’
Perhaps you meant Parser (needs flag -package-key ghc-8.6.5)
モジュールが見つからないと言われます
最新バージョンの名前空間?と明らかに違っているので、
ここ[Text.Parsec](http://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec.html)で、この二行
import Text.Parsec.Prim
import Text.Parsec.Combinator
を見付け書いたところ
Prelude> import Text.Parsec.Prim
Prelude Text.Parsec.Prim> import Text.Parsec.Combinator
<続く>
883デフォルトの名無しさん
2019/12/23(月) 22:00:22.40ID:/flai8cL Prelude Text.Parsec.Prim Text.Parsec.Combinator> simple :: Parser Char
<interactive>:6:11: error:
Not in scope: type constructor or class ‘Parser’
Perhaps you meant one of these:
‘Parsec’ (imported from Text.Parsec.Prim),
‘ParsecT’ (imported from Text.Parsec.Prim)
Prelude Text.Parsec.Prim Text.Parsec.Combinator> simple :: Parsec Char
<interactive>:7:11: error:
? Expecting two more arguments to ‘Parsec Char’
Expected a type, but ‘Parsec Char’ has kind ‘* -> * -> *’
? In an expression type signature: Parsec Char
In the expression: simple :: Parsec Char
In an equation for ‘it’: it = simple :: Parsec Char
Prelude Text.Parsec.Prim Text.Parsec.Combinator> simple :: ParsecT Char
<interactive>:8:11: error:
? Expecting three more arguments to ‘ParsecT Char’
Expected a type, but
‘ParsecT Char’ has kind
‘* -> (* -> *) -> * -> *’
? In an expression type signature: ParsecT Char
In the expression: simple :: ParsecT Char
In an equation for ‘it’: it = simple :: ParsecT Char
引数が足りないみたいなことを言われます
英語も怪しいのに英語の解説も使えないとなるとどうして良いやら…
<interactive>:6:11: error:
Not in scope: type constructor or class ‘Parser’
Perhaps you meant one of these:
‘Parsec’ (imported from Text.Parsec.Prim),
‘ParsecT’ (imported from Text.Parsec.Prim)
Prelude Text.Parsec.Prim Text.Parsec.Combinator> simple :: Parsec Char
<interactive>:7:11: error:
? Expecting two more arguments to ‘Parsec Char’
Expected a type, but ‘Parsec Char’ has kind ‘* -> * -> *’
? In an expression type signature: Parsec Char
In the expression: simple :: Parsec Char
In an equation for ‘it’: it = simple :: Parsec Char
Prelude Text.Parsec.Prim Text.Parsec.Combinator> simple :: ParsecT Char
<interactive>:8:11: error:
? Expecting three more arguments to ‘ParsecT Char’
Expected a type, but
‘ParsecT Char’ has kind
‘* -> (* -> *) -> * -> *’
? In an expression type signature: ParsecT Char
In the expression: simple :: ParsecT Char
In an equation for ‘it’: it = simple :: ParsecT Char
引数が足りないみたいなことを言われます
英語も怪しいのに英語の解説も使えないとなるとどうして良いやら…
884デフォルトの名無しさん
2019/12/23(月) 22:04:05.15ID:pH3djwe1 haskell ide engine って今どんな使用感?
そろそろ spacemacs haskell layer (中身 intero) から乗り換えようと思ってんだけど
未だにバージョン 1 未満なのが気になった。まだ待つべきかな。
そろそろ spacemacs haskell layer (中身 intero) から乗り換えようと思ってんだけど
未だにバージョン 1 未満なのが気になった。まだ待つべきかな。
885デフォルトの名無しさん
2019/12/23(月) 22:05:51.18ID:/flai8cL886デフォルトの名無しさん
2019/12/23(月) 22:07:10.46ID:wextYSDX887デフォルトの名無しさん
2019/12/23(月) 22:28:25.82ID:pH3djwe1 >> 883
このエラーメッセージ
Not in scope: type constructor or class ‘Parser’
これは Parser が見つからないよ。みたいな意味
検索サイトのフーグルを「パッケージ指定」機能を使って探すと
https://hoogle.haskell.org/?hoogle=Parser%20package%3Aparsec
Parser は import Text.Parsec.String すれば使えるってことが解って、
同じように letter の場所も調べられる。
attoparsec や megaparsec にも似たやつあるっぽいから、何となくで読み替えていけばいいんじゃないかな。
このエラーメッセージ
Not in scope: type constructor or class ‘Parser’
これは Parser が見つからないよ。みたいな意味
検索サイトのフーグルを「パッケージ指定」機能を使って探すと
https://hoogle.haskell.org/?hoogle=Parser%20package%3Aparsec
Parser は import Text.Parsec.String すれば使えるってことが解って、
同じように letter の場所も調べられる。
attoparsec や megaparsec にも似たやつあるっぽいから、何となくで読み替えていけばいいんじゃないかな。
888デフォルトの名無しさん
2019/12/23(月) 23:28:55.39ID:fuVSP632 >>886
> クヌースなんかもそんなもんだぞ。
Knuthはそんなことはないだろ
TeXもMetafontも最初のはKnuth自身が実装したのだから
> プログラム理論と実装ガツガツやる能力は別物だから。
圏論なんかの知識は実装と全く関係ないからね、そういう方面に明るいのと実装能力とは全く無関係だ
> クヌースなんかもそんなもんだぞ。
Knuthはそんなことはないだろ
TeXもMetafontも最初のはKnuth自身が実装したのだから
> プログラム理論と実装ガツガツやる能力は別物だから。
圏論なんかの知識は実装と全く関係ないからね、そういう方面に明るいのと実装能力とは全く無関係だ
889デフォルトの名無しさん
2019/12/23(月) 23:34:33.07ID:A/dzNHpI KnuthやLinusって
圏論どころかカプセル化・継承・ポリモーフィズムすら使ってない印象がある
実装能力とは全く無関係だし
圏論どころかカプセル化・継承・ポリモーフィズムすら使ってない印象がある
実装能力とは全く無関係だし
890デフォルトの名無しさん
2019/12/24(火) 07:35:31.98ID:nFH9kbNZ891デフォルトの名無しさん
2019/12/24(火) 08:12:11.27ID:IDR7+yeu 何をもってknuthにスキルを疑うのか分からんのだけど、彼のプログラミングスキルが
ゴミクズな世界があったとしても、scratchから書く問題ならアルゴリズムだけで
他の人より速いもの書いてそう
ゴミクズな世界があったとしても、scratchから書く問題ならアルゴリズムだけで
他の人より速いもの書いてそう
892デフォルトの名無しさん
2019/12/24(火) 16:43:33.89ID:Y/zbyQKx >>876
すごくタイムリーに reddit に似た質問が上がってるんだが偶然?
https://www.reddit.com/r/haskell/comments/ee6lwy/resources_for_learning_parsec/
すごくタイムリーに reddit に似た質問が上がってるんだが偶然?
https://www.reddit.com/r/haskell/comments/ee6lwy/resources_for_learning_parsec/
893デフォルトの名無しさん
2019/12/24(火) 21:34:10.54ID:4c9jV6+e 本人がtex書くまでこれほど大変と思ってなかったいうとるやん。
そのあとの文芸プログラミングとか、cのコード見てても、これあかんなとしか思わんわ。
そのあとの文芸プログラミングとか、cのコード見てても、これあかんなとしか思わんわ。
894デフォルトの名無しさん
2019/12/27(金) 22:57:25.24ID:LIBStdaN Getting started with Haskell
https://stackoverflow.com/questions/1012573/getting-started-with-haskell
https://stackoverflow.com/questions/tagged/haskell
https://stackoverflow.com/questions/tagged/functional-programming
https://stackoverflow.com/questions/tagged/monads
https://stackoverflow.com/questions/tagged/category-theory
https://stackoverflow.com/questions/tagged/functor
https://stackoverflow.com/questions/tagged/ghc
https://stackoverflow.com/questions/tagged/ghci
https://stackoverflow.com/questions/tagged/haskell-stack
https://stackoverflow.com/questions/tagged/cabal
.
.
.
https://stackoverflow.com/questions/1012573/getting-started-with-haskell
https://stackoverflow.com/questions/tagged/haskell
https://stackoverflow.com/questions/tagged/functional-programming
https://stackoverflow.com/questions/tagged/monads
https://stackoverflow.com/questions/tagged/category-theory
https://stackoverflow.com/questions/tagged/functor
https://stackoverflow.com/questions/tagged/ghc
https://stackoverflow.com/questions/tagged/ghci
https://stackoverflow.com/questions/tagged/haskell-stack
https://stackoverflow.com/questions/tagged/cabal
.
.
.
895デフォルトの名無しさん
2019/12/28(土) 23:16:17.55ID:wvWoDqVP Haskellは小さいプログラムを作るには最適なんだけど
大きいプログラムになるとメモリ周りの最適化が困難なのよね
実行結果自体は正しいからテストすり抜けるだろうし
バックエンドで採用しても
本番環境で初めてメモリヤバイと気付いて死ぬ未来しか見えない
大きいプログラムになるとメモリ周りの最適化が困難なのよね
実行結果自体は正しいからテストすり抜けるだろうし
バックエンドで採用しても
本番環境で初めてメモリヤバイと気付いて死ぬ未来しか見えない
896デフォルトの名無しさん
2019/12/29(日) 00:21:25.50ID:J8aGFBX9 自家用ジェット機と大型旅客機みたいなイメージかな
897デフォルトの名無しさん
2019/12/29(日) 11:10:02.50ID:09k8oxGS898デフォルトの名無しさん
2019/12/29(日) 13:22:56.43ID:/UuMyPob >>897
最初に上がってたsigmaの記事を発見したぞ
https://engineering.fb.com/security/fighting-spam-with-haskell/
なるほどHaskellを実運用するコツはGHCの魔改造から着手する事なのか
・・・って真似できるかーい!!
最初に上がってたsigmaの記事を発見したぞ
https://engineering.fb.com/security/fighting-spam-with-haskell/
なるほどHaskellを実運用するコツはGHCの魔改造から着手する事なのか
・・・って真似できるかーい!!
899デフォルトの名無しさん
2019/12/29(日) 15:18:21.26ID:n6JnyT9E >>898
ノリで採用したら地獄を見た感がヒシヒシと伝わってくる記事だね
その後facebookでHaskellを採用していない事実で察し
https://livedoor.blogimg.jp/sag_alt/imgs/7/e/7ece2698.png
ノリで採用したら地獄を見た感がヒシヒシと伝わってくる記事だね
その後facebookでHaskellを採用していない事実で察し
https://livedoor.blogimg.jp/sag_alt/imgs/7/e/7ece2698.png
900デフォルトの名無しさん
2019/12/29(日) 16:42:39.91ID:ADVmDYvb 遅延評価を諦めて型システムとパターンマッチ系統だけを
よくわからないけどCとかC++辺りに持っていくじゃだめかな
よくわからないけどCとかC++辺りに持っていくじゃだめかな
901デフォルトの名無しさん
2019/12/29(日) 22:43:02.62ID:J8aGFBX9 何を諦めたら最適解になるか?
これは愚問
これは愚問
902デフォルトの名無しさん
2019/12/30(月) 01:49:49.36ID:zGgGf8ov 赤黒木のコード読んでいたら
関数の定義に型情報があるけど
型推論で処理されるコード部分には型情報がない
目視で定義ーコード部を交互確認すると結構きつい
抽象化には貢献してるけど、人間が読み下すのは大変、オレはコンピュータじゃない(怒
そんな感じ
関数の定義に型情報があるけど
型推論で処理されるコード部分には型情報がない
目視で定義ーコード部を交互確認すると結構きつい
抽象化には貢献してるけど、人間が読み下すのは大変、オレはコンピュータじゃない(怒
そんな感じ
903デフォルトの名無しさん
2019/12/30(月) 07:02:47.72ID:gVSpb87m そんなのエディタにやらせればいい
904デフォルトの名無しさん
2019/12/30(月) 09:12:01.80ID:zGgGf8ov 要件定義が整っている関数の書き下ろしと
プログラムで記述されたコードの読み下しは難度が異なる
Haskellのコードは情報密度が高い事と抽象度の高さが強烈に効く
プログラムで記述されたコードの読み下しは難度が異なる
Haskellのコードは情報密度が高い事と抽象度の高さが強烈に効く
905デフォルトの名無しさん
2019/12/30(月) 09:50:40.36ID:aMPpMkgz Hakellだしコード読めば分かるだろ(コメントなし)
↓数カ月後
俺の書いたコードなのに意味が分からない・・・
↓数カ月後
俺の書いたコードなのに意味が分からない・・・
906デフォルトの名無しさん
2019/12/30(月) 10:41:43.52ID:0IC+e4Ro 工学と名のついた無根拠な宗教が蔓延ってる言語よりは科学してるだけマシ
907デフォルトの名無しさん
2019/12/30(月) 12:14:13.13ID:WAqdspci908デフォルトの名無しさん
2019/12/30(月) 13:26:36.21ID:khitn85K 赤黒木は左右対称のコードを2回書かされるから書きたくない
コードを読まなくても分かる
読む前から分かることをどれだけ知っているかが重要
読み始めてから努力するのは遅い
コードを読まなくても分かる
読む前から分かることをどれだけ知っているかが重要
読み始めてから努力するのは遅い
909デフォルトの名無しさん
2019/12/30(月) 16:27:15.32ID:LA/Q6l88910デフォルトの名無しさん
2019/12/30(月) 20:14:21.30ID:fOmQS2Mv911デフォルトの名無しさん
2019/12/30(月) 21:52:49.75ID:rDj24KcK >>909
よく読め、受賞は2019年だが
受賞内容は2009年の功績の話だぞ
そこで語られてる内容も2014年のGHC魔改造の件の話だし
5年も経過してるのに未だにその話しか出てこないって事はそういう事よ
よく読め、受賞は2019年だが
受賞内容は2009年の功績の話だぞ
そこで語られてる内容も2014年のGHC魔改造の件の話だし
5年も経過してるのに未だにその話しか出てこないって事はそういう事よ
912デフォルトの名無しさん
2019/12/30(月) 22:25:35.97ID:khitn85K よく読んだら分かること
読まなくても分かること
普遍的な方を重視するのがいいと思うよ
読まなくても分かること
普遍的な方を重視するのがいいと思うよ
913デフォルトの名無しさん
2019/12/30(月) 23:48:10.12ID:LA/Q6l88914デフォルトの名無しさん
2019/12/31(火) 00:12:07.17ID:Lj+eqMzp ちなみにFacebook自身は2015年の投稿で2年かけて
Sigmaの主要技術をHaskellに移行したといっている
https://engineering.fb.com/security/fighting-spam-with-haskell/
スライドもある
http://multicore.doc.ic.ac.uk/iPr0gram/slides/2015-2016/Marlow-fighting-spam.pdf
そしてSigma の Software Engineering Manager の公募を最近LinkedInでかけていた
職位はManagerだし応募要件にはHaskellスキル必須とは記載していないようなので
Haskellが実用的に使われているっていう傍証にはならないけどプロジェクトは生きてる様子
またその後別の各技術にとってかわられたという情報もなさげ
Sigmaの主要技術をHaskellに移行したといっている
https://engineering.fb.com/security/fighting-spam-with-haskell/
スライドもある
http://multicore.doc.ic.ac.uk/iPr0gram/slides/2015-2016/Marlow-fighting-spam.pdf
そしてSigma の Software Engineering Manager の公募を最近LinkedInでかけていた
職位はManagerだし応募要件にはHaskellスキル必須とは記載していないようなので
Haskellが実用的に使われているっていう傍証にはならないけどプロジェクトは生きてる様子
またその後別の各技術にとってかわられたという情報もなさげ
915デフォルトの名無しさん
2019/12/31(火) 01:50:17.69ID:Lj+eqMzp916デフォルトの名無しさん
2019/12/31(火) 02:29:04.76ID:MpeDYErb ナイス
917デフォルトの名無しさん
2019/12/31(火) 23:30:17.57ID:a+xjNkxx >>898
haskellやってる奴が評価されるのはその手の最適化できることを見込まれてるからだぞ。
haskellやってる奴が評価されるのはその手の最適化できることを見込まれてるからだぞ。
918デフォルトの名無しさん
2020/01/01(水) 04:13:12.99ID:IaAF7ILo Haskellを始めたばかりの者です
do構文は多用しても良いのですか?
手続き型を書いているような気分になります
関数型言語は初めてなので不安です
do構文は多用しても良いのですか?
手続き型を書いているような気分になります
関数型言語は初めてなので不安です
919デフォルトの名無しさん
2020/01/01(水) 09:08:22.50ID:msO/HyKq >>918
いいよ。モナドは手続きを実現するのに役立つ抽象だよ。
でもアプリカティブで用が足りるならアプリカティブを使うべき。
IO モナドを do で合成するシーンが多いならリファクタリングの余地があるかも。
Control.Monad や Control.Applicative のユーティリティが利用できないか検討してみて
いいよ。モナドは手続きを実現するのに役立つ抽象だよ。
でもアプリカティブで用が足りるならアプリカティブを使うべき。
IO モナドを do で合成するシーンが多いならリファクタリングの余地があるかも。
Control.Monad や Control.Applicative のユーティリティが利用できないか検討してみて
920デフォルトの名無しさん
2020/01/01(水) 09:16:52.80ID:msO/HyKq =>= 2020年の抱負 =>=
・珠玉本を再開したい。少なくとも二度目の四天王登場回までは行きたい
・Haskell でごはん食べる
・珠玉本を再開したい。少なくとも二度目の四天王登場回までは行きたい
・Haskell でごはん食べる
921デフォルトの名無しさん
2020/01/01(水) 10:49:49.64ID:1YmeR5a8 豊富なんてかいちゃって意識高い系かよwwwwww
922デフォルトの名無しさん
2020/01/01(水) 11:24:31.90ID:msO/HyKq >>921 いいでしょw 新年なんだし
923 【最底辺】 【25円】
2020/01/01(水) 13:25:14.55ID:tqBP4ADq Haskellの未来
924デフォルトの名無しさん
2020/01/01(水) 16:23:17.36ID:0CkTsEaj 一般化が未来だと仮定すると未来は...
925デフォルトの名無しさん
2020/01/02(木) 06:03:17.61ID:Ee9Lo0CG >>920
海外にはRemote OKなところあるよ
A List of companies that use Haskell
https://github.com/erkmos/haskell-companies
海外にはRemote OKなところあるよ
A List of companies that use Haskell
https://github.com/erkmos/haskell-companies
926デフォルトの名無しさん
2020/01/02(木) 07:13:34.68ID:RghxuQ5t OSS として良さげなツールを作って
Github Sponcers で支援を受ける
って方針を考えてる。どうかな
Github Sponcers で支援を受ける
って方針を考えてる。どうかな
927デフォルトの名無しさん
2020/01/02(木) 07:26:54.44ID:RghxuQ5t >>925
名古屋の時計販売店BIGMOONさん
https://www.e-bigmoon.com
https://haskell.e-bigmoon.com ってお役立ちHaskell 情報がありがたいサイトやん。
中の人、時計屋さんだったのか…
名古屋の時計販売店BIGMOONさん
https://www.e-bigmoon.com
https://haskell.e-bigmoon.com ってお役立ちHaskell 情報がありがたいサイトやん。
中の人、時計屋さんだったのか…
928デフォルトの名無しさん
2020/01/03(金) 13:05:21.13ID:EVicjzWY Haskellは妙にテクニカルな部分が多い気がする
2変数関数fと1変数関数gを合成するときに
g . f
ではだめで
g .: f where (.:) = (.) (.) (.)
って書くのとか良く思いつくなって感じ
2変数関数fと1変数関数gを合成するときに
g . f
ではだめで
g .: f where (.:) = (.) (.) (.)
って書くのとか良く思いつくなって感じ
929デフォルトの名無しさん
2020/01/03(金) 13:32:58.92ID:r+r/o5nr >>928
それは、ポイントフリーで書いているからテクニカルに見えるたけで、
引数を明記すればビギナーにも理解できる式になるぞ。
やってみれば分かる。
他のもそうだ。
例えばライブラリの作者がポイントフリーで書いているのは、
その方がベテランの作者やコミュニティーにとって読みやすいからだ。
彼らもビギナーを相手に解説する際は、
自分達には多少洗練されていない様に見えても、
ビギナーにとっての読みやすさを優先する。
日本語の文章における「漢字」と「かな」の関係のようなものだ。
それは、ポイントフリーで書いているからテクニカルに見えるたけで、
引数を明記すればビギナーにも理解できる式になるぞ。
やってみれば分かる。
他のもそうだ。
例えばライブラリの作者がポイントフリーで書いているのは、
その方がベテランの作者やコミュニティーにとって読みやすいからだ。
彼らもビギナーを相手に解説する際は、
自分達には多少洗練されていない様に見えても、
ビギナーにとっての読みやすさを優先する。
日本語の文章における「漢字」と「かな」の関係のようなものだ。
930デフォルトの名無しさん
2020/01/03(金) 13:49:51.60ID:EVicjzWY931デフォルトの名無しさん
2020/01/03(金) 13:53:52.89ID:biPe5Zol g . f がだめな理由は型なので
fun<A, B> g;
fun<C, fun<D, A> > f;
このような型を宣言できる任意の言語に同じ問題がある
また、他の言語で問題が解決されたらHaskellでも解決できる
fun<A, B> g;
fun<C, fun<D, A> > f;
このような型を宣言できる任意の言語に同じ問題がある
また、他の言語で問題が解決されたらHaskellでも解決できる
932デフォルトの名無しさん
2020/01/03(金) 14:08:31.95ID:EVicjzWY >>931
g :: b -> c
f :: a1 -> a2 -> b
に対して
(.) :: (b -> c) -> (a -> b) -> a -> c
の a を a1 -> a2 と解釈してくれれば話が速いんだけどね
a1 -> a2 -> b が実際には a1 -> (a2 -> b) で要は(->)が右結合だから駄目なのよね
g :: b -> c
f :: a1 -> a2 -> b
に対して
(.) :: (b -> c) -> (a -> b) -> a -> c
の a を a1 -> a2 と解釈してくれれば話が速いんだけどね
a1 -> a2 -> b が実際には a1 -> (a2 -> b) で要は(->)が右結合だから駄目なのよね
933デフォルトの名無しさん
2020/01/03(金) 15:06:47.95ID:r+r/o5nr >>930
すまん、そういう話ではない。
「妙にテクニカルな部分が多い」と言うのは、
君の感じたhaskellの不満点や欠点なんだと俺は捉えたが、違うか?
2変数関数と1変数関数とを合成する関数(.:)の「型がまず先」にあって、
(.:) :: (c -> d) -> (a -> b -> c) -> (a -> b -> -> d)
これを実装するのに
(.:) = (.) (.) (.)
と書く者もいて、君に妙にテクニカルだと感じさせるのかもしれないが、
(.:) g f = \a b -> g (f a b)
こう書けば、ビギナーにも容易に意味が読みとれる。
テクニカルでは全然ないだろう。
君が妙にテクニカルだと感じる大部分はhaskellの生来のものではなく、
単にビギナーに読めるようにも書けるコードをたまたまテクニカルに書いただけだ。
身の丈や好みに合った書き方をすれば不満に感じることはないだろう、と言いたかった。
すまん、そういう話ではない。
「妙にテクニカルな部分が多い」と言うのは、
君の感じたhaskellの不満点や欠点なんだと俺は捉えたが、違うか?
2変数関数と1変数関数とを合成する関数(.:)の「型がまず先」にあって、
(.:) :: (c -> d) -> (a -> b -> c) -> (a -> b -> -> d)
これを実装するのに
(.:) = (.) (.) (.)
と書く者もいて、君に妙にテクニカルだと感じさせるのかもしれないが、
(.:) g f = \a b -> g (f a b)
こう書けば、ビギナーにも容易に意味が読みとれる。
テクニカルでは全然ないだろう。
君が妙にテクニカルだと感じる大部分はhaskellの生来のものではなく、
単にビギナーに読めるようにも書けるコードをたまたまテクニカルに書いただけだ。
身の丈や好みに合った書き方をすれば不満に感じることはないだろう、と言いたかった。
934デフォルトの名無しさん
2020/01/03(金) 15:11:49.96ID:biPe5Zol >>932
随伴の事か
随伴の事か
935デフォルトの名無しさん
2020/01/03(金) 16:07:32.31ID:EVicjzWY >>933
Haskellに不満を持ってるとかではなくて単に凝った式に良く出会うというだけの話よ
そして凝った式を同値変形で分かりやすい式に変形するのが難しいことも多いと思う
個人的にはどう実装するかよりもどう同一視するかの方に興味がある
Haskellに不満を持ってるとかではなくて単に凝った式に良く出会うというだけの話よ
そして凝った式を同値変形で分かりやすい式に変形するのが難しいことも多いと思う
個人的にはどう実装するかよりもどう同一視するかの方に興味がある
936デフォルトの名無しさん
2020/01/03(金) 16:22:44.44ID:r+r/o5nr937デフォルトの名無しさん
2020/01/03(金) 16:34:21.29ID:EVicjzWY938デフォルトの名無しさん
2020/01/03(金) 18:40:52.72ID:UgBOwnvC 凝った式を書ける俺ってイケてる!っていう中二病の文化なんでしょ
939デフォルトの名無しさん
2020/01/03(金) 21:30:15.19ID:biPe5Zol また心理の話してる
メンタリストの文化なのかな
メンタリストの文化なのかな
940デフォルトの名無しさん
2020/01/03(金) 21:54:01.12ID:jtHjGBI5 リストの1要素を書き換える関数が用意されてないのは、それが非推奨だからなの?
配列みたいな気分では使えないのかな
配列みたいな気分では使えないのかな
941デフォルトの名無しさん
2020/01/03(金) 22:42:07.13ID:biPe5Zol IOが非推奨ではないから
まるでIOが非推奨であるかのような関数が用意されていない事に違和感はない
まるでIOが非推奨であるかのような関数が用意されていない事に違和感はない
942デフォルトの名無しさん
2020/01/07(火) 17:00:22.12ID:xmklvGxc 書き換え・・・?
Haskellに書き換えという概念がそもそもあったっけ?
Haskellに書き換えという概念がそもそもあったっけ?
943デフォルトの名無しさん
2020/01/07(火) 18:53:28.45ID:KmM+4rGq 書き換えができるデータ型は定義できる
それを定義したモジュールにはその概念がある
そのモジュールと概念がHaskellの中にあるのか外にあるのかは知らん
それを定義したモジュールにはその概念がある
そのモジュールと概念がHaskellの中にあるのか外にあるのかは知らん
944デフォルトの名無しさん
2020/01/19(日) 01:06:57.37ID:7oa0iQg0 すみません質問なんですが、
f [5,4,8,7] == [5,(5+4),(5+4+8),(5+4+8+7)]
みたいな関数を作りたくて
g :: [Int] -> ([Int],[Int])
g (ys) = (ys,[1..length(ys)])
h:: ([Int],[Int]) -> [Int]
h (xs, []) = []
h (xs,y:ys) = sum (take y xs) : h(xs,ys)
f = h.g
と書いたんですけど、これって関数合成以外の方法で書けますか?
出来れば一つの関数で定義したいんですが、行き詰ってます(汗
f [5,4,8,7] == [5,(5+4),(5+4+8),(5+4+8+7)]
みたいな関数を作りたくて
g :: [Int] -> ([Int],[Int])
g (ys) = (ys,[1..length(ys)])
h:: ([Int],[Int]) -> [Int]
h (xs, []) = []
h (xs,y:ys) = sum (take y xs) : h(xs,ys)
f = h.g
と書いたんですけど、これって関数合成以外の方法で書けますか?
出来れば一つの関数で定義したいんですが、行き詰ってます(汗
945デフォルトの名無しさん
2020/01/19(日) 01:34:42.77ID:lT5Fy0hi コレはダメ?
sumlist [] = []
sumlist (x:xs) = x:(map (+x) $ sumlist xs )
main = do
print $ sumlist [5,4,8,7]
print $ take 10 $ [1..]
-----
[5,9,17,24]
[1,2,3,4,5,6,7,8,9,10]
sumlist [] = []
sumlist (x:xs) = x:(map (+x) $ sumlist xs )
main = do
print $ sumlist [5,4,8,7]
print $ take 10 $ [1..]
-----
[5,9,17,24]
[1,2,3,4,5,6,7,8,9,10]
946デフォルトの名無しさん
2020/01/19(日) 01:37:22.32ID:lT5Fy0hi 間違った
sumlist [] =[]
sumlist (x:xs) = x:(map (+x) $ sumlist xs )
main = do
print $ sumlist [5,4,8,7]
print $ take 10 $ sumlist [1..]
----
[5,9,17,24]
[1,3,6,10,15,21,28,36,45,55
sumlist [] =[]
sumlist (x:xs) = x:(map (+x) $ sumlist xs )
main = do
print $ sumlist [5,4,8,7]
print $ take 10 $ sumlist [1..]
----
[5,9,17,24]
[1,3,6,10,15,21,28,36,45,55
947デフォルトの名無しさん
2020/01/19(日) 04:12:57.56ID:E4qdczJe import Data.List (inits)
948デフォルトの名無しさん
2020/01/19(日) 08:14:33.78ID:to1IOlmG Data.List.scanl1 (+) [5, 4, 8, 7] == [5, 9, 17, 24]
949デフォルトの名無しさん
2020/01/19(日) 09:55:55.71ID:JUDuINU+ やるじゃん
950デフォルトの名無しさん
2020/01/19(日) 10:18:10.08ID:6mEdluRX >>947-948
おお、そんなのがあるのか。、
おお、そんなのがあるのか。、
951デフォルトの名無しさん
2020/01/19(日) 18:10:44.86ID:7oa0iQg0 944です。返信が遅れてしまってすみません。
>>945.947-948 さん早速の返答ありがとうございました。
>>945.947-948 さん早速の返答ありがとうございました。
952デフォルトの名無しさん
2020/01/19(日) 22:57:51.59ID:JsYzYAKP 4.7. GHCi commands
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#ghci-commands
Prelude>:?
Prelude>:browse Data.List
scanl :: (b -> a -> b) -> b -> [a] -> [b]
GHC.List.scanl' :: (b -> a -> b) -> b -> [a] -> [b]
scanl1 :: (a -> a -> a) -> [a] -> [a]
scanr :: (a -> b -> b) -> b -> [a] -> [b]
scanr1 :: (a -> a -> a) -> [a] -> [a]
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#ghci-commands
Prelude>:?
Prelude>:browse Data.List
scanl :: (b -> a -> b) -> b -> [a] -> [b]
GHC.List.scanl' :: (b -> a -> b) -> b -> [a] -> [b]
scanl1 :: (a -> a -> a) -> [a] -> [a]
scanr :: (a -> b -> b) -> b -> [a] -> [b]
scanr1 :: (a -> a -> a) -> [a] -> [a]
953デフォルトの名無しさん
2020/01/20(月) 00:41:52.39ID:TXkt06UM Haskellの事を知れば知る程(圏論含む)、数学ってプログラミング言語だなと思う。
コンピュータが登場する遥か以前からあるプログラミング言語。
そうなると数学者はある種のプログラマーと言える。
ただ、数学はコンピュータに計算させるのではなく、自分で計算するから再帰みたいなループ構造は面倒臭い。
そこでループ構造を排除するアルゴリズム(法則や公式)を考え出して来たと考えられる節があって…。
そう考えると、コンピュータの登場で人間の効率的なアルゴリズムを考える能力が退化したかも知れん。
とか、考えてみたり。
コンピュータが登場する遥か以前からあるプログラミング言語。
そうなると数学者はある種のプログラマーと言える。
ただ、数学はコンピュータに計算させるのではなく、自分で計算するから再帰みたいなループ構造は面倒臭い。
そこでループ構造を排除するアルゴリズム(法則や公式)を考え出して来たと考えられる節があって…。
そう考えると、コンピュータの登場で人間の効率的なアルゴリズムを考える能力が退化したかも知れん。
とか、考えてみたり。
954デフォルトの名無しさん
2020/01/20(月) 13:04:34.99ID:0GX6odYx ΣとかΠは実質ループだが数学ではループしないで計算出来る
955デフォルトの名無しさん
2020/01/20(月) 18:51:38.56ID:9eVX0YAp 無理数や積分はほとんど計算してない
C++のtemplate実体化してないメタプログラミングと同じ
C++のtemplate実体化してないメタプログラミングと同じ
956デフォルトの名無しさん
2020/01/20(月) 19:20:02.11ID:h2nRkU1r カリーハワード対応しらんのか?
957デフォルトの名無しさん
2020/01/20(月) 19:35:03.18ID:LcZgWv4y 普段のプログラミングでカリーハワード対応が出てくる場面ってどういうとき?
型レベルで凝ったことをするとプログラムを証明として書くことがあると思うんだけど、
その証明として書いたプログラムは実行するとどうなるの?
この辺少し勉強したいんだが書いたことも見たこともなくてさっぱり想像つかない
型レベルで凝ったことをするとプログラムを証明として書くことがあると思うんだけど、
その証明として書いたプログラムは実行するとどうなるの?
この辺少し勉強したいんだが書いたことも見たこともなくてさっぱり想像つかない
958デフォルトの名無しさん
2020/01/20(月) 20:28:12.96ID:9eVX0YAp C++のデザインパターンとHaskellの代数的データ型の同型対応
959デフォルトの名無しさん
2020/01/21(火) 08:51:19.90ID:lxIBo8y+ 数式の末尾再帰なfib関数を見た時、手続き型言語で書く副作用バリバリのfib関数との共通点が見えた。
(過去どこかに本の中身の画像落としたんだが、まだあるかは知らん)
そこで一つの仮説が浮かんだ。
入出力を伴わない関数であれば、副作用のある関数でも正しく動く関数は数式と相互に変換出来るのでは?
(入出力も含めるなら、相互にHaskellと変換出来る?逆に、バグがあるなら相互変換は無理?)
数学専門じゃないから、証明とか出来ないけども。
(過去どこかに本の中身の画像落としたんだが、まだあるかは知らん)
そこで一つの仮説が浮かんだ。
入出力を伴わない関数であれば、副作用のある関数でも正しく動く関数は数式と相互に変換出来るのでは?
(入出力も含めるなら、相互にHaskellと変換出来る?逆に、バグがあるなら相互変換は無理?)
数学専門じゃないから、証明とか出来ないけども。
960デフォルトの名無しさん
2020/01/21(火) 09:00:45.96ID:Hkcle0K4 人に伝える努力をして欲しい
ポエムいらない
ポエムいらない
961デフォルトの名無しさん
2020/01/21(火) 11:28:06.62ID:d/fzPC0C 何か知りたいことがあるのか?
需要がないところを努力するのは意味不明だし、努力して欲しいと言うのも意味不明
需要がないところを努力するのは意味不明だし、努力して欲しいと言うのも意味不明
962デフォルトの名無しさん
2020/01/21(火) 11:52:36.21ID:m86EWX9f 数学だけだなく国語力もないのな
努力といわれてバカにされてることに気付かない
努力といわれてバカにされてることに気付かない
963デフォルトの名無しさん
2020/01/21(火) 13:47:51.38ID:L/RpGA77 ST で検索
964デフォルトの名無しさん
2020/01/21(火) 17:55:02.99ID:sFJRAv+Q 表示的意味論の話かな
965デフォルトの名無しさん
2020/02/04(火) 12:34:05.49ID:Np8xXmTj 数学、糞苦手な俺
プログラムで表現出来る数学分野ってごく一部だと思ってたけどそうでもないんか?
概念操作のプロセスと計算とじゃ大きな開きがあると思うんだが
それを鬼計算量で埋められるんかね
プログラムで表現出来る数学分野ってごく一部だと思ってたけどそうでもないんか?
概念操作のプロセスと計算とじゃ大きな開きがあると思うんだが
それを鬼計算量で埋められるんかね
966デフォルトの名無しさん
2020/02/04(火) 13:19:01.06ID:jKHkWlP0 オペレーションズリサーチって言った分野は数学必須だろうね
ベイズ統計とか当たり前のように使われているし
カルマンフィルタもそう
確率統計/多変量解析はコンピュータやる人間ならそれなりに必須だと思うし
現実世界に役立っている
ここでよく題材として挙がるのは圏論だけど これは俺も必要性はあんま感じない
ベイズ統計とか当たり前のように使われているし
カルマンフィルタもそう
確率統計/多変量解析はコンピュータやる人間ならそれなりに必須だと思うし
現実世界に役立っている
ここでよく題材として挙がるのは圏論だけど これは俺も必要性はあんま感じない
967デフォルトの名無しさん
2020/02/04(火) 18:06:11.81ID:6o+cJy8H >>959
手続き型言語でのwhileなどの繰り返しの一回に対し、そこで用いられている変数の値の変化を、末尾再帰関数の引数の変化に置き換えれば、きれいな1重whileは、きれいな末尾再帰関数に置き換わると主張しているんだよね。
手続き型言語でのwhileなどの繰り返しの一回に対し、そこで用いられている変数の値の変化を、末尾再帰関数の引数の変化に置き換えれば、きれいな1重whileは、きれいな末尾再帰関数に置き換わると主張しているんだよね。
968デフォルトの名無しさん
2020/02/04(火) 20:02:08.12ID:+caUnTFf フリーハンドで描いた線と定規で描いた線を比較するようなもの
実質的な意味は同じ
強いて言うならマナーの良さが違うだけ
実質的な意味は同じ
強いて言うならマナーの良さが違うだけ
969デフォルトの名無しさん
2020/02/04(火) 22:57:24.24ID:LyYVEub6 静的単一代入形式に変換して、
φ関数の出てくるところを別関数の呼び出しに変換すれば、
副作用のない状態には持ち込めるかな
φ関数の出てくるところを別関数の呼び出しに変換すれば、
副作用のない状態には持ち込めるかな
970デフォルトの名無しさん
2020/02/05(水) 18:14:57.84ID:fFjiekZv >>966
> ここでよく題材として挙がるのは圏論だけど これは俺も必要性はあんま感じない
プログラムを書く立場ならば圏論なんて知る必要は全くないよ
そもそも仮に圏論を知らないと良いプログラムが書けないプログラミング言語があったとしたら
そんなプログラミング言語は使い物にならない
Haskellerなど一部のプログラマの間での昨今の圏論ブームは少なくとも私には単なる一種のファッションの流行にしか見えないし余り意義を認めない
他人の趣味にケチをつける気はないので、やりたければどうぞ御自由に、としか言いようがない
圏論を知る必要があるとすればプログラムを書く人間ではなくて新しいプログラミング言語の設計をする人間(の一部)だ
ただ一つだけ圏論の勉強を擁護しておくと、規模の大きなソフトウェアをメンテナンスしやすい見通しのよい構造を持つように設計する上では
抽象化と一般化という思考能力、ある事柄や概念と他のどの事柄とが対応するのかを適切に理解し判断する能力は非常に重要だ
そして数学において圏論の最も重要な効用は正にそういう一般化や抽象化といった思考法を書き表すための言葉としてだ
数学である分野での成果(例えば幾つかの定理や定義)を全く別の分野へと転用するといった数学の発展させ方が可能になったのは
正に20世紀中盤に圏論という言葉が生まれたからこそのお蔭だ
だからプログラマが圏論そのものを勉強する必要性は乏しいと思うが、圏論を勉強して理解できる能力と大規模のソフトウェアを良い構造で設計できる能力とは
間違いなく共通した部分があり、正の相関があるのは確実だと個人的には考えている
そういう意味では圏論の勉強は大規模ソフトウェアの設計に向く設計者か否かのフィルタリングに使えるかも知れないね
> ここでよく題材として挙がるのは圏論だけど これは俺も必要性はあんま感じない
プログラムを書く立場ならば圏論なんて知る必要は全くないよ
そもそも仮に圏論を知らないと良いプログラムが書けないプログラミング言語があったとしたら
そんなプログラミング言語は使い物にならない
Haskellerなど一部のプログラマの間での昨今の圏論ブームは少なくとも私には単なる一種のファッションの流行にしか見えないし余り意義を認めない
他人の趣味にケチをつける気はないので、やりたければどうぞ御自由に、としか言いようがない
圏論を知る必要があるとすればプログラムを書く人間ではなくて新しいプログラミング言語の設計をする人間(の一部)だ
ただ一つだけ圏論の勉強を擁護しておくと、規模の大きなソフトウェアをメンテナンスしやすい見通しのよい構造を持つように設計する上では
抽象化と一般化という思考能力、ある事柄や概念と他のどの事柄とが対応するのかを適切に理解し判断する能力は非常に重要だ
そして数学において圏論の最も重要な効用は正にそういう一般化や抽象化といった思考法を書き表すための言葉としてだ
数学である分野での成果(例えば幾つかの定理や定義)を全く別の分野へと転用するといった数学の発展させ方が可能になったのは
正に20世紀中盤に圏論という言葉が生まれたからこそのお蔭だ
だからプログラマが圏論そのものを勉強する必要性は乏しいと思うが、圏論を勉強して理解できる能力と大規模のソフトウェアを良い構造で設計できる能力とは
間違いなく共通した部分があり、正の相関があるのは確実だと個人的には考えている
そういう意味では圏論の勉強は大規模ソフトウェアの設計に向く設計者か否かのフィルタリングに使えるかも知れないね
971デフォルトの名無しさん
2020/02/05(水) 18:19:38.12ID:hXjs1EZI >>970
>そもそも仮に圏論を知らないと良いプログラムが書けないプログラミング言語があったとしたら
CPL(Categorical Programming Language)
まずは Wikipedia を参照汁
>そもそも仮に圏論を知らないと良いプログラムが書けないプログラミング言語があったとしたら
CPL(Categorical Programming Language)
まずは Wikipedia を参照汁
972デフォルトの名無しさん
2020/02/05(水) 19:04:41.25ID:2rKdW1Ec 圏論って知らずに使ってるんやろ
それでええやん
それでええやん
974デフォルトの名無しさん
2020/02/05(水) 21:17:36.43ID:2r8PGoiv アジア文化圏
975デフォルトの名無しさん
2020/02/05(水) 21:42:26.50ID:/Jhw33Vx 一つ言えるのは圏論ってなんか語りたくなっちゃうものなんだということ。
プログラムにおいては全く意味はない。
計算機の動きを抽象化する道具としてそんな筋のいいものではない。
数論でも勉強するなら意味はあるだろうが。
プログラムにおいては全く意味はない。
計算機の動きを抽象化する道具としてそんな筋のいいものではない。
数論でも勉強するなら意味はあるだろうが。
976デフォルトの名無しさん
2020/02/05(水) 23:38:47.13ID:m+XqauaX 圏論はどちらかといえばポイントフリー
λとか∀とか∃とかパターンマッチとかで変数を束縛する言語
に違和感があれば圏論を語りたくなる
λとか∀とか∃とかパターンマッチとかで変数を束縛する言語
に違和感があれば圏論を語りたくなる
977デフォルトの名無しさん
2020/02/06(木) 01:01:03.47ID:OGs/tKtL >>970
大規模ソフトウェアのメンテにおいて、
圏論を知らないとこのように失敗するが、
知っているとこのように成功する、
という具体例を挙げられますか?
または、具体例を挙げて説明している本やブログ、
カンファレンスなどを紹介できますか?
大規模ソフトウェアのメンテにおいて、
圏論を知らないとこのように失敗するが、
知っているとこのように成功する、
という具体例を挙げられますか?
または、具体例を挙げて説明している本やブログ、
カンファレンスなどを紹介できますか?
978デフォルトの名無しさん
2020/02/06(木) 04:11:03.04ID:7nZd7Xb0 >>977
圏論は、いわゆる「銀の弾丸」ではない
圏論は、いわゆる「銀の弾丸」ではない
979デフォルトの名無しさん
2020/02/06(木) 07:32:25.39ID:OGs/tKtL980デフォルトの名無しさん
2020/02/06(木) 08:35:23.71ID:7WdfZf7H お前が圏論理解してかつ大規模ソフトウェア開発で失敗したら反証になるじゃん
がんばれ
がんばれ
981デフォルトの名無しさん
2020/02/06(木) 11:02:50.38ID:OGs/tKtL982デフォルトの名無しさん
2020/02/06(木) 11:23:47.14ID:gLliKWEs 圏論だのモナドだの相変わらずだなあ
もっと楽しい話をしようぜ
コモナドとかProfunctor Opticsとかサ
もっと楽しい話をしようぜ
コモナドとかProfunctor Opticsとかサ
983デフォルトの名無しさん
2020/02/06(木) 11:47:37.47ID:sigCaOr9 横からだが
個人的に考えてる、と断ってるじゃん
単なる個人の感想
お前はそこに証拠を求めてる
何がしたいの?
個人的に考えてる、と断ってるじゃん
単なる個人の感想
お前はそこに証拠を求めてる
何がしたいの?
984デフォルトの名無しさん
2020/02/06(木) 12:12:18.67ID:OGs/tKtL985デフォルトの名無しさん
2020/02/06(木) 13:45:00.26ID:sNihMBVC986デフォルトの名無しさん
2020/02/06(木) 22:21:29.85ID:AbsWoeSu >>971
そりゃ学位論文レベルの言語ならあるさ
そもそもそのCPLとCSL(Categorical Specification Language)とを定義した萩野達也氏のエジンバラ大学に提出した件の学位論文は私も読んだ
そして理論的には大変に興味深い研究だと思ったよ
だが私が前の投稿で書いた「使い物にならない」の定義、つまり肯定形の「使い物になる」はソフトウェア工学的な意味で実用になるという意味だ
つまりは「多数のプログラマによって実用プロジェクトで使える言語」という意味だ、より具体的な基準が必要だと言うのならば
「最低でも100万行のソフトウェア開発をそのプログラミング言語で行える」という意味だ
君が私の主張である「使い物にならない」を否定したければ、100万行とは言わぬまでもせめて10万行のソフトウェアを
複数人で開発するのにCPLだけでやってみてくれ、もちろん必要なCPLのライブラリ類は自分達で開発してね
そりゃ学位論文レベルの言語ならあるさ
そもそもそのCPLとCSL(Categorical Specification Language)とを定義した萩野達也氏のエジンバラ大学に提出した件の学位論文は私も読んだ
そして理論的には大変に興味深い研究だと思ったよ
だが私が前の投稿で書いた「使い物にならない」の定義、つまり肯定形の「使い物になる」はソフトウェア工学的な意味で実用になるという意味だ
つまりは「多数のプログラマによって実用プロジェクトで使える言語」という意味だ、より具体的な基準が必要だと言うのならば
「最低でも100万行のソフトウェア開発をそのプログラミング言語で行える」という意味だ
君が私の主張である「使い物にならない」を否定したければ、100万行とは言わぬまでもせめて10万行のソフトウェアを
複数人で開発するのにCPLだけでやってみてくれ、もちろん必要なCPLのライブラリ類は自分達で開発してね
987デフォルトの名無しさん
2020/02/06(木) 22:27:12.19ID:sUAmWprm 簡単な判別法がある
デバイスドライバーが書けない言語は使い物にならない
デバイスドライバーが書けない言語は使い物にならない
988デフォルトの名無しさん
2020/02/06(木) 22:27:40.06ID:AbsWoeSu >>977
だから能力として近いと言っているだけだよ
圏論という理論を勉強して理解できる能力と、大規模ソフトウェアを良い構造で設計する能力とはね
私がそう考えている理由は、どちらも抽象化や一般化といった思考の能力が重要だからだ
圏論を知らなければ良い設計が出来ないと言っている訳では決してない
970の最後の3行(空行はカウントしない)の意味するところは
勉強すれば圏論を理解できるようになる人は(抽象化や一般化の思考能力が高いので圏論を勉強していなくても)良い設計ができるだろう、という予想だ
だから能力として近いと言っているだけだよ
圏論という理論を勉強して理解できる能力と、大規模ソフトウェアを良い構造で設計する能力とはね
私がそう考えている理由は、どちらも抽象化や一般化といった思考の能力が重要だからだ
圏論を知らなければ良い設計が出来ないと言っている訳では決してない
970の最後の3行(空行はカウントしない)の意味するところは
勉強すれば圏論を理解できるようになる人は(抽象化や一般化の思考能力が高いので圏論を勉強していなくても)良い設計ができるだろう、という予想だ
989デフォルトの名無しさん
2020/02/06(木) 23:07:57.45ID:AbsWoeSu >>987
> デバイスドライバーが書けない言語は使い物にならない
それは又一つ別の定義だね
私個人としてはアプリケーションしか書けないプログラミング言語でも「使い物になる」ことを認めるけれども
そういう定義をするソフトウェア技術者の立場はそれとして否定する気はない
> デバイスドライバーが書けない言語は使い物にならない
それは又一つ別の定義だね
私個人としてはアプリケーションしか書けないプログラミング言語でも「使い物になる」ことを認めるけれども
そういう定義をするソフトウェア技術者の立場はそれとして否定する気はない
990デフォルトの名無しさん
2020/02/06(木) 23:44:41.47ID:r1DVX1M4 人間の社会の役に立つ勢力の定義が存在するのか?
まずは存在を疑うのが無駄な努力をしない秘訣
まずは存在を疑うのが無駄な努力をしない秘訣
991デフォルトの名無しさん
2020/02/07(金) 00:02:21.67ID:sQmwkFjl 圏論が実用言語に向いてないのと同様に、989は5chに向いてない
992デフォルトの名無しさん
2020/02/07(金) 00:15:35.18ID:MJwijXd8 そんなことないでしょ
993デフォルトの名無しさん
2020/02/07(金) 01:41:24.07ID:Fnc0TnWe オオオオチンポ
994デフォルトの名無しさん
2020/02/07(金) 08:09:04.68ID:ruz5n033 javascriptでデバイスドライバは書けないわな
圏論とやらが必要な分野で使えばいいだけの話
圏論とやらが必要な分野で使えばいいだけの話
995デフォルトの名無しさん
2020/02/07(金) 12:13:54.81ID:PWhN+bN7996デフォルトの名無しさん
2020/02/07(金) 13:01:46.27ID:3L88mYwi まだ定義してないのにフライングできる奴は
定義が存在しないパターンを知ってるからそれができる
定義が存在しないパターンを知ってるからそれができる
997デフォルトの名無しさん
2020/02/08(土) 16:14:00.43ID:pTX+YoHa HListのインサートとかソートとかのやり方の実装が乗ってるホームページ教えて
作ろうとしても難しくてできないから
作ろうとしても難しくてできないから
998デフォルトの名無しさん
2020/02/10(月) 18:21:44.17ID:gQeDR86I999デフォルトの名無しさん
2020/02/10(月) 19:36:01.30ID:gQeDR86I >>997
HList パッケージのソースをみるしかないかも
https://hackage.haskell.org/package/HList-0.5.0.0/docs/src/Data-HList-HSort.html
HList パッケージのソースをみるしかないかも
https://hackage.haskell.org/package/HList-0.5.0.0/docs/src/Data-HList-HSort.html
1000デフォルトの名無しさん
2020/02/10(月) 20:28:59.42ID:Q/biUbUo >>999
あざーす
あざーす
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 377日 11時間 23分 12秒
新しいスレッドを立ててください。
life time: 377日 11時間 23分 12秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
