関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part33
https://mevius.5ch.net/test/read.cgi/tech/1581326256/
探検
関数型プログラミング言語Haskell Part34
1デフォルトの名無しさん
2021/12/17(金) 12:57:26.37ID:NPioGyUL2デフォルトの名無しさん
2021/12/17(金) 12:57:57.45ID:NPioGyUL3デフォルトの名無しさん
2021/12/17(金) 12:58:25.90ID:NPioGyUL 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
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
4デフォルトの名無しさん
2021/12/17(金) 12:58:57.67ID:NPioGyUL 関連サイト
(英語)
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
A Gentle Introduction to Haskell, Version 98
http://www.sampou.org/haskell/tutorial-j/
Haskell のお勉強
http://www.shido.info/hs/
お気楽 Haskell プログラミング入門
http://www.nct9.ne.jp/m_hiroi/func/haskell39.html
本物のプログラマはHaskellを使う
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
A Gentle Introduction to Haskell, Version 98
http://www.sampou.org/haskell/tutorial-j/
Haskell のお勉強
http://www.shido.info/hs/
お気楽 Haskell プログラミング入門
http://www.nct9.ne.jp/m_hiroi/func/haskell39.html
本物のプログラマはHaskellを使う
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/
[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog
51
2021/12/19(日) 03:10:48.56ID:7grgB8Yx あの伝説の岡部健が復活!!
https://twitter.com/ken74047924
(おまけ情報)
Quoraでも有名だった岡部健、2021年12月にTwitterのアカウントまたまた永久凍結される。
当時のアーカイブは多少ネットに残ってるらしい
https://twitter.com/KenSmooth5
https://i.imgur.com/Ws4RM1o.png
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/ken74047924
(おまけ情報)
Quoraでも有名だった岡部健、2021年12月にTwitterのアカウントまたまた永久凍結される。
当時のアーカイブは多少ネットに残ってるらしい
https://twitter.com/KenSmooth5
https://i.imgur.com/Ws4RM1o.png
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/5chan_nel (5ch newer account)
6デフォルトの名無しさん
2021/12/20(月) 09:52:21.45ID:ZumN5JOf7デフォルトの名無しさん
2021/12/20(月) 12:58:58.75ID:oUGNvHUz >>6
また実名っぽいの出して荒らしてんのかあいつ
また実名っぽいの出して荒らしてんのかあいつ
8デフォルトの名無しさん
2021/12/20(月) 20:14:33.16ID:ceMzU2Ib 自分で召還しといて荒らしとかいうのやめようや。
2021/12/20(月) 20:19:16.57ID:NqO2QdlG
Haskellの話じゃないんだからどこか他でやってくれ
10デフォルトの名無しさん
2021/12/20(月) 20:33:12.76ID:ceMzU2Ib Excel VBAのスレでやるのか?
2021/12/20(月) 21:06:24.55ID:NqO2QdlG
毛の壁から国民を守る党 72議席目
https://lavender.5ch.net/test/read.cgi/net/1615613906/
https://lavender.5ch.net/test/read.cgi/net/1615613906/
12デフォルトの名無しさん
2021/12/20(月) 23:17:06.32ID:ceMzU2Ib 72スレ目って。
自分では気が狂ってることがわからないんだろな。
国民を守らなければ!って使命感があふれ出して72スレ。
自分では気が狂ってることがわからないんだろな。
国民を守らなければ!って使命感があふれ出して72スレ。
2021/12/21(火) 00:08:10.53ID:S6JYHyb7
ご本人?
2021/12/21(火) 06:55:32.78ID:t7n7AMl6
a :: Int -> Int
a 0 = 50^2
a n = round (sqrt (realToFrac n):: Float)
型変換なみだでてきた
ghciプロンプトだと
round (sqrt 50)
7
ちゃんと出るじゃねーか...
a 0 = 50^2
a n = round (sqrt (realToFrac n):: Float)
型変換なみだでてきた
ghciプロンプトだと
round (sqrt 50)
7
ちゃんと出るじゃねーか...
15デフォルトの名無しさん
2021/12/21(火) 10:17:23.12ID:WtPb4PP+ >>6
酷すぎる
酷すぎる
2021/12/21(火) 11:09:52.33ID:+QFtbkZ1
>>14
ghci 上で :t round . sqrt として
a :: Int -> Int との違いを比べてみるとよいよ (あとリテラルの50はIntではない)
数(特に浮動小数点数)まわりの関数でなみだ出てくるのは多少同意
ghci 上で :t round . sqrt として
a :: Int -> Int との違いを比べてみるとよいよ (あとリテラルの50はIntではない)
数(特に浮動小数点数)まわりの関数でなみだ出てくるのは多少同意
17デフォルトの名無しさん
2021/12/21(火) 15:10:59.44ID:XC3saJz0 >>6
こ、これはもしや・・・・あの!?
こ、これはもしや・・・・あの!?
18デフォルトの名無しさん
2021/12/23(木) 17:28:45.18ID:iaSGtOUq ken80297274
岡部さんのサブアカウント発見
岡部さんのサブアカウント発見
19デフォルトの名無しさん
2021/12/23(木) 20:30:31.33ID:hyDq6lCn どんな人生を生きたら実名でこんな攻撃的な調子でtwitter上で不特定多数に絡みに行こうと思えるんだ
実際実社会で会ったらどんな感じの人なんだろう
実際実社会で会ったらどんな感じの人なんだろう
20デフォルトの名無しさん
2021/12/23(木) 21:25:57.12ID:cmpFYqPS 岡部健さんはアメリカのUCLA卒業と書いていたらしいので、情報技術の素養はあるんじゃないか?
https://twitter.com/ohagiya/status/226163166067949568
http://archive.ph/1oA1C
>>「まああれでUCLAとかよく嘘こけるよねー。 」
>とは、これも、僕が学歴詐称しているという野田憲太郎の妄想にはじまる
>「バッシングに用いる好物のネタ」であり、もちろんそのような学歴詐称の事実などないし、それも名誉毀損として刑事告訴の要件に入っている。
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/ohagiya/status/226163166067949568
http://archive.ph/1oA1C
>>「まああれでUCLAとかよく嘘こけるよねー。 」
>とは、これも、僕が学歴詐称しているという野田憲太郎の妄想にはじまる
>「バッシングに用いる好物のネタ」であり、もちろんそのような学歴詐称の事実などないし、それも名誉毀損として刑事告訴の要件に入っている。
https://twitter.com/5chan_nel (5ch newer account)
21デフォルトの名無しさん
2021/12/23(木) 21:27:02.59ID:cmpFYqPS Twitterで
ohagiya UCLA
で検索すると岡部健さんの学歴にけちを付けてる人が出てくるね
ohagiya UCLA
で検索すると岡部健さんの学歴にけちを付けてる人が出てくるね
22デフォルトの名無しさん
2021/12/23(木) 23:57:52.67ID:MjSWMWRR ハリウッド映画でよくある、酒場でのウィットに富んだ大人の会話の一種では?
0時を過ぎると、酒瓶を割って拳で語り合う・・・いまその状態では?
夜が明けると、互いを理解し絆が深まる。
そして生涯の友となるのでは?
0時を過ぎると、酒瓶を割って拳で語り合う・・・いまその状態では?
夜が明けると、互いを理解し絆が深まる。
そして生涯の友となるのでは?
23デフォルトの名無しさん
2021/12/27(月) 09:38:29.17ID:hZ17KgJk https://ken-okabe
.hatenablog
.com/entry/2021/12/20/134121
『結局は、あろうことか、当時のQiita運営がこういう匿名炎上目的のアカウントの思惑に乗っかる形で、僕の反論コメントを消してしまったので』
と書いてるので、当時nonstarterさんの記事のコメント欄に出没していたのは岡部健本人だったのかな。
ことあるごとに「岡部氏」って別人のように書いてたのにね
.hatenablog
.com/entry/2021/12/20/134121
『結局は、あろうことか、当時のQiita運営がこういう匿名炎上目的のアカウントの思惑に乗っかる形で、僕の反論コメントを消してしまったので』
と書いてるので、当時nonstarterさんの記事のコメント欄に出没していたのは岡部健本人だったのかな。
ことあるごとに「岡部氏」って別人のように書いてたのにね
24デフォルトの名無しさん
2021/12/28(火) 01:15:18.08ID:e4meyx5L 高度IT人材、富士通は最大年収3500万円へ
「富士通年収3500万!」日本のIT企業の年収も、高額化してきました
AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ
【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材
来年度から副業解禁 人材多様化へ―大同生命次期社長
副業・兼務の解禁から4年、ロート製薬流で進めるキャリア支援
ロート製薬が副業をいち早く導入した「超人間的」な理由
ロート製薬会長が「副業を受け入れない会社は発展しない」と断言する理由
「富士通年収3500万!」日本のIT企業の年収も、高額化してきました
AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へ
【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材
来年度から副業解禁 人材多様化へ―大同生命次期社長
副業・兼務の解禁から4年、ロート製薬流で進めるキャリア支援
ロート製薬が副業をいち早く導入した「超人間的」な理由
ロート製薬会長が「副業を受け入れない会社は発展しない」と断言する理由
25デフォルトの名無しさん
2021/12/28(火) 08:27:45.42ID:FaceSKSV2021/12/31(金) 02:20:27.03ID:aP8qPSMg
シンプルなワードカウント書いたけど関数合成でワードカウントが組めません
" ab ccc dd "を[0,1,1,0,1,1,1,0,1,1,0]みたいなリストに変換して
ワードの数は3みたいな
以下普通に書いたワードカウント
spwc4 :: [Char] -> Int
spwc4 s = wc4 s 0 0
where
wc4 :: [Char] -> Int -> Int -> Int
wc4 [] l c = (c + (if l == 0 then 0 else 1))
wc4 (x:xs) l c
| x == ' ' || x == '\t' || x == '\n' || x == '\r' = if l == 0 then wc4 xs 0 c else wc4 xs 0 (c+1)
| otherwise = wc4 xs (l+1) c
文字列を
chkspand :: Char -> Int
chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1
に与えて[0,1,1,0,0,1]みたいなリストに変換
これを関数合成でカウントすると内部状態を保持する必要で困惑中
wordcount . map chkspand $ " asas df df"
みたいな書き方がしたい
" ab ccc dd "を[0,1,1,0,1,1,1,0,1,1,0]みたいなリストに変換して
ワードの数は3みたいな
以下普通に書いたワードカウント
spwc4 :: [Char] -> Int
spwc4 s = wc4 s 0 0
where
wc4 :: [Char] -> Int -> Int -> Int
wc4 [] l c = (c + (if l == 0 then 0 else 1))
wc4 (x:xs) l c
| x == ' ' || x == '\t' || x == '\n' || x == '\r' = if l == 0 then wc4 xs 0 c else wc4 xs 0 (c+1)
| otherwise = wc4 xs (l+1) c
文字列を
chkspand :: Char -> Int
chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1
に与えて[0,1,1,0,0,1]みたいなリストに変換
これを関数合成でカウントすると内部状態を保持する必要で困惑中
wordcount . map chkspand $ " asas df df"
みたいな書き方がしたい
2021/12/31(金) 03:53:55.07ID:aP8qPSMg
自己解決したけどデータが多いとスタックが...
>countword . countchars . map chkspand $ " 1313 13 111 rfr fdf"
>5
>countword . countchars . map chkspand $ " 1313 13 111 rfr fdf"
>5
2021/12/31(金) 14:45:34.52ID:KqmzC1Ir
リストみたいなただのデータコンストラクタだったら、いくら長くてもスタック関係ないのに
リストをfoldrしたような物が出てくるとスタックでみんな躓く
リストをfoldrしたような物が出てくるとスタックでみんな躓く
29デフォルトの名無しさん
2021/12/31(金) 14:58:51.96ID:bqUePCKa スクラッチで書くなら(0:)で0を追加して(0:1:_)をカウントしていくんだろうな
chkspand :: Char -> Int
chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1
wordcount = let
iterator [ ] = 0
iterator ( 0: 1: xs ) = 1 + ( iterator xs )
iterator ( x : xs ) = iterator xs
in iterator . ( 0 : )
main = do
print $ map chkspand $ " asas df df"
print $ wordcount . map chkspand $ " asas df df"
chkspand :: Char -> Int
chkspand c = if c == ' ' || c == '\t' || c == '\n' || c == '\r' then 0 else 1
wordcount = let
iterator [ ] = 0
iterator ( 0: 1: xs ) = 1 + ( iterator xs )
iterator ( x : xs ) = iterator xs
in iterator . ( 0 : )
main = do
print $ map chkspand $ " asas df df"
print $ wordcount . map chkspand $ " asas df df"
2021/12/31(金) 16:30:35.01ID:aP8qPSMg
>>29
wc5 = let
iterator [] = 0
iterator (0:1:xs) = 1 + (iterator xs)
iterator (x:xs) = iterator xs
in iterator . ((0::Int) :)
wc5 . map chkspand $ "0 hushjuh hhuj 89 546456"
5
上手く行きました
イテレータのパターンマッチ目からウロコ
wc5 = let
iterator [] = 0
iterator (0:1:xs) = 1 + (iterator xs)
iterator (x:xs) = iterator xs
in iterator . ((0::Int) :)
wc5 . map chkspand $ "0 hushjuh hhuj 89 546456"
5
上手く行きました
イテレータのパターンマッチ目からウロコ
2021/12/31(金) 20:42:25.11ID:aP8qPSMg
32デフォルトの名無しさん
2021/12/31(金) 20:58:03.01ID:bqUePCKa >>31
それは処理系のimplement依存だから一概には言えないけど多分stack上に(1+)関数が乗っていって最後に確定した0が入ってから計算しそうな気がする
それは処理系のimplement依存だから一概には言えないけど多分stack上に(1+)関数が乗っていって最後に確定した0が入ってから計算しそうな気がする
2021/12/31(金) 21:10:21.51ID:aP8qPSMg
>>32
了解しました
了解しました
2022/01/02(日) 20:44:02.99ID:OOMiLRw0
>>30ちょと改変
wc6 = let
iter n [] = z
iter n (False:True:xs) = let n' = n + 1 in seq n' $ iter n' xs
iter n (x:xs) = iter n xs
in (iter 0) . (False :)
wcc = wc6 . map chkspand2
これのseq n'が効けば+1+1+1+1が積みあがらないはず
wc6 = let
iter n [] = z
iter n (False:True:xs) = let n' = n + 1 in seq n' $ iter n' xs
iter n (x:xs) = iter n xs
in (iter 0) . (False :)
wcc = wc6 . map chkspand2
これのseq n'が効けば+1+1+1+1が積みあがらないはず
2022/01/02(日) 21:09:40.82ID:OOMiLRw0
2022/01/03(月) 00:17:58.15ID:eS7vipFo
OOPでも、整数を他のオブジェクトとは全然違う形式にしないと
計算が遅過ぎてダサくなるよね
逆にオブジェクトの方を整数と同じようなGC非依存みたいな構造にする手もあるか
計算が遅過ぎてダサくなるよね
逆にオブジェクトの方を整数と同じようなGC非依存みたいな構造にする手もあるか
37デフォルトの名無しさん
2022/01/03(月) 08:08:25.82ID:hLrwvjQQ2022/01/03(月) 11:20:12.64ID:TEX8BSo6
>>37
今回のお題はワードカウント、ファイルサイズがギガになる場合を想定
スタックなりヒープなりを消費しない手法は?です
Cなどで実装した場合、ループでカウントして再帰なしスタックもヒープも消費なしとか(可読性は...)
他にマルチスレッドで分割カウントした時の手法とか(ディスクのIOで律速か)
今回のお題はワードカウント、ファイルサイズがギガになる場合を想定
スタックなりヒープなりを消費しない手法は?です
Cなどで実装した場合、ループでカウントして再帰なしスタックもヒープも消費なしとか(可読性は...)
他にマルチスレッドで分割カウントした時の手法とか(ディスクのIOで律速か)
39デフォルトの名無しさん
2022/01/03(月) 12:59:34.38ID:hLrwvjQQ 今回の場合1ワード消費するたびにスタック一個消費するから必要なメモリリソースが倍以上になる可能性もあるから意味はあるかな
特にコレは>>34の方法だと必要なメモリリソースがデータ保持する分を除けばlogオーダーになるからな
しかも読み込んだデータは順次捨てていけるし(そこまでのカウント結果を保持しないといけないので有限オートマトンでは無理だけど有限オートマトン以上、チューリング完全以下、こういう計算クラスは名前ついてるのかな?)
個人的にはこういうときメモリ線形、時間線形までは許さないと大した事できないことが多いのでそれ以上のこだわりは持たないようにしてる
数学的研究対象とかにするなら別だけど
特にコレは>>34の方法だと必要なメモリリソースがデータ保持する分を除けばlogオーダーになるからな
しかも読み込んだデータは順次捨てていけるし(そこまでのカウント結果を保持しないといけないので有限オートマトンでは無理だけど有限オートマトン以上、チューリング完全以下、こういう計算クラスは名前ついてるのかな?)
個人的にはこういうときメモリ線形、時間線形までは許さないと大した事できないことが多いのでそれ以上のこだわりは持たないようにしてる
数学的研究対象とかにするなら別だけど
2022/01/03(月) 15:29:08.17ID:TEX8BSo6
41デフォルトの名無しさん
2022/01/04(火) 16:11:04.31ID:h755Av8k Haskellを身に付けた人は他の言語も使えると予想しますが、いくつもの言語の中からHaskellを選んで
プログラムを書くのはどんな課題、問題を解決したいときなんでしょうか
プログラムを書くのはどんな課題、問題を解決したいときなんでしょうか
2022/01/04(火) 16:44:18.80ID:HuVGMWib
課題が「ガベージをコレクトしたい」だけだったとしても
じゃあ静的型は不要だとかジェネリクスは不要だとはならない
だから課題と関係ない部分を作り込む
じゃあ静的型は不要だとかジェネリクスは不要だとはならない
だから課題と関係ない部分を作り込む
43デフォルトの名無しさん
2022/01/05(水) 10:28:01.47ID:imDyM2+l Twitterの検索で
@ohagiya @kenokabe
と入れると楽しいよな
@ohagiya @kenokabe
と入れると楽しいよな
44デフォルトの名無しさん
2022/01/11(火) 17:47:50.88ID:rZde0CTm45デフォルトの名無しさん
2022/01/14(金) 10:48:22.13ID:3PF6dXYX 最新の怪文書も読んだけどさ、毛の壁は毎回毎回威勢だけは良いんだよなw
たとえば「ちくわは民事でもやる!」「ちくわはもう詰み」(9年前)
「ちくわはもう死に体」(7年前)とかさ。
死に体なのに、つい最近もブログで恨み節w
ネズミ一匹、始末できないなんてだらしがないな
たとえば「ちくわは民事でもやる!」「ちくわはもう詰み」(9年前)
「ちくわはもう死に体」(7年前)とかさ。
死に体なのに、つい最近もブログで恨み節w
ネズミ一匹、始末できないなんてだらしがないな
46デフォルトの名無しさん
2022/01/15(土) 18:49:30.83ID:chCIM2fB 質問です
array と List の性能の差がいまいちピンと来ません
何か「この例ではどう考えてもarray、ほらこんなに性能に差が出る」って例ご存知ないですか?
array と List の性能の差がいまいちピンと来ません
何か「この例ではどう考えてもarray、ほらこんなに性能に差が出る」って例ご存知ないですか?
47デフォルトの名無しさん
2022/01/16(日) 12:22:44.80ID:f2QwXzzi 質問です
何かの文章で
square x = x*x
print $ square $ square 3
のようなプログラムをHaskell は
square $ square 3
→ square ( square 3 )
→ ( square 3 ) * ( square 3 )
→ ( 3 * 3 ) * ( 3 * 3 )
のようになる
コレを避けるためにseqを使えばよいとあったのですが試しに
import Debug.Trace
square x = x * x
const3 = trace "*" 3
main = do
print
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ const3
みたいなプログラムで試してみました
もし説明通りならconst3が2^15回呼ばれて*がいっぱい出てきそうですが、やってみると*は一個しか出てきません
コレは何故ですか?
ちなみにghcです
ghcがconst3の結果を自分で勝手に“メモ化”してよきにはからってくれているんでしょうか?
何かの文章で
square x = x*x
print $ square $ square 3
のようなプログラムをHaskell は
square $ square 3
→ square ( square 3 )
→ ( square 3 ) * ( square 3 )
→ ( 3 * 3 ) * ( 3 * 3 )
のようになる
コレを避けるためにseqを使えばよいとあったのですが試しに
import Debug.Trace
square x = x * x
const3 = trace "*" 3
main = do
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ square $ square $ square $ square $ square
$ const3
みたいなプログラムで試してみました
もし説明通りならconst3が2^15回呼ばれて*がいっぱい出てきそうですが、やってみると*は一個しか出てきません
コレは何故ですか?
ちなみにghcです
ghcがconst3の結果を自分で勝手に“メモ化”してよきにはからってくれているんでしょうか?
2022/01/16(日) 13:40:56.61ID:rC9oNTrC
メモ化は独自実装ではなく仕様
何かの文章は嘘
でも騙されたことがないので被害が存在しないし、加害者も存在しない
何かの文章は嘘
でも騙されたことがないので被害が存在しないし、加害者も存在しない
49デフォルトの名無しさん
2022/01/16(日) 14:36:08.72ID:f2QwXzzi50デフォルトの名無しさん
2022/01/16(日) 14:39:15.35ID:f2QwXzzi 何かの文章は "ウォークスルー Haskell" というやつでした
http://walk.northcol.org/haskell/eval-strategies/
3 ではなく 1 + 2 でやってました
http://walk.northcol.org/haskell/eval-strategies/
3 ではなく 1 + 2 でやってました
2022/01/16(日) 18:39:45.50ID:ZlAL8rfa
seqだと結果はどうなるんですか?
52デフォルトの名無しさん
2022/01/16(日) 18:54:16.95ID:f2QwXzzi >>51
square x = x * x
を
square x = seq x $ x * x
にして明治的に“xを評価してからx*xを計算せよ”に変えるともちろん*ひとつです
それは納得いきます
ウォークスルーHaskellにもそうなると書いてあるしHaskell Language Report 2010にもseqで正格評価になると書いてあります
なのでコレは納得いくんですがseqなしの場合の動作が文書と異なるように見えます
もちろん参照透過性があるので一度計算した結果をメモ化して再利用しても同じ答えにならないといけないので答え自体は同じになるわけですけど
コレはたまたまGHCの開発者が優秀でHaskellの標準動作としては保証されない事までやってくれてるだけなのか、標準動作としてメモ化しないといけないことになってるのかどっちだろうと
今のところ今自分が勉強してるプログラムにはseq入れて明治的に正格評価してもらってるんですけど標準でメモ化してくれるなら消せるしスッキリするし、あるいは明示しないと他の処理系だとしてくれないなら残しとかないといけないし
square x = x * x
を
square x = seq x $ x * x
にして明治的に“xを評価してからx*xを計算せよ”に変えるともちろん*ひとつです
それは納得いきます
ウォークスルーHaskellにもそうなると書いてあるしHaskell Language Report 2010にもseqで正格評価になると書いてあります
なのでコレは納得いくんですがseqなしの場合の動作が文書と異なるように見えます
もちろん参照透過性があるので一度計算した結果をメモ化して再利用しても同じ答えにならないといけないので答え自体は同じになるわけですけど
コレはたまたまGHCの開発者が優秀でHaskellの標準動作としては保証されない事までやってくれてるだけなのか、標準動作としてメモ化しないといけないことになってるのかどっちだろうと
今のところ今自分が勉強してるプログラムにはseq入れて明治的に正格評価してもらってるんですけど標準でメモ化してくれるなら消せるしスッキリするし、あるいは明示しないと他の処理系だとしてくれないなら残しとかないといけないし
53デフォルトの名無しさん
2022/01/17(月) 04:24:56.47ID:FNscPcIY 銀の弾丸のHaskellをIT企業が採用したら市場を席捲できるのでは???
実際そうなると思う?
実際そうなると思う?
2022/01/17(月) 13:17:04.94ID:3dpBVALW
Windows10にVSCode入れて、Haskellを遊ぼうとしたけど上手く入らない。
コマンドラインで細かく入れて遊ぶしかないかな。
コマンドラインで細かく入れて遊ぶしかないかな。
2022/01/18(火) 00:23:47.53ID:1uCkeDxh
https://www.haskell.org/ghcup/
>GHCup is an installer for the general purpose language Haskell.
>GHCup is an installer for the general purpose language Haskell.
56デフォルトの名無しさん
2022/01/27(木) 08:50:29.18ID:NJ4yaxSd https://qiita.com/lucker_summer/items/baa68e681872de44d5f8
コメント欄ひどすぎだろ
@stken2050(これ岡部健)が非道いので皆さん通報してほしい
コメント欄ひどすぎだろ
@stken2050(これ岡部健)が非道いので皆さん通報してほしい
2022/01/27(木) 10:10:34.06ID:orDFdZXN
58デフォルトの名無しさん
2022/01/27(木) 11:59:44.42ID:oUTYjCet 岡部さんこんにちは
59デフォルトの名無しさん
2022/01/27(木) 12:03:44.88ID:eY59BLQP https://twitter.com/mutamac/status/322296035147935744
引用
「Linuxの元になったMINIXが復権中。期待。」という自称ギークとの話』の魚拓を取りました http://nmuta.dip.jp/~muta/toog237.pdf
https://twitter.com/5chan_nel (5ch newer account)
引用
「Linuxの元になったMINIXが復権中。期待。」という自称ギークとの話』の魚拓を取りました http://nmuta.dip.jp/~muta/toog237.pdf
https://twitter.com/5chan_nel (5ch newer account)
60デフォルトの名無しさん
2022/01/27(木) 23:00:32.74ID:7u9WcLA6 そうじゃなくて、PHPやHaskellごときが偉そうにすんなって事だろ。
質問者が来たらお茶菓子くらい出せ。
底辺やマイナー言語はそうするべき。
質問者が来たらお茶菓子くらい出せ。
底辺やマイナー言語はそうするべき。
2022/01/28(金) 01:07:24.72ID:dNnJMVwD
誰かをディスるよりも、こういう話の方が面白くない?
https://www.reddit.com/r/haskell/comments/s7p29y/letin_vs_function_application_space_leaks/
https://www.reddit.com/r/haskell/comments/s7p29y/letin_vs_function_application_space_leaks/
2022/01/28(金) 09:50:56.34ID:F+QYYxM3
63デフォルトの名無しさん
2022/02/01(火) 14:44:50.86ID:VXi8EI6O64デフォルトの名無しさん
2022/02/01(火) 15:19:04.39ID:rr+/bjEX https://twitter.com/kuratan/status/114732100682391552
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/5chan_nel (5ch newer account)
2022/02/01(火) 18:35:16.11ID:e9RXuv9o
>>56
どいつも誰だか知らんしどーでも良いが
見た感じ、@Zuishinの記事は確かにしょぼい記事だが、@stken2050の反論にも無理があるな
@Zuishinに関しては、大きな主張をしている割に根拠がかなりしょぼいせいで、記事として価値が低くなっているように思える
対する@stken2050の反論だが、「排他的ではないので反対ではない!」云々は無理がありすぎ
「反対」という自然言語の単語が元々ガバガバなのは誰だって知ってるんだから、それに対して自分で勝手に厳密な定義を与えて、その定義に基づいて矛盾を指摘したって、そりゃ「日本語わかりますか」言われるわ
さらに@stken2050の反論ではwikipediaと異なる高階関数の定義を使っているが、それならwikipedia以上に信憑性の高いソース出して、英語版wikipediaに書かれている高階関数の定義に疑問を呈するのが筋
それをしてないせいで論理的にぶっ飛んで見える
どいつも誰だか知らんしどーでも良いが
見た感じ、@Zuishinの記事は確かにしょぼい記事だが、@stken2050の反論にも無理があるな
@Zuishinに関しては、大きな主張をしている割に根拠がかなりしょぼいせいで、記事として価値が低くなっているように思える
対する@stken2050の反論だが、「排他的ではないので反対ではない!」云々は無理がありすぎ
「反対」という自然言語の単語が元々ガバガバなのは誰だって知ってるんだから、それに対して自分で勝手に厳密な定義を与えて、その定義に基づいて矛盾を指摘したって、そりゃ「日本語わかりますか」言われるわ
さらに@stken2050の反論ではwikipediaと異なる高階関数の定義を使っているが、それならwikipedia以上に信憑性の高いソース出して、英語版wikipediaに書かれている高階関数の定義に疑問を呈するのが筋
それをしてないせいで論理的にぶっ飛んで見える
66デフォルトの名無しさん
2022/02/02(水) 12:32:50.68ID:4gWS4lIC >>63
無事、記事が凍結されたね
無事、記事が凍結されたね
67デフォルトの名無しさん
2022/02/04(金) 08:30:39.02ID:iaw7RH3I 完全に荒らしやろあれ
2022/02/08(火) 08:58:59.73ID:t2yWr+Jt
Haskellって日本人に受けそうで実際一時期話題になったけど
結局下火になっちゃったね
なんでだろう
結局下火になっちゃったね
なんでだろう
69デフォルトの名無しさん
2022/02/08(火) 12:34:20.88ID:iTFetD6R haskellでしばらく何かを学んだら、元いたところに帰っていくんじゃないかな
2022/02/09(水) 10:14:27.54ID:9eeUOmy1
型とGCが下火になったから
型無しならPython
GC無しならRustに行く
型無しならPython
GC無しならRustに行く
2022/02/09(水) 10:49:56.61ID:Lp+6eS6t
型下火になることなんてある?
2022/02/09(水) 13:51:00.40ID:LMpY9ePh
>>70の中では下火になったんだろ
2022/02/09(水) 14:32:04.90ID:4IAm5Mq6
両方なしならどこへ行けばいい?
2022/02/09(水) 16:30:45.01ID:tjRbJd/i
両方ないならAPIと言語が無関係なクラウドみたいな感じになりそう
2022/02/09(水) 19:00:25.72ID:/Rs/AQCx
Cじゃだめなん?
あと、型なしじゃなくて、動的型で良ければ、
Objective-Cがかなり自由度高かった気がする。
あと、型なしじゃなくて、動的型で良ければ、
Objective-Cがかなり自由度高かった気がする。
2022/02/10(木) 14:08:35.36ID:Rx8BtNec
単純に難しいからだろ
元の言語仕様はシンプルなのに、ソフトウェア工学的なノウハウに基づいてOOPと同等以上の実装を実現しようとすると、とたんに大量のGHC拡張と難解な型が出てきてわけわからんくなる
元の言語仕様はシンプルなのに、ソフトウェア工学的なノウハウに基づいてOOPと同等以上の実装を実現しようとすると、とたんに大量のGHC拡張と難解な型が出てきてわけわからんくなる
2022/02/10(木) 17:05:47.42ID:0/0SR33O
lensの型とか複雑すぎる
2022/02/11(金) 01:01:15.27ID:oG7lMZNP
setterの存在自体がマナー違反ということにすればある意味単純なんだよ
マナー違反したせいで複雑すぎるのは自己責任、言語のせいにするなってね
マナー違反したせいで複雑すぎるのは自己責任、言語のせいにするなってね
79デフォルトの名無しさん
2022/02/12(土) 14:38:21.43ID:3EVMkjej 岡部健
2022/02/12(土) 14:59:18.26ID:MmDcA0PA
2022/02/13(日) 02:50:13.95ID:gJE3VDE6
GHC方言とかの知識が豊富な奴ってどちらかといえば反抗的な性格だと思う
それなのに、オリジナルの仕様への忠誠心が高ければ高いほど有能みたいな誤解がある
その上更にいかにも忠誠心なさそうなキャラまで作られてるし
それなのに、オリジナルの仕様への忠誠心が高ければ高いほど有能みたいな誤解がある
その上更にいかにも忠誠心なさそうなキャラまで作られてるし
82デフォルトの名無しさん
2022/02/14(月) 11:54:21.19ID:4AqyxcJv 最近数値計算の勉強してるんですけど、よく最近高速フーリエ変換を用いた乗算の高速化なんて話が出てきます
サイズの大きい整数の掛け算とかを高速化する手法で桁数n同士の乗算のコストをn log(n)に抑えるのだとか
これGHCのInteger型の乗算には応用されてますかね?
やっぱりそこまで速さに拘りたいならご自分でのスタンス?
GHCのソースが読めるほどのスキルはないのでよくわからない
そもそもGHCのソースってどこに転がってます?
サイズの大きい整数の掛け算とかを高速化する手法で桁数n同士の乗算のコストをn log(n)に抑えるのだとか
これGHCのInteger型の乗算には応用されてますかね?
やっぱりそこまで速さに拘りたいならご自分でのスタンス?
GHCのソースが読めるほどのスキルはないのでよくわからない
そもそもGHCのソースってどこに転がってます?
2022/02/14(月) 20:10:36.04ID:TSLH56nb
>>82
ghc haskell ソース でググれば見つかる
ghc haskell ソース でググれば見つかる
2022/02/14(月) 20:56:01.04ID:uQiQyHca
ソースを1行も読まなくても分かることがいくつかある
IntとIntegerの二刀流ができるなら三刀流もできること
第二第三の型を追加するだけのためにコンパイラをコンパイルするのは無意味過ぎること
IntとIntegerの二刀流ができるなら三刀流もできること
第二第三の型を追加するだけのためにコンパイラをコンパイルするのは無意味過ぎること
85デフォルトの名無しさん
2022/02/14(月) 21:36:02.36ID:4AqyxcJv >>82
見つからないorz
>>83
ちょっと数値計算の練習したいんですよ
例えば円周率10万桁とか
さすがに10万桁とかだとghcはデフォルトでは対応してくれないのかなと
仮にできるにしても10万桁×10万桁の計算で桁数^2オーダーで計算したのではその一個の掛け算で何年もかかってしまうことになりかねません
ただのarrayやlistなら10万要素位は扱ってくれそうですけど
ただHaskellでその手の大量データを扱うのは色々難しい問題があるらしいと言う話は聞いてたので今までは「そういうのはHaskellは向かない、そういう時はC」とか使い分けてました
しかしやはりHaskellでできないのは面白くないのでHaskellでもそういうでかいデータを扱えるスキルを身につけたいなぁというのもあります
まぁまだFFTでの掛け算プログラム勉強し始めたばっかりなので先は長そうですけど
とりあえず[Double]のFFTと逆FFT作ったとこまではやったんです
でもそこまで作って「アレ?もしかしてこんなの自作しなくてもそもそもHaskellのIntegerが最初からFFTで掛け算してるとかあるかも?GHCの開発者メチャメチャ優秀っぽいし」と思った次第
見つからないorz
>>83
ちょっと数値計算の練習したいんですよ
例えば円周率10万桁とか
さすがに10万桁とかだとghcはデフォルトでは対応してくれないのかなと
仮にできるにしても10万桁×10万桁の計算で桁数^2オーダーで計算したのではその一個の掛け算で何年もかかってしまうことになりかねません
ただのarrayやlistなら10万要素位は扱ってくれそうですけど
ただHaskellでその手の大量データを扱うのは色々難しい問題があるらしいと言う話は聞いてたので今までは「そういうのはHaskellは向かない、そういう時はC」とか使い分けてました
しかしやはりHaskellでできないのは面白くないのでHaskellでもそういうでかいデータを扱えるスキルを身につけたいなぁというのもあります
まぁまだFFTでの掛け算プログラム勉強し始めたばっかりなので先は長そうですけど
とりあえず[Double]のFFTと逆FFT作ったとこまではやったんです
でもそこまで作って「アレ?もしかしてこんなの自作しなくてもそもそもHaskellのIntegerが最初からFFTで掛け算してるとかあるかも?GHCの開発者メチャメチャ優秀っぽいし」と思った次第
86デフォルトの名無しさん
2022/02/14(月) 21:36:29.77ID:4AqyxcJv あら、アンカー一個ずれ
2022/02/14(月) 21:54:21.41ID:BjFXlOcH
GMP使ってるかもしれないし使ってないかもしれないらしい[1]
GMP使ってるならFFTベースのSchonhage-Strassenが働くしGMP使いたいならライブラリ[2]がある
[1]https://stackoverflow.com/questions/57688078/what-is-the-algorithm-used-in-integer-multiplication
[2]https://hackage.haskell.org/package/integer-gmp
GMP使ってるならFFTベースのSchonhage-Strassenが働くしGMP使いたいならライブラリ[2]がある
[1]https://stackoverflow.com/questions/57688078/what-is-the-algorithm-used-in-integer-multiplication
[2]https://hackage.haskell.org/package/integer-gmp
88デフォルトの名無しさん
2022/02/14(月) 23:13:34.14ID:4AqyxcJv >>87
おお、thx
なるほどGMPというのを使ってるんですね
--Stack excangeより
GMP appears to use Schonhage-Strassen, but not until you start dealing with numbers with 10s of thousands of decimal digits.
GMPではSchonhage-Strassenを使用しているようですが、小数点以下が何万桁もあるような数字を扱うようになるまでは、このようなことはないようです。
--wikiより
GMPは、どんなオペランドの大きさでも他の多倍長整数ライブラリよりも高速であることを目標としている。このために、以下の点を重視している。
基本算術型としてフルワードを使う。
オペランドの大きさによってそれぞれ異なるアルゴリズムを使う。非常に大きな数に有効なアルゴリズムは、小さい数では遅いことが多い。
----
要するに自分でわざわざSchonhage-Strassenのアルゴリズム実装しなくてもそもそもintegerで実装済みという事ですね
そうじゃないかと思ったw
そりゃそうでしょうねぇ、こんな優秀なソフトが数値計算理論の最新の成果取り入れてないわけがないw
10万桁とかIntegerで扱えるのかな?
実はData.FixedにあるFixed aで100桁くらいは余裕というのは確認済みなんです
週末にでも桁数増やして実験してみます
ありがとうございました
おお、thx
なるほどGMPというのを使ってるんですね
--Stack excangeより
GMP appears to use Schonhage-Strassen, but not until you start dealing with numbers with 10s of thousands of decimal digits.
GMPではSchonhage-Strassenを使用しているようですが、小数点以下が何万桁もあるような数字を扱うようになるまでは、このようなことはないようです。
--wikiより
GMPは、どんなオペランドの大きさでも他の多倍長整数ライブラリよりも高速であることを目標としている。このために、以下の点を重視している。
基本算術型としてフルワードを使う。
オペランドの大きさによってそれぞれ異なるアルゴリズムを使う。非常に大きな数に有効なアルゴリズムは、小さい数では遅いことが多い。
----
要するに自分でわざわざSchonhage-Strassenのアルゴリズム実装しなくてもそもそもintegerで実装済みという事ですね
そうじゃないかと思ったw
そりゃそうでしょうねぇ、こんな優秀なソフトが数値計算理論の最新の成果取り入れてないわけがないw
10万桁とかIntegerで扱えるのかな?
実はData.FixedにあるFixed aで100桁くらいは余裕というのは確認済みなんです
週末にでも桁数増やして実験してみます
ありがとうございました
2022/02/15(火) 00:40:37.96ID:2crEr/EW
Haskellの多倍長計算、昔は大変だったけど今はよくなった、みたいな記事が10年前くらいに書かれてた
http://tanakh.jp/posts/2012-03-08-pi.html
http://tanakh.jp/posts/2012-03-08-pi.html
90デフォルトの名無しさん
2022/02/15(火) 19:39:32.71ID:ujR6VeHM >>89
おお、先人がいたww
いや〜Haskellって速さ求めるならあんまりいい選択肢ではなさそうですけどやっぱり挑戦してみたくなりますね
その人のページのリンク先がすごく参考になりました
ようやくChudnovskyの公式とかいうのがなんで最速なのかわかりました
収束速度そのものはどう考えてもAGMの方が早いのになんでChudnovskyの方が早いんだと
Binary Splittingという技使ってまとめて計算していく方法があるんですね
ちょっと感動しました
まぁともかくInteger型の計算で10億桁くらいまで実用的な?速度で計算できるもんなんですね
ボチボチやってみます
おお、先人がいたww
いや〜Haskellって速さ求めるならあんまりいい選択肢ではなさそうですけどやっぱり挑戦してみたくなりますね
その人のページのリンク先がすごく参考になりました
ようやくChudnovskyの公式とかいうのがなんで最速なのかわかりました
収束速度そのものはどう考えてもAGMの方が早いのになんでChudnovskyの方が早いんだと
Binary Splittingという技使ってまとめて計算していく方法があるんですね
ちょっと感動しました
まぁともかくInteger型の計算で10億桁くらいまで実用的な?速度で計算できるもんなんですね
ボチボチやってみます
2022/03/28(月) 00:29:30.89ID:dN2icdd7
Haskell昔は日本でも人気あったのにどうしてこうなった
2022/03/28(月) 00:37:16.39ID:NMG6YJEi
人気ないって事?
そりゃそうでしょ?
お世辞にも使いやすいとは言えない
そりゃそうでしょ?
お世辞にも使いやすいとは言えない
2022/03/28(月) 17:03:01.17ID:o+cr0I/L
>>92
使いにくいと感じるところを教えてください
使いにくいと感じるところを教えてください
2022/03/28(月) 18:04:03.42ID:kSkV8rOb
文字列操作のパッケージを作っている。
1文字づつ評価して処理するのは出来るけど
ループで実現しようとすると、上手くいかない。
[Char]型とString型で混ぜて作ったせいか
ボトムアップ方式で作るのが間違えなのか。
まだまだ初心者の愚痴。
1文字づつ評価して処理するのは出来るけど
ループで実現しようとすると、上手くいかない。
[Char]型とString型で混ぜて作ったせいか
ボトムアップ方式で作るのが間違えなのか。
まだまだ初心者の愚痴。
2022/04/07(木) 21:21:24.28ID:v9cHeTKb
Stringは[Char]の別名だが
2022/04/08(金) 04:13:38.57ID:ZfK1p/yR
Haskell-jp slackってどうなの?
2022/04/08(金) 13:18:29.82ID:7u/c8YSR
とりあえず入ってみたら?
2022/05/25(水) 23:07:08.21ID:HGLTMsh1
>>91
純粋関数型といいつつ実際にはそうではないし
結局はモナドも使わなきゃ実用的なものは作れない
よく例題に上がるようなシンプルな書き方すると遅いし
Lispでも同じようにあった問題で綺麗な書き方よりも早い書き方が重視される
そうこうしているうちにどんどん人は離れていったよ
理念が現実に負けたのだと思う・・
純粋関数型といいつつ実際にはそうではないし
結局はモナドも使わなきゃ実用的なものは作れない
よく例題に上がるようなシンプルな書き方すると遅いし
Lispでも同じようにあった問題で綺麗な書き方よりも早い書き方が重視される
そうこうしているうちにどんどん人は離れていったよ
理念が現実に負けたのだと思う・・
2022/05/25(水) 23:31:09.11ID:HGLTMsh1
あとそうだ
なによりもデバッグがあまりに困難すぎるし
デバッグのために型制約とか何バカやってんだろな・・って思うことしばしば
作業環境が悪いのがまるで改善されないから嫌になる
なによりもデバッグがあまりに困難すぎるし
デバッグのために型制約とか何バカやってんだろな・・って思うことしばしば
作業環境が悪いのがまるで改善されないから嫌になる
100デフォルトの名無しさん
2022/05/27(金) 23:36:10.66ID:IybSybG6 型はコンパイル時にしか存在しない
モナドクラスもコンパイル時にしか使わない
実行時に使われているのはモナドのインスタンスのみ
そのインスタンスは任意の言語で再発明できる
どの言語でデバッグしても困難は同じ
結局は再発明をやらなきゃ実用的な知識が身につかない
モナドクラスもコンパイル時にしか使わない
実行時に使われているのはモナドのインスタンスのみ
そのインスタンスは任意の言語で再発明できる
どの言語でデバッグしても困難は同じ
結局は再発明をやらなきゃ実用的な知識が身につかない
101デフォルトの名無しさん
2022/05/27(金) 23:58:56.33ID:IeVDSTdQ 今だにprintfデバッグに頼ってるなんてHaskellくらいのものかもね・・
102デフォルトの名無しさん
2022/05/28(土) 00:21:10.26ID:1xwNIN3l Cのライブラリに丸投げする効率化を考えれば
デバッグの効率化にはこだわらない方が丸投げしやすい
デバッグの効率化にはこだわらない方が丸投げしやすい
103デフォルトの名無しさん
2022/07/18(月) 03:26:49.61ID:zDzunRmU なんでここまで人気なくなったんだろうな
104デフォルトの名無しさん
2022/07/18(月) 14:14:58.82ID:IRYfc5Qz 声の大きい人たちが使わなくなっただけでは
105デフォルトの名無しさん
2022/07/19(火) 17:39:52.93ID:6V/PH7AR 個人が言語を自作できるレベルになってる説
団体は必須ではない
団体は必須ではない
106デフォルトの名無しさん
2022/08/07(日) 20:06:46.56ID:My+goEll ハマりました
次のコード通らん理由が分からん
import Data.Ratio
[[ a,b],[c,d]] *** [[ p,q],[r,s]] = [ [ a*p+b*r, a*q+b*s], [c*p+d*r],[c*q+d*s]]
i [[ a,b],[c,d]] = [[d,-b],[-c,a]]
a :: [[Rational ]]
b:: [[Rational ]]
a = [[1%1,99],[0,100]]
b = [[100,0],[-99,1]]
main = do
mapM_ print $ [ a, b , i a , i b]
print $ (( i b ) *** ( i a ) ) *** b
実行時エラーで
prog: prog.hs:4:1-79: Non-exhaustive patterns in function
になる
一項目のprintの出力
[[1 % 1,99 % 1],[0 % 1,100 % 1]]
[[100 % 1,0 % 1],[(-99) % 1,1 % 1]]
[[100 % 1,(-99) % 1],[0 % 1,1 % 1]]
[[1 % 1,0 % 1],[99 % 1,100 % 1]]
を見てもどう見てもパターンマッチしてるのに?
何故?
次のコード通らん理由が分からん
import Data.Ratio
[[ a,b],[c,d]] *** [[ p,q],[r,s]] = [ [ a*p+b*r, a*q+b*s], [c*p+d*r],[c*q+d*s]]
i [[ a,b],[c,d]] = [[d,-b],[-c,a]]
a :: [[Rational ]]
b:: [[Rational ]]
a = [[1%1,99],[0,100]]
b = [[100,0],[-99,1]]
main = do
mapM_ print $ [ a, b , i a , i b]
print $ (( i b ) *** ( i a ) ) *** b
実行時エラーで
prog: prog.hs:4:1-79: Non-exhaustive patterns in function
になる
一項目のprintの出力
[[1 % 1,99 % 1],[0 % 1,100 % 1]]
[[100 % 1,0 % 1],[(-99) % 1,1 % 1]]
[[100 % 1,(-99) % 1],[0 % 1,1 % 1]]
[[1 % 1,0 % 1],[99 % 1,100 % 1]]
を見てもどう見てもパターンマッチしてるのに?
何故?
107デフォルトの名無しさん
2022/08/08(月) 19:26:19.73ID:NwZYLTPj108デフォルトの名無しさん
2022/08/09(火) 10:46:53.89ID:VUIfOlq+109デフォルトの名無しさん
2022/08/11(木) 18:04:41.32ID:9dSVJvSP おまいらこのクソ暑い夏をどうにかするCOOLなコードをHaskellで簡潔に書けんのか?
110デフォルトの名無しさん
2022/08/25(木) 11:20:55.19ID:97f0Pf6Z ttps://hackage.haskell.org/package/mtl-2.3/docs/src/Control.Monad.Writer.Class.html#tell
listen ~(w, a) = (w, (a, w))
この~はどういう文法なの?
listen ~(w, a) = (w, (a, w))
この~はどういう文法なの?
111デフォルトの名無しさん
2022/08/25(木) 21:14:39.81ID:+PRPT5FW112デフォルトの名無しさん
2022/08/25(木) 21:15:08.79ID:3SQ1xNiu stack でwxHaskell インストールしようとしたんだが、
> stack install wxHaskell
とすると
Unknown package: wxhaskell
とでてインストールできない。
StackだとwxHaskellインストールできないの?んなわけないと思うんだが。
公式見てもstackの場合の方法が書いてない。
> stack install wxHaskell
とすると
Unknown package: wxhaskell
とでてインストールできない。
StackだとwxHaskellインストールできないの?んなわけないと思うんだが。
公式見てもstackの場合の方法が書いてない。
113デフォルトの名無しさん
2022/08/29(月) 23:25:47.74ID:mJ1Da6QY stackage に入っていないからじゃないかな?
最近アップデートされていないし
並行処理も問題ありそうだし…
stack と GUI で検索したらこんな記事があった
https://www.stackbuilders.com/blog/gui-application/
最近アップデートされていないし
並行処理も問題ありそうだし…
stack と GUI で検索したらこんな記事があった
https://www.stackbuilders.com/blog/gui-application/
114デフォルトの名無しさん
2022/08/30(火) 19:30:33.33ID:XzDfLd3k みんな中央集権クラウドに騙されてる
115デフォルトの名無しさん
2022/09/10(土) 21:18:15.99ID:Jyomj+F3 ボトルネックは事実上バグと変わらないから
結局パフォーマンスを考えると
Haskellはバグが混入しやすい言語と言える
しかも入出力は正しいから解決がクッソ厄介で実用性はない
結局パフォーマンスを考えると
Haskellはバグが混入しやすい言語と言える
しかも入出力は正しいから解決がクッソ厄介で実用性はない
116デフォルトの名無しさん
2022/09/10(土) 23:20:56.83ID:6vG8VA3K ロマン思考言語_
117デフォルトの名無しさん
2022/09/11(日) 00:14:39.94ID:HO9VQuZG まあ合ってるな
118デフォルトの名無しさん
2022/09/20(火) 01:04:13.74ID:zJWv8hkC ghci --show-options | wc -l
Output: 1200
Output: 1200
119デフォルトの名無しさん
2022/09/24(土) 01:20:51.22ID:v6+/ywPo 書き込んでいた専門家たちが書き込みをやめたので下火になっている感が出ているわけですね。
120デフォルトの名無しさん
2022/09/24(土) 02:26:09.94ID:vtJ0GRzX イヤ、でも実際した火なんじゃない?
やっぱりHaskellで“性能”と“可読性”の両立を図るのはかなり難しい
やっぱり言語の生い立ちというか、性格というか、性能面、特に速度面の性能面はどうしても優先順位が低い、しかし実務上はもちろんそこは最重要factorだからそこがでないとした火になるのもやむを得ないかと
やっぱりHaskellで“性能”と“可読性”の両立を図るのはかなり難しい
やっぱり言語の生い立ちというか、性格というか、性能面、特に速度面の性能面はどうしても優先順位が低い、しかし実務上はもちろんそこは最重要factorだからそこがでないとした火になるのもやむを得ないかと
121デフォルトの名無しさん
2022/09/24(土) 03:13:03.66ID:v6+/ywPo 仕組みはわからんが計画的だろ。
言い換えると、騒ぐ奴らがうざいから騒がなくなるまで下火なんだろう。
言い換えると、騒ぐ奴らがうざいから騒がなくなるまで下火なんだろう。
122デフォルトの名無しさん
2022/09/24(土) 03:21:31.25ID:cIbikbIQ てか元々世界のメジャーな言語に躍り出ようというつもりなんかHaskellコミュニティにはないのかもね
Haskellコミュニティなんて学者の集合体でしょ?
実務になんか元々興味ないんじゃない?
Haskellコミュニティなんて学者の集合体でしょ?
実務になんか元々興味ないんじゃない?
123デフォルトの名無しさん
2022/09/24(土) 17:34:21.27ID:v6+/ywPo StackでGUIプログラミングしたいのですが、stackでインストールできるライブラリで
おすすめのものはありますか。
おすすめのものはありますか。
124デフォルトの名無しさん
2022/09/27(火) 18:16:48.82ID:2m9lsdvh haskellで作ったチェスゲームありますか
コマとボードはきれいなグラフィックで
マウスでコマを動かすチェス
コマとボードはきれいなグラフィックで
マウスでコマを動かすチェス
125デフォルトの名無しさん
2022/09/27(火) 19:10:55.70ID:rbvXlCo3 来年のRustがこの状態。
126デフォルトの名無しさん
2022/09/27(火) 19:55:55.43ID:CVmtKHy4 Haskellに飛びつく層は
Rustには飛びつかんよね
Rustには面白みが無い
Rustには飛びつかんよね
Rustには面白みが無い
127デフォルトの名無しさん
2022/09/27(火) 20:30:27.34ID:Ctbd02WQ とにもかくにももう少しHaskellは速度性能を出すための方法の標準化について詰めてほしい
Haskell2010の文章のメモ化の部分の詰めがダメすぎる
実情のGHCとかで提供されてるものと差がありすぎて意味がわからん
GHCでの研究成果をもっと標準仕様に取り入れてほしい
何をどうやったら確実にドレコレはメモ化されるかハッキリ文書化してほしい
Haskell2010の文章のメモ化の部分の詰めがダメすぎる
実情のGHCとかで提供されてるものと差がありすぎて意味がわからん
GHCでの研究成果をもっと標準仕様に取り入れてほしい
何をどうやったら確実にドレコレはメモ化されるかハッキリ文書化してほしい
128デフォルトの名無しさん
2022/09/28(水) 02:23:18.14ID:4krAnsc6 整理する気がないからな
どんどんカオスになって行く
どんどんカオスになって行く
129デフォルトの名無しさん
2022/09/29(木) 03:37:20.42ID:IPtlf3/T いまだにGHCというとGuarded Horn Clausesの方のGHCを先に思い出す
130デフォルトの名無しさん
2022/10/01(土) 19:53:52.72ID:7gwAD0df 1番実用的な関数型言語やその影響が強い言語って何になるの?
131デフォルトの名無しさん
2022/10/01(土) 20:00:27.14ID:IQLzQmPp Cじゃね
132デフォルトの名無しさん
2022/10/01(土) 22:58:35.36ID:76wmMtDf 標準規格を一番忠実に実装した奴が優勝みたいな考え方は全然数学的ではない
133デフォルトの名無しさん
2022/10/03(月) 18:02:59.08ID:LGdcguEE lisp系やocamlとか。
134デフォルトの名無しさん
2022/10/04(火) 08:48:04.42ID:S20URLlI ルールがない状態からルールが守られている状態へ誘導するか
何もしてないのに持続するルールを拾い集めるかの違い
何もしてないのに持続するルールを拾い集めるかの違い
135デフォルトの名無しさん
2022/10/07(金) 20:15:05.17ID:xpYSJYo6 F#では。
136デフォルトの名無しさん
2022/10/07(金) 20:28:34.11ID:lAeL408c Erlang
137デフォルトの名無しさん
2022/10/14(金) 22:28:23.68ID:GVf4qcGD ラムダや <- や case で束縛される変数の値は二回以上計算されない
seqは計算のタイミングを変える効果しかない
難しいのは = で定義される名前だが
= の右辺で頑張ってseqを使っても報われない
seqは計算のタイミングを変える効果しかない
難しいのは = で定義される名前だが
= の右辺で頑張ってseqを使っても報われない
138デフォルトの名無しさん
2022/10/14(金) 23:54:06.57ID:91YiMGAd でもhaskell 2010 reportには評価順を変える方法はseqしか規定されていない
GHQなどの実際の処理系でそれ以外のタイミングでメモ化されたりするのはあくまで処理系の独自仕様でしかない
ある処理系でメモ化されて早かったプログラムが別の処理系で同じ速度で処理してくれる保証などどこにもない
GHQなどの実際の処理系でそれ以外のタイミングでメモ化されたりするのはあくまで処理系の独自仕様でしかない
ある処理系でメモ化されて早かったプログラムが別の処理系で同じ速度で処理してくれる保証などどこにもない
139デフォルトの名無しさん
2022/10/15(土) 08:05:01.19ID:/BlEbfcm >>138
もしかして、個人の感想のようなものを悪と思ってるのかね
そして客観的事実 (ようするに絶対正しい事実) と称するものが正義だと
個人の感想を排除するべきという思想はどこにも規定されてないでしょ
もしかして、個人の感想のようなものを悪と思ってるのかね
そして客観的事実 (ようするに絶対正しい事実) と称するものが正義だと
個人の感想を排除するべきという思想はどこにも規定されてないでしょ
140デフォルトの名無しさん
2022/10/15(土) 09:49:59.76ID:fUoifk8c メモ化に関しては俺も>>138と同じような感想持ってるな
141デフォルトの名無しさん
2022/10/15(土) 10:11:19.74ID:/BlEbfcm ある人の感想が別の人の感想と同じになる保証はどこにもない
保証がなくても特に問題ないと判明したならそれでいい
保証がなくても特に問題ないと判明したならそれでいい
142デフォルトの名無しさん
2022/10/15(土) 10:19:45.48ID:+yYiQ+MP 一番嫌なのはネットに転がってるすごいスッキリしたプログラムがあって「おお、すげぇ」と思っても結局それはGHCのメモ化の恩恵でしかなくHaskell本来のそれではないので別の処理系では通用しないものであったりする事
事実上GHCが標準なのでGHCで早ければ「早いプログラムが書けない事はない」のではあるけど、じゃあGHCはどんな時は気をきかせてメモ化してくれるのか、どんな時はその事を利用して早い、しかし短い、わかりやすいプログラムを書けるのかはHaskell 2010 reportではなくGHCの方の仕様書を読むか、実験してみるかしかない、しかし前者はそもそもGHCの仕様書そのものどこにあるかわからないんだけど見つけてもおそらくメモ化の理論は相当に難しい論文レベルの話、さりとて実験で詰めていくのはデバッグと同じレベルのかなり苦痛な作業で、しかも完成したものは大概速さのために可読性をかなり犠牲にしないといけないものになる、当然可搬性も落ちてる
GHCがやってくれてる事全てでなくてもいいけどネットによく転がってるフィボナッチ数列とか素数生成とかのGHCの良きに計らってくれる機能を利用したスッキリした、けど早いプログラムくらいまでは標準化して全ての処理系で動くようにしてほしいけどね
事実上GHCが標準なのでGHCで早ければ「早いプログラムが書けない事はない」のではあるけど、じゃあGHCはどんな時は気をきかせてメモ化してくれるのか、どんな時はその事を利用して早い、しかし短い、わかりやすいプログラムを書けるのかはHaskell 2010 reportではなくGHCの方の仕様書を読むか、実験してみるかしかない、しかし前者はそもそもGHCの仕様書そのものどこにあるかわからないんだけど見つけてもおそらくメモ化の理論は相当に難しい論文レベルの話、さりとて実験で詰めていくのはデバッグと同じレベルのかなり苦痛な作業で、しかも完成したものは大概速さのために可読性をかなり犠牲にしないといけないものになる、当然可搬性も落ちてる
GHCがやってくれてる事全てでなくてもいいけどネットによく転がってるフィボナッチ数列とか素数生成とかのGHCの良きに計らってくれる機能を利用したスッキリした、けど早いプログラムくらいまでは標準化して全ての処理系で動くようにしてほしいけどね
143デフォルトの名無しさん
2022/10/15(土) 11:46:05.26ID:fUoifk8c まあ実際のところメモ化を考え出したら
Lispと同じように可読性を犠牲にした速度重視のコードしか生まれないので・・
メモ化は考えないのが筋だけどそうすると実用性は皆無であってつまり
Lispと同じように可読性を犠牲にした速度重視のコードしか生まれないので・・
メモ化は考えないのが筋だけどそうすると実用性は皆無であってつまり
144デフォルトの名無しさん
2022/10/15(土) 15:59:55.52ID:/BlEbfcm LispとHaskellの違いで重要なのは
モジュールの定義をインタラクティブにやらないこと
ghci起動時に全てのモジュールが定義され最後に
mainや他の式を評価・実行するところだけがインタラクティブ
そもそもmodule Main whereとかいうのは式ではない
式ではないから評価順序という考え方がそこでは通用しない
モジュールの定義をインタラクティブにやらないこと
ghci起動時に全てのモジュールが定義され最後に
mainや他の式を評価・実行するところだけがインタラクティブ
そもそもmodule Main whereとかいうのは式ではない
式ではないから評価順序という考え方がそこでは通用しない
145デフォルトの名無しさん
2022/11/03(木) 00:12:52.63ID:A4mGU1Ql GHCがデファクトだしこだわりがなければ他のコンパイラを使うこともないでしょ
とはいえ関数型言語って速度を重視するタスクには向かないでしょ
速さを求めるのが間違い
とはいえ関数型言語って速度を重視するタスクには向かないでしょ
速さを求めるのが間違い
146デフォルトの名無しさん
2022/11/03(木) 01:14:31.73ID:+2fbLBnA Symbolicsが失敗した事例を思い出す
あれも理想を追求したはいいけど何をやってもひたすら遅く
他社はそれより早く安い機材を次々と繰り出していた
当然惨敗は必然だった
あれも理想を追求したはいいけど何をやってもひたすら遅く
他社はそれより早く安い機材を次々と繰り出していた
当然惨敗は必然だった
147デフォルトの名無しさん
2022/11/03(木) 06:02:33.84ID:A4mGU1Ql 静的な型付けによる頑健性だとrustがあるしなぁ
148デフォルトの名無しさん
2022/11/03(木) 11:53:42.15ID:k32TY8HF 結局のところHaskellの言語策定をしてるコミュニティは学者さんのコミュニティで実用的な性能を向上させる事にそもそも興味ないから実務面での有用性を期待するのは無理やね
149デフォルトの名無しさん
2022/11/04(金) 01:33:00.25ID:ggdePY4U まあそうだろうな
150デフォルトの名無しさん
2022/11/05(土) 10:09:23.49ID:nyx0vuE5 >>142 の指摘って他の言語のGCにもそのまま当てはまると思う。
151デフォルトの名無しさん
2022/11/06(日) 14:53:18.67ID:p6fV7yyc Haskellで開発している会社ってどこがあるの?
検索するとHERPやTuruCapitalしか出てこない…
検索するとHERPやTuruCapitalしか出てこない…
152デフォルトの名無しさん
2022/11/06(日) 16:00:47.05ID:8Hp8Ymz2 GHC9.4.3 リリース
153デフォルトの名無しさん
2022/11/06(日) 16:35:55.22ID:MgGeIf3l Haskell wikiに載ってるやつ見るに、部分的にHaskellを使うって感じかなぁ
154デフォルトの名無しさん
2022/11/06(日) 18:08:25.72ID:SOHxH3HV155デフォルトの名無しさん
2022/11/06(日) 19:47:21.37ID:p6fV7yyc あと朝日ネットの募集要項はHaskellがありました
朝日ネットに応募してみようかなぁ。
HERPはリファレンスチェックが面倒…(上司とかと会話したくない)
朝日ネットに応募してみようかなぁ。
HERPはリファレンスチェックが面倒…(上司とかと会話したくない)
156デフォルトの名無しさん
2022/11/07(月) 00:00:47.60ID:35GjxAYG facebookも使ってた気がする。
157デフォルトの名無しさん
2022/11/07(月) 00:41:59.56ID:aVSF4vDw Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
あえてHaskellを使う意味がない、みたいな…
HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
あえてHaskellを使う意味がない、みたいな…
158デフォルトの名無しさん
2022/11/07(月) 11:14:09.19ID:uMWKgAVp オーバーヘッドを気にせず頑健性を取りたいとき
うーん、具体例が出てこない
うーん、具体例が出てこない
159デフォルトの名無しさん
2022/11/07(月) 12:17:58.82ID:y2qdzeiV >>157
> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか
> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか
160デフォルトの名無しさん
2022/11/07(月) 12:18:26.38ID:y2qdzeiV 誤操作スマソ
161デフォルトの名無しさん
2022/11/08(火) 09:36:33.50ID:VjMrXhSs 消費者目線ではGHCはフリーソフトだからコストが高いとは言えない
コストという物差しが万能ではない具体例がいま出た
コストという物差しが万能ではない具体例がいま出た
162デフォルトの名無しさん
2022/11/09(水) 01:51:03.18ID:3Bh922De まあ学者さんたちのお遊びだからね・・
163デフォルトの名無しさん
2022/11/09(水) 10:38:48.12ID:wL144bz5 どういう結果になるのか契約とか誓約しないのがオープンソース
お遊びにしかならないという保証もしてない
お遊びにしかならないという保証もしてない
164デフォルトの名無しさん
2022/12/02(金) 14:29:56.51ID:fOU9+Fqp Haskellまだイキテル?
165デフォルトの名無しさん
2022/12/03(土) 12:50:06.92ID:HJhX36nM 無生物であることは保証する
何も実験してないのに保証することを数学的と言えないこともない
何も実験してないのに保証することを数学的と言えないこともない
166デフォルトの名無しさん
2022/12/12(月) 16:34:32.76ID:Yq3RU8vo Unreal Verse
https://simon.peytonjones.org/assets/pdfs/haskell-exchange-22.pdf
サイモンさんが関わってるからHaskellの弟分なのかな?
unreal engineに採用なら関数型プログラミングでは
一番使われることになるんだろうか
https://simon.peytonjones.org/assets/pdfs/haskell-exchange-22.pdf
サイモンさんが関わってるからHaskellの弟分なのかな?
unreal engineに採用なら関数型プログラミングでは
一番使われることになるんだろうか
167デフォルトの名無しさん
2022/12/13(火) 21:33:17.94ID:s5AI7uvQ ちょっとやってみるかと思ったら
今はHIEじゃなくてHLS使えみたいなのがぼちぼち出てくるが
じゃあHLSをemacsからどう利用すりゃいいのってなると情報なし
どうなってんのよ
haskell-modeなんて2016で止まってるし
今はHIEじゃなくてHLS使えみたいなのがぼちぼち出てくるが
じゃあHLSをemacsからどう利用すりゃいいのってなると情報なし
どうなってんのよ
haskell-modeなんて2016で止まってるし
168デフォルトの名無しさん
2022/12/15(木) 08:50:05.16ID:hYy+q+Gy >>166
10年越しのビジョン実現で胸熱
https://pc.watch.impress.co.jp/docs/column/kaigai/555239.html
>プレゼンテーションを見ると、Sweeney氏はゲームコードを走らせるプラットフォームが超並列化して行くことを予見し、Unrealの場合は80%のCPUユーセージを並列化が可能だと語っている。また、(ソフトウェア)トランザクショナルメモリや、プログラミングには関数型言語(例としてHaskellを挙げていたが、同時にHaskellに好ましくない点もあると説明している)がフィットすることなどを語っている。
それにしてもSPJを引き抜くなんてゲーム業界はすごい
10年越しのビジョン実現で胸熱
https://pc.watch.impress.co.jp/docs/column/kaigai/555239.html
>プレゼンテーションを見ると、Sweeney氏はゲームコードを走らせるプラットフォームが超並列化して行くことを予見し、Unrealの場合は80%のCPUユーセージを並列化が可能だと語っている。また、(ソフトウェア)トランザクショナルメモリや、プログラミングには関数型言語(例としてHaskellを挙げていたが、同時にHaskellに好ましくない点もあると説明している)がフィットすることなどを語っている。
それにしてもSPJを引き抜くなんてゲーム業界はすごい
169デフォルトの名無しさん
2022/12/15(木) 11:15:36.01ID:3Q63kYiw いや15年越し
https://game.watch.impress.co.jp/docs/20080911/epic.htm
>Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
https://game.watch.impress.co.jp/docs/20080911/epic.htm
>Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
170デフォルトの名無しさん
2022/12/17(土) 23:16:08.75ID:7V76W+iX HaskellでWebシステムのバックエンドを開発したときのメモリ使用量は
GoやPythonと比較してどの程度でしょうか?多いですか?少ないですか?
GoやPythonと比較してどの程度でしょうか?多いですか?少ないですか?
171デフォルトの名無しさん
2022/12/23(金) 15:37:27.80ID:Rf1vHPUu サーバとクライアントのサンプルプログラムを練習で書いたのだけど
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?
172デフォルトの名無しさん
2022/12/23(金) 20:44:32.65ID:Gou4DLut173デフォルトの名無しさん
2022/12/29(木) 17:00:27.04ID:ZBF5EoRT モノイド、関手は習得できたけど
自然変換で躓いてる
自然変換で躓いてる
174デフォルトの名無しさん
2022/12/29(木) 23:24:37.93ID:pM4wQIt0 今haskellでguiを作るなら何がいい?
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい
175デフォルトの名無しさん
2022/12/30(金) 12:18:58.51ID:/hxsvxNk ところでwxHaskellが流行らないのはなぜ?
wxが流行ってないからかな?
wxが流行ってないからかな?
176デフォルトの名無しさん
2022/12/30(金) 13:53:40.82ID:FXsz7+hW 本当に必要なのはドリルの大量生産ではなくドリルでもなく穴だからかな
177デフォルトの名無しさん
2022/12/30(金) 19:21:21.60ID:dTZ5gB6H Haskellはすでに見放されてる感ある
178デフォルトの名無しさん
2023/01/02(月) 01:15:52.75ID:jETc9FsM >>177
そうなの?それは実務的な意味で?
そうなの?それは実務的な意味で?
179デフォルトの名無しさん
2023/01/02(月) 03:01:15.30ID:/m9PT5PE ステマが酷すぎた。
180デフォルトの名無しさん
2023/01/02(月) 03:01:59.29ID:/m9PT5PE 言いなおそう。
某出版社のステマが酷すぎた。
某出版社のステマが酷すぎた。
181デフォルトの名無しさん
2023/01/03(火) 00:10:20.46ID:7mh2KVDC 見放されるようになったのは、
モナドってなに?というミステリアスで興味深い問いがいつのまにか
白けた話になったからじゃないか。もうどうでもいいというか。
モナドってなに?というミステリアスで興味深い問いがいつのまにか
白けた話になったからじゃないか。もうどうでもいいというか。
182デフォルトの名無しさん
2023/01/03(火) 04:29:29.65ID:yYGSV1g6 技術評論社のせいでは?
183デフォルトの名無しさん
2023/01/04(水) 05:08:58.65ID:peYJ5uzH メンテナーが次々と逃げ出してるのが象徴的・・
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる
遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる
遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい
184デフォルトの名無しさん
2023/01/04(水) 18:10:50.86ID:HUTbVNXS PureScriptに移行しようぜ
正格評価で使いやすいし
正格評価で使いやすいし
185デフォルトの名無しさん
2023/01/05(木) 03:59:19.12ID:PBBtO4Nd しかし無限数列とか表現できなくなるのがなぁ
186デフォルトの名無しさん
2023/01/05(木) 12:24:48.41ID:dQdtWkz5 あんなもの現実には扱えないからな
適当な数値を上限にしとけばいいだけ
適当な数値を上限にしとけばいいだけ
187デフォルトの名無しさん
2023/01/05(木) 13:19:36.00ID:PBBtO4Nd イヤ、“表現できる”ってとこに意味があるんだよ
188デフォルトの名無しさん
2023/01/05(木) 14:40:58.83ID:dQdtWkz5 その割にデメリットの方が大きすぎる
やはりいらないよ
やはりいらないよ
189デフォルトの名無しさん
2023/01/14(土) 23:43:44.49ID:vLwyb8f9 PureScriptと被ってるかな?
[GHC 9.6.1-alpha1 is now available - Announcements - Haskell Community](https://discourse.haskell.org/t/ghc-9-6-1-alpha1-is-now-available/5585)
[GHC 9.6.1-alpha1 is now available - Announcements - Haskell Community](https://discourse.haskell.org/t/ghc-9-6-1-alpha1-is-now-available/5585)
190デフォルトの名無しさん
2023/01/17(火) 00:55:50.42ID:zIKNxshB 無限の長さの [a] を仮に廃止して他の言語と同じような方式に変えたら IO a のような型になる
生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある
生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある
191デフォルトの名無しさん
2023/01/17(火) 01:31:37.81ID:PP1OxyD+ 生物学関係ないな
192デフォルトの名無しさん
2023/01/17(火) 03:13:49.00ID:zIKNxshB 言語は死なないとか復活させればいいだけとか思うならもう生物学関係ない
そう思わないなら関係ありそう
そう思わないなら関係ありそう
193デフォルトの名無しさん
2023/01/17(火) 08:07:29.90ID:Inpyi8aQ 無意味な比喩表現
194デフォルトの名無しさん
2023/01/19(木) 01:20:46.84ID:cE+DUb2P クラウドは中に人がいるのか無人なのか調べられないので
人間と機械を混同したのではなく不確実にした
人間と機械を混同したのではなく不確実にした
195デフォルトの名無しさん
2023/01/19(木) 07:47:39.45ID:7wHhBGeN 意味不明
もう少し文章を書く練習をしろ
もう少し文章を書く練習をしろ
196デフォルトの名無しさん
2023/01/19(木) 17:42:25.26ID:ugYwIpAQ 嘘を書くのをやめろって言われない努力はしてる
現に、嘘だと言われない
現に、嘘だと言われない
197デフォルトの名無しさん
2023/01/19(木) 20:45:58.03ID:LuniV29G 間違ってさえいない文章
真偽以前に中身がない
真偽以前に中身がない
198デフォルトの名無しさん
2023/01/19(木) 20:49:17.03ID:LuniV29G それっぽいだけで少し読めば大したことすら書かれてないのがわかる
199デフォルトの名無しさん
2023/01/19(木) 21:18:32.97ID:ugYwIpAQ 「わかる」と「意味不明」は矛盾しそう
どっちかが嘘ついるのでは
どっちかが嘘ついるのでは
200デフォルトの名無しさん
2023/01/19(木) 21:33:25.41ID:QROh3L3M201デフォルトの名無しさん
2023/01/19(木) 21:38:24.06ID:CHvJHSS4 お前も反応すんなよ
202デフォルトの名無しさん
2023/01/20(金) 01:52:23.49ID:jpIFaaML いくら話題がないからって
203デフォルトの名無しさん
2023/01/21(土) 13:30:02.33ID:ms4pFp6J 職業倫理が苦手です
204デフォルトの名無しさん
2023/01/21(土) 16:31:20.60ID:c9rqNig0 スレチ
205デフォルトの名無しさん
2023/01/29(日) 20:58:33.14ID:3238s/rq 教科書の通りなのになんでエラーになるんだろう?
code:
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = fork (f h, g h)
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
Error occurred
ERROR line 2 - Type error in explicitly typed binding
*** Term : fork
*** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d)
*** Does not match : (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d)
code:
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = fork (f h, g h)
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
Error occurred
ERROR line 2 - Type error in explicitly typed binding
*** Term : fork
*** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d)
*** Does not match : (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d)
206デフォルトの名無しさん
2023/01/30(月) 02:11:06.80ID:jVdK8GQm207デフォルトの名無しさん
2023/01/30(月) 04:31:24.57ID:KsiNNj/4 >>206
ありがとうございます。その通りでした。
code:
pair :: (a->b, a->c) -> a -> (b, c)
pair (f, g) x = (f x, g x)
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = pair (f, g) h
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
-- ([0,1,2,3,4],"hallo")
これで上手く動いたので報告しておこうと思ったら、同じことを2時間以上も前に... oTL
ありがとうございます。その通りでした。
code:
pair :: (a->b, a->c) -> a -> (b, c)
pair (f, g) x = (f x, g x)
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = pair (f, g) h
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
-- ([0,1,2,3,4],"hallo")
これで上手く動いたので報告しておこうと思ったら、同じことを2時間以上も前に... oTL
208デフォルトの名無しさん
2023/02/01(水) 14:35:45.13ID:RAEJFXsc Haskell使い(でLinux使い)の皆さんってxmonad使ってますか?
ウィンドウフォーカスを切り替えるときにfloatingウィンドウは無視するようにしたいです。
オリジナルのfocusUp'関数は
focusUp' :: Stack a -> a
focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs)
focusUp' (Stack t [] rs) = Stack x xs []
where (x :| xs) = NE.reverse (t :| rs)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?
ウィンドウフォーカスを切り替えるときにfloatingウィンドウは無視するようにしたいです。
オリジナルのfocusUp'関数は
focusUp' :: Stack a -> a
focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs)
focusUp' (Stack t [] rs) = Stack x xs []
where (x :| xs) = NE.reverse (t :| rs)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?
209デフォルトの名無しさん
2023/02/17(金) 00:17:58.82ID:x2uQcODA ChatGPTにいろんなサンプル書かせて勉強させてもらってるわ
210デフォルトの名無しさん
2023/02/18(土) 07:53:47.68ID:pwjCq/Fb >>208ですがスレチですかね
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)
211デフォルトの名無しさん
2023/02/23(木) 22:53:40.11ID:3VcdShfb すみません
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが
具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。
v1 :: Maybe a
v1 = Nothing
v2 :: [a]
v2 = []
型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。
また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが
具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。
v1 :: Maybe a
v1 = Nothing
v2 :: [a]
v2 = []
型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。
また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)
212デフォルトの名無しさん
2023/02/24(金) 02:14:24.44ID:PIH/rCf2 >>211
Bing チャットに聞いたらこんなのが返ってきた。参考になるかな。
型変数を含むデータ型の例としては、関数型、代数的データ型、型クラスなどがあります。
例: data Tree a = Leaf a | Node (Tree a) (Tree a)
この代数的データ型Treeは任意の型aを要素とする二分木を表します。
例: class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
この型クラスEqは任意の型aに対して等値性を定義するための仕組みです。
Bing チャットに聞いたらこんなのが返ってきた。参考になるかな。
型変数を含むデータ型の例としては、関数型、代数的データ型、型クラスなどがあります。
例: data Tree a = Leaf a | Node (Tree a) (Tree a)
この代数的データ型Treeは任意の型aを要素とする二分木を表します。
例: class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
この型クラスEqは任意の型aに対して等値性を定義するための仕組みです。
213デフォルトの名無しさん
2023/02/25(土) 11:21:45.77ID:h/PI1ikt >>212
ありがとうございます。
凄いHを楽しく学ぶ本にも
Tree型があったので試してみました。
具体的な中身が「無い」事を現す値の場合
型引数で定義できるみたいです。
data Tree a = EmptyTree | Node a (Tree a) (Tree a)
deriving (Show)
v3 :: Tree a
v3 = EmptyTree
ありがとうございます。
凄いHを楽しく学ぶ本にも
Tree型があったので試してみました。
具体的な中身が「無い」事を現す値の場合
型引数で定義できるみたいです。
data Tree a = EmptyTree | Node a (Tree a) (Tree a)
deriving (Show)
v3 :: Tree a
v3 = EmptyTree
214デフォルトの名無しさん
2023/04/29(土) 14:07:24.45ID:AoTbqg9O マルチポストだが教えてくれ
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
215デフォルトの名無しさん
2023/05/01(月) 00:30:45.06ID:PDTetkfq >>214
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician
216デフォルトの名無しさん
2023/05/03(水) 20:58:10.10ID:ioA1phJ7 >>214
英語で調べてもそんな話出てきたことはないな。
英語で調べてもそんな話出てきたことはないな。
217デフォルトの名無しさん
2023/05/03(水) 21:14:18.69ID:ioA1phJ7218デフォルトの名無しさん
2023/06/09(金) 14:58:05.85ID:GYy2ex4t lispやらカリー=ハワード同型やらの関連性は
数学的な意味では遥か前だし実装上の話かな
https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics
数学的な意味では遥か前だし実装上の話かな
https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics
219デフォルトの名無しさん
2023/06/20(火) 00:30:03.89ID:qm9+2t5E do 記法でのメモ化について質問です
例えば
do
let x <- someComplexExpression
print $ f x
print $ g x
のようなコードがあったとしてxの値はf xの評価の時点とg xの評価の時点で2回別々にされますか?
少なくともHaskell2010 Lang. Rep. (以下HLR2010)ではこのような場合メモ化されて2回展開されることはないという記述を見つけることはできませんでした
なので公式にはこのような記述だと2回展開されると思わなければいけないのだと思います
ではsomeComplexExpressionを先に展開してから、展開したものをxにbindするにはどうすれば良いのでしょうか?
HLR2010ではswqを使えば良いとあるのですがこの場合
x <- seq someComplexExpression someComplexExpression
とかでうまく行くんでしょうか?
またそれでうまくいってるのかどうか確かめる方法はありますか?
つまり実際何回 someComplexExpressionが展開されてる回数を確かめる方法はありますか?
よろしくお願い致します
例えば
do
let x <- someComplexExpression
print $ f x
print $ g x
のようなコードがあったとしてxの値はf xの評価の時点とg xの評価の時点で2回別々にされますか?
少なくともHaskell2010 Lang. Rep. (以下HLR2010)ではこのような場合メモ化されて2回展開されることはないという記述を見つけることはできませんでした
なので公式にはこのような記述だと2回展開されると思わなければいけないのだと思います
ではsomeComplexExpressionを先に展開してから、展開したものをxにbindするにはどうすれば良いのでしょうか?
HLR2010ではswqを使えば良いとあるのですがこの場合
x <- seq someComplexExpression someComplexExpression
とかでうまく行くんでしょうか?
またそれでうまくいってるのかどうか確かめる方法はありますか?
つまり実際何回 someComplexExpressionが展開されてる回数を確かめる方法はありますか?
よろしくお願い致します
220デフォルトの名無しさん
2023/06/25(日) 14:24:09.04ID:H+Ij4nqZ 質問にさせていただきます
違う標数での有限体での計算を必要とするコードを考えてます
ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して
x = F3 $ 1+2
y = F5 $ 2-5
のような記述ができればいいなと思ってます
そのためには
data FiniteFieldCh3 = F3 Int
instance Num F3 where...
のようにF3,F5両方にNumを定義しないといけません
面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( char x )
違う標数での有限体での計算を必要とするコードを考えてます
ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して
x = F3 $ 1+2
y = F5 $ 2-5
のような記述ができればいいなと思ってます
そのためには
data FiniteFieldCh3 = F3 Int
instance Num F3 where...
のようにF3,F5両方にNumを定義しないといけません
面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( char x )
221デフォルトの名無しさん
2023/06/25(日) 14:24:14.71ID:H+Ij4nqZ 以下のようなerror が出てきます
prog.hs:22:10: error:
• The constraint ‘FiniteField a’
is no smaller than the instance head
(Use UndecidableInstances to permit this)
• In the instance declaration for ‘(Num a)’
|
22 | instance ( FiniteField a ) => ( Num a ) where
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
コレはなんですか?
ちなみにFlexibleInstancesというのが必要かとの事なので冒頭に
{-# LANGUAGE FlexibleInstances #-}
を入れています
コンパイラはghc8.4.4です
よろしくお願い致します
prog.hs:22:10: error:
• The constraint ‘FiniteField a’
is no smaller than the instance head
(Use UndecidableInstances to permit this)
• In the instance declaration for ‘(Num a)’
|
22 | instance ( FiniteField a ) => ( Num a ) where
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
コレはなんですか?
ちなみにFlexibleInstancesというのが必要かとの事なので冒頭に
{-# LANGUAGE FlexibleInstances #-}
を入れています
コンパイラはghc8.4.4です
よろしくお願い致します
222デフォルトの名無しさん
2023/06/25(日) 14:43:47.12ID:H+Ij4nqZ すいません、最後の行間違って修正前のやつコピペしました
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( modulus x )
です
よろしくお願い致します
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( modulus x )
です
よろしくお願い致します
223デフォルトの名無しさん
2023/06/25(日) 15:08:12.64ID:CDxt6lPg 型クラスの単相性制限とか、関数従属性とか、とか。。。
的外れなこと言ってたらごめん。
的外れなこと言ってたらごめん。
224デフォルトの名無しさん
2023/06/25(日) 15:23:50.61ID:CDxt6lPg なんか Bard とかにつっこんでも情報得られるかも
225デフォルトの名無しさん
2023/06/25(日) 17:33:31.79ID:OvK+yilq ありがとうございます
現在まだ調べてる最中なんですけど
https://stackoverflow.com/questions/7198907/haskell-constraint-is-no-smaller-than-the-instance-head
によるとどうもclass制約の解決をloopさせないための制約くさいです
つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言
class ( C a ) => D a where ...
class ( D a ) => C a where ...
のような宣言があるとまずいようです
なので=>の左側の型は右側の型より“短い”事が要求されるそうです
例えばtoDみたいな型生成子を作っておいて
class ( C a ) => ( D ( toD a ) ) where ...
などとしないといけないらしいです
でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら
現在まだ調べてる最中なんですけど
https://stackoverflow.com/questions/7198907/haskell-constraint-is-no-smaller-than-the-instance-head
によるとどうもclass制約の解決をloopさせないための制約くさいです
つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言
class ( C a ) => D a where ...
class ( D a ) => C a where ...
のような宣言があるとまずいようです
なので=>の左側の型は右側の型より“短い”事が要求されるそうです
例えばtoDみたいな型生成子を作っておいて
class ( C a ) => ( D ( toD a ) ) where ...
などとしないといけないらしいです
でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら
226デフォルトの名無しさん
2023/07/03(月) 23:45:49.20ID:QPaqlNti 値とmoduleどっちも含んだdata作ればいいのでは
227デフォルトの名無しさん
2023/07/04(火) 00:24:50.19ID:+0TfLuMN >>226
こういうやつですね
data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq)
instance Num FiniteField where
x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x )
x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x )
fromInteger x = FF x 1
でもコレだと例えば
x = FF 2 7
y = FF 4 7
x + y
のような場合実行時にプログラムは値に格納されてるmodulusを読みに行ってから割り算行うという手間がかかります
しかし私のやりたいプログラムではそもそも各変数のmodulusは確定していてそもそも読みに行くのはバカバカしい感じがします
実行時にxもyも𝔽₇の元と決まりきっててmod の第二引数はコンパイル時点で7と決まっているのにその7を読みに行く作業が無駄に思えるんです
しかもコレは型ではなく値なので型チェックの恩恵も受けることができません
プログラム中に出てくるmodilus事に全部F2型、F3型、F5型‥と全部作って全部のNum instance一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと
こういうやつですね
data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq)
instance Num FiniteField where
x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x )
x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x )
fromInteger x = FF x 1
でもコレだと例えば
x = FF 2 7
y = FF 4 7
x + y
のような場合実行時にプログラムは値に格納されてるmodulusを読みに行ってから割り算行うという手間がかかります
しかし私のやりたいプログラムではそもそも各変数のmodulusは確定していてそもそも読みに行くのはバカバカしい感じがします
実行時にxもyも𝔽₇の元と決まりきっててmod の第二引数はコンパイル時点で7と決まっているのにその7を読みに行く作業が無駄に思えるんです
しかもコレは型ではなく値なので型チェックの恩恵も受けることができません
プログラム中に出てくるmodilus事に全部F2型、F3型、F5型‥と全部作って全部のNum instance一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと
228デフォルトの名無しさん
2023/07/04(火) 11:11:04.93ID:rN492ZrW229デフォルトの名無しさん
2023/07/06(木) 01:04:07.84ID:sds/6LG1 みなさん情報ありがとうございます
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
https://ideone.com/3Lhc4z
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
https://ideone.com/3Lhc4z
230デフォルトの名無しさん
2023/08/05(土) 13:07:07.29ID:1IOAcn45 hage
231デフォルトの名無しさん
2023/09/04(月) 14:41:20.09ID:FcZAE9nJ haskellは廃れてきてるな、悲しい
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの
232デフォルトの名無しさん
2023/09/16(土) 21:21:50.35ID:6682wM15 数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利)
なぜ多くの言語では集合に順番がないのでしょうか?
なぜ多くの言語では集合に順番がないのでしょうか?
233デフォルトの名無しさん
2023/09/16(土) 21:25:49.38ID:6682wM15 等価判定演算子では順番を問わないが、
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが
一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが
一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?
234デフォルトの名無しさん
2023/09/16(土) 23:06:28.20ID:XG1/1lYn 順番がないやつと順番があるやつは
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?
逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?
逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?
235デフォルトの名無しさん
2023/09/16(土) 23:13:33.62ID:6682wM15 数学的概念として等価だったりどちらが特殊とか言えないのは納得しています
ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です
ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です
236デフォルトの名無しさん
2023/09/17(日) 02:24:17.53ID:yNwKlKA6 データ型としての起源としては
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様
237デフォルトの名無しさん
2023/09/17(日) 02:39:39.55ID:XqeO/FaW 組み込み型とユーザー定義型の区別をなくす思想はある
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる
238デフォルトの名無しさん
2023/09/17(日) 23:47:13.96ID:70jB6wMR 初心者は++を使うけどなれたら<>を使ってる人が多い気がする
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな
239デフォルトの名無しさん
2023/09/18(月) 10:00:00.93ID:E5yF50jH 俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません
俗説が正解だった時代などない
俗説が正解だった時代などない
240デフォルトの名無しさん
2023/09/19(火) 19:53:05.75ID:QCYT99dv unixのtouchを実現したいのですが
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
241デフォルトの名無しさん
2023/09/19(火) 19:54:00.31ID:QCYT99dv unixのtouchを実現したいのですが
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
242デフォルトの名無しさん
2023/09/19(火) 19:58:16.28ID:QCYT99dv すみません、書き込むボタンの反応がなかったので連投になってしまいました
243デフォルトの名無しさん
2023/09/19(火) 20:14:24.31ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
244デフォルトの名無しさん
2023/09/19(火) 20:14:45.64ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
245デフォルトの名無しさん
2023/09/19(火) 20:18:27.88ID:a563RtWW ありゃ俺も連投しちまったすまん
なんか5ch重いっぽいね
なんか5ch重いっぽいね
246デフォルトの名無しさん
2023/09/20(水) 08:38:40.03ID:I55f6i4N for i in * ; do touch anotherdir/$i ; done
247デフォルトの名無しさん
2023/09/20(水) 08:53:25.46ID:I55f6i4N248デフォルトの名無しさん
2023/09/22(金) 12:15:07.45ID:NjV4q9P3 数値のリストl=[1,10,3]みたいなのを
1 10 3と出力したい。末尾には空白はあってはならないとする
最初
putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l
こんなのを考えたのだが10も1 0と分解されてしまった
しかたなく泥臭いこんなコードを書いたのだがもっといい方法はないだろうか
mp [] = return ()
mp [x] = putStrLn $ show x
mp (x:xs) = do
putStr $ show x ++ " "
mp xs
1 10 3と出力したい。末尾には空白はあってはならないとする
最初
putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l
こんなのを考えたのだが10も1 0と分解されてしまった
しかたなく泥臭いこんなコードを書いたのだがもっといい方法はないだろうか
mp [] = return ()
mp [x] = putStrLn $ show x
mp (x:xs) = do
putStr $ show x ++ " "
mp xs
249デフォルトの名無しさん
2023/09/22(金) 13:06:36.18ID:8SLDLfd5250デフォルトの名無しさん
2023/09/22(金) 14:01:02.50ID:NjV4q9P3 putStrLn $ intercalate " " $ map show l
これでいけました
これでいけました
251デフォルトの名無しさん
2023/09/22(金) 14:01:12.58ID:W8j4O+ex 泥臭いだけで罪があるかのように日常的に刷りこまれてるから
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな
252デフォルトの名無しさん
2023/09/27(水) 15:30:51.70ID:9Ywamwi5 {-# LANGUAGE BinaryLiterals #-}
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ
253デフォルトの名無しさん
2023/09/27(水) 17:59:16.99ID:k7PwLxD8 readが定義されたモジュールは別のLANGUAGEってこと?
254デフォルトの名無しさん
2023/10/11(水) 15:16:15.28ID:1pnnvG+R groupBy (\a b -> snd a == snd b)
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした
255デフォルトの名無しさん
2023/10/11(水) 17:39:54.48ID:Fikp0OWy256デフォルトの名無しさん
2023/10/11(水) 22:05:36.63ID:1pnnvG+R 括弧を使わずにじゃなくてラムダを使わずにでした
まさに欲しかったのそれです
ありがとうございました!!
まさに欲しかったのそれです
ありがとうございました!!
257デフォルトの名無しさん
2023/10/18(水) 05:38:40.90ID:vCrdR6l9 QuickCheckを勉強しているんですが
Runtime Errorを検出したくて次のように書きました
anの要素は2以上n以下で複数回出現します
testcaseがほとんどdiscardされるのですがリストをchoose (2,n)とかで生成するには
どうしたら良いのでしょうか
verboseCheckを指定してみるとskippedだらけなのですが
スキップしたやつは表示しないで欲しい
prop :: Positive Int -> [Int] -> Property
prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO $ do
a' <- run (solve n an)
assert True
Runtime Errorを検出したくて次のように書きました
anの要素は2以上n以下で複数回出現します
testcaseがほとんどdiscardされるのですがリストをchoose (2,n)とかで生成するには
どうしたら良いのでしょうか
verboseCheckを指定してみるとskippedだらけなのですが
スキップしたやつは表示しないで欲しい
prop :: Positive Int -> [Int] -> Property
prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO $ do
a' <- run (solve n an)
assert True
258デフォルトの名無しさん
2023/11/16(木) 18:41:54.01ID:wXoixzgD 岡部健、復活したよ!
エックス内を
“Ken140291“
で探してみて下さい。
最近登録したばかりの様です。
エックス内を
“Ken140291“
で探してみて下さい。
最近登録したばかりの様です。
259デフォルトの名無しさん
2023/11/18(土) 16:03:54.22ID:sLhTkQlu 自分で書き込んでいるのでは・・・。
260デフォルトの名無しさん
2023/11/19(日) 15:31:44.23ID:/inwpH7b >>248
init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] でOK
init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] でOK
261デフォルトの名無しさん
2023/11/20(月) 09:46:08.35ID:sZ0M6Dsh >260 打ち間違えた!
lnlt$foldl(\a x->a ++show x++" ")[][1,10,3]
が正解。
lnlt$foldl(\a x->a ++show x++" ")[][1,10,3]
が正解。
262デフォルトの名無しさん
2023/11/20(月) 14:32:44.66ID:4MiKC4cJ >>258
ぎゃははははははは
ぎゃははははははは
263デフォルトの名無しさん
2023/11/20(月) 21:45:30.49ID:Jf1v4QK8 https://github.com/ken-okabe/functional-programming-from-scratch-ja#before
> Unkown(気づいてない)
ウンコウンわろた。
> Unkown(気づいてない)
ウンコウンわろた。
264デフォルトの名無しさん
2023/11/20(月) 23:57:47.37ID:N43MAaAU スレチ
265デフォルトの名無しさん
2023/11/21(火) 12:01:48.14ID:MS7pneIs 毛の壁くん復活してたのか!!
266デフォルトの名無しさん
2023/11/21(火) 12:21:46.16ID:W0g+S6dW267デフォルトの名無しさん
2023/11/22(水) 15:27:17.26ID:1OepVPCl こんなコードがあるのですが
cumsum k = unfoldr next . (,) 0
where
next :: (Int, [Int]) -> Maybe (Int, (Int, [Int]))
next (acc, x : xs) | acc <= k - x, acc' <- acc + x = Just (acc', (acc', xs))
next _ = Nothing
acc <= k-xはわかるのですが、acc' <- acc + xというのはどういう文法なのですか?
リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね?
cumsum k = unfoldr next . (,) 0
where
next :: (Int, [Int]) -> Maybe (Int, (Int, [Int]))
next (acc, x : xs) | acc <= k - x, acc' <- acc + x = Just (acc', (acc', xs))
next _ = Nothing
acc <= k-xはわかるのですが、acc' <- acc + xというのはどういう文法なのですか?
リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね?
268デフォルトの名無しさん
2023/11/22(水) 16:31:30.12ID:PuIW3qrN >>267
パターンガードかな
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%BC%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
パターンガードかな
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%BC%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
269デフォルトの名無しさん
2023/11/23(木) 07:24:43.49ID:WRBO39fy <-はパターンガード修飾子と呼ぶのですね
初めて知りました
ありがとうございました
初めて知りました
ありがとうございました
270デフォルトの名無しさん
2023/11/24(金) 17:42:26.91ID:V3Fz2AWZ 毛の壁のTwitterの新しいアカウントは
Ken140291
FPFSstutorial
leadmove3648637
です!!
Ken140291
FPFSstutorial
leadmove3648637
です!!
271デフォルトの名無しさん
2023/12/04(月) 12:27:24.28ID:GjmDAseS >>270
ぎゃっはっはっはっはw
ぎゃっはっはっはっはw
272デフォルトの名無しさん
2024/01/01(月) 20:17:21.69ID:DcfOChZv mapAccumL/Rの使いどころがよくわからないのですが
どういう時に使うとかの指針ってありますか?
どういう時に使うとかの指針ってありますか?
273デフォルトの名無しさん
2024/01/09(火) 22:50:44.14ID:3mg8b04T ここ5年で発売されたHaskellの書籍で最も優れたものを紹介してください
274デフォルトの名無しさん
2024/01/12(金) 10:55:28.35ID:cAhPSGjh オワコン
275デフォルトの名無しさん
2024/02/29(木) 01:38:01.78ID:d2gqoSk4 windowsにインストールできんみたいだなcabalがエラー?
まあwindowsでやるなってことだな
まあwindowsでやるなってことだな
276デフォルトの名無しさん
2024/03/03(日) 23:47:35.89ID:9XAeTkis モナドについて、床下配線に例えられたり、世界を受け取って副作用後の世界を返すと(IOモナドについて)語られたりするのが当時は分からなくて、考えた結果
何かから値を取り出し、関数適用して(その関数が)何かに値を戻す「動き」をモナドという。
って結論になっていたのだが、IOモナドも含めてもっと良い例えはないかと考えた結果、
モナドとは、アウトソーシング(外部依頼)を数学的に表現したもの。
という結論に至った。
アウトソーシング先が(数学の)外の世界だとIOモナドで、同じ数学の世界だとその他のモナド。
それならHaskell自身は「この関数実行しておいて~」って依頼出して結果を受け取るだけだから、
副作用はないと言う主張に矛盾はない(のか?)
(もしくは、IOモナドはHaskellが受け取れる形の値を返すような入出力の「マシン語」を返してる?)
そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。
何かから値を取り出し、関数適用して(その関数が)何かに値を戻す「動き」をモナドという。
って結論になっていたのだが、IOモナドも含めてもっと良い例えはないかと考えた結果、
モナドとは、アウトソーシング(外部依頼)を数学的に表現したもの。
という結論に至った。
アウトソーシング先が(数学の)外の世界だとIOモナドで、同じ数学の世界だとその他のモナド。
それならHaskell自身は「この関数実行しておいて~」って依頼出して結果を受け取るだけだから、
副作用はないと言う主張に矛盾はない(のか?)
(もしくは、IOモナドはHaskellが受け取れる形の値を返すような入出力の「マシン語」を返してる?)
そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。
277デフォルトの名無しさん
2024/03/04(月) 00:46:59.53ID:XMYw3zR0 箱の中に処理したいデータが入ってるけど一緒にIOウイルスも入ってて
普通に箱を開けるとIOウイルスが外界に漏れて困るから
もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて
密封した上で内側の箱を開けてデータを処理する
そうすると箱の中に処理されたデータとIOウイルスが入った状態になる
これを延々と繰り返すのがIOモナド
ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな
普通に箱を開けるとIOウイルスが外界に漏れて困るから
もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて
密封した上で内側の箱を開けてデータを処理する
そうすると箱の中に処理されたデータとIOウイルスが入った状態になる
これを延々と繰り返すのがIOモナド
ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな
278デフォルトの名無しさん
2024/03/04(月) 01:02:22.82ID:vyClhVzf ふーむ。
仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。
(do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり)
そう考えて私のアウトソーシング説が出来た感じですね。
Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。
仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。
(do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり)
そう考えて私のアウトソーシング説が出来た感じですね。
Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。
279デフォルトの名無しさん
2024/03/04(月) 01:22:40.61ID:XMYw3zR0 doの場合は1行ごとに新しい箱が作られてる
順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから
必要な順序は保証される
外界の予測不能な状態を全部1つの箱の中に押し込んで
箱の外側の処理装置製造工場は全部予測可能(純粋)にしてる感じ
数学の敗北の意味はよく分からないけど
実用性のために予測不能な状態を持ち込んだことかな
順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから
必要な順序は保証される
外界の予測不能な状態を全部1つの箱の中に押し込んで
箱の外側の処理装置製造工場は全部予測可能(純粋)にしてる感じ
数学の敗北の意味はよく分からないけど
実用性のために予測不能な状態を持ち込んだことかな
280デフォルトの名無しさん
2024/03/06(水) 10:29:39.18ID:Yy7OLBEk なんか大げさな例えを使いたがるやつが増えたなぁ
コーディングの上でなんの役に立つんだが
コーディングの上でなんの役に立つんだが
281デフォルトの名無しさん
2024/03/06(水) 15:29:14.97ID:soRPwZI7 「末尾呼び出ししたい関数をデータコンストラクタで置き換える」という仮説は役に立つけれども
(>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること
(>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること
282デフォルトの名無しさん
2024/04/10(水) 04:46:37.45ID:+L19CyUd WindowsでghcupをインストールするのにWSLが不要になって
PowerShellだけで導入できるようになってる
PowerShellだけで導入できるようになってる
283デフォルトの名無しさん
2024/04/13(土) 09:43:59.70ID:p3ysjEUv rustスレで知ったけどhaskellを正格にして依存型を入れたidris(idris2)つー言語があるんだな
284デフォルトの名無しさん
2024/04/13(土) 10:37:58.47ID:VEwLcqlL idrisまで興味があるのならHaskell/Elm/Rust/Zigの流れで開発されているRoc-langも見ておくと良い
特にstatic reference counting周り
特にstatic reference counting周り
285デフォルトの名無しさん
2024/04/13(土) 22:46:49.50ID:p3ysjEUv 色々知らないのがあった、ありがとう
static reference countingつーのが流行りなの
最近のhaskellもrustみたいな1回しかつかえない線形型(linera haskell?)が導入されてるね
static reference countingつーのが流行りなの
最近のhaskellもrustみたいな1回しかつかえない線形型(linera haskell?)が導入されてるね
286デフォルトの名無しさん
2024/04/14(日) 08:32:57.22ID:ZXz6cRZI IOモナドの入力関数も、引数のない関数=変数と捉えると、実質線形型と同じ。
let x = 0 in return (x + 1) >>= x -> print x
こうすると変数xはシャドーイングによって同名の別の変数が生成される。
getLineとかの入力関数はHaskell(数学)の外で初期化される変数とも考えられる。
let x = 0 in return (x + 1) >>= x -> print x
こうすると変数xはシャドーイングによって同名の別の変数が生成される。
getLineとかの入力関数はHaskell(数学)の外で初期化される変数とも考えられる。
287デフォルトの名無しさん
2024/05/17(金) 10:56:06.61ID:kEVlBeR0 参照カウントは0になれば即座にデストラクタを呼び出す
つまり呼び出しを遅延しない
正格にすることと参照カウントを入れることは実質的に同じこと
つまり呼び出しを遅延しない
正格にすることと参照カウントを入れることは実質的に同じこと
288デフォルトの名無しさん
2024/05/18(土) 22:55:12.58ID:HEnIptqp cabalのバージョン上がってたので
windowsで試したらちゃんと動いたわ
気にかけてくれてたんやな
windowsで試したらちゃんと動いたわ
気にかけてくれてたんやな
289デフォルトの名無しさん
2024/06/11(火) 20:46:47.08ID:zqrBHeqN IOモナドを拡張して、副作用をDBだけに限定したモナドとか作れないの?
290デフォルトの名無しさん
2024/06/20(木) 02:22:58.45ID:s4SRXQdp いつの間にかHaskellがC#より速くなってた…。
https://nshinchan01.hateblo.jp/entry/2024/06/20/021327
https://nshinchan01.hateblo.jp/entry/2024/06/20/021327
291デフォルトの名無しさん
2024/06/23(日) 11:34:59.09ID:1+Xj+JzS すみません
GHCのWindows11対応についての質問ですが
「9.2」以前のGHCはWindows11をサポートしていないとの事ですが
ttps://gitlab.haskell.org/ghc/ghc/-/wikis/platforms/windows
これはプログラムコンパイルをして
アプリケーションを生成できないだけで
コンソール内での実行や学習をする分には
「9.2」以前のGHCでも問題ないとの認識で大丈夫でしょうか。
ライブラリが9.0に対応していない物があり確認したいです。
GHCのWindows11対応についての質問ですが
「9.2」以前のGHCはWindows11をサポートしていないとの事ですが
ttps://gitlab.haskell.org/ghc/ghc/-/wikis/platforms/windows
これはプログラムコンパイルをして
アプリケーションを生成できないだけで
コンソール内での実行や学習をする分には
「9.2」以前のGHCでも問題ないとの認識で大丈夫でしょうか。
ライブラリが9.0に対応していない物があり確認したいです。
292デフォルトの名無しさん
2024/06/23(日) 21:13:21.29ID:1+Xj+JzS 度々すみません。
GHCのWindows11対応についての質問の件
Windows11機にGHC8.xをインストールして試した所
問題なくコンソールから実行して
結果のデータファイル生成できました。
取り敢えずはこれでやってみます。
GHCのWindows11対応についての質問の件
Windows11機にGHC8.xをインストールして試した所
問題なくコンソールから実行して
結果のデータファイル生成できました。
取り敢えずはこれでやってみます。
293デフォルトの名無しさん
2024/07/03(水) 21:32:31.40ID:FVo2vRsM Functorってf : value -> valueの関数をfmap f : computation -> computationの関数に拡張してあれこれするけど、
そもそもvalue -> value関数がいらなくない?
わざわざvalue とcomputationを区別するから難しくなるのであって、
全部Functor適用した体で computation -> computationの拡張関数だけ使うように
設計しなおせばもっと普及するんじゃない?
そもそもvalue -> value関数がいらなくない?
わざわざvalue とcomputationを区別するから難しくなるのであって、
全部Functor適用した体で computation -> computationの拡張関数だけ使うように
設計しなおせばもっと普及するんじゃない?
294デフォルトの名無しさん
2024/07/03(水) 23:29:27.98ID:XPii5wC3 何を言っとるんじゃw
295デフォルトの名無しさん
2024/07/04(木) 00:05:21.90ID:CIK9cQRa computationにしたら理論的にカプセル化されるから、例えばT computationで専用に作った関数はU computationでは使いまわしできない。
だから一般的にvalue -> valueで作ることでT computationでもU computationでも使いまわしできるようにしてるというのはわかる。
でも、そういうところが使いにくくて普及してないんじゃないかと思うから、T computationで専用で作った関数も特に何もせず
U computationの関数として使えるようになったらもっと使いやすくなると思う。
というかHaskellにはcomputationの概念は百害あって一利なしなんじゃまいか。
だから一般的にvalue -> valueで作ることでT computationでもU computationでも使いまわしできるようにしてるというのはわかる。
でも、そういうところが使いにくくて普及してないんじゃないかと思うから、T computationで専用で作った関数も特に何もせず
U computationの関数として使えるようになったらもっと使いやすくなると思う。
というかHaskellにはcomputationの概念は百害あって一利なしなんじゃまいか。
296デフォルトの名無しさん
2024/07/04(木) 14:17:13.04ID:PVQ//B0J >>295
君の言うcomputationってどういう定義?
君の言うcomputationってどういう定義?
297デフォルトの名無しさん
2024/07/04(木) 19:36:46.28ID:CIK9cQRa しらんがな。
一応マジレスすると、valueと似ているけどなんか違いがあるもの、ぐらいだろう。
自分の意図としては、”計算機”上で生成されたデータ。
計算機というのは電子計算機に限定されない。
電卓でもいいし、そろばんでもいいし、計算するときのもととなる
数の表現とかをcomputationと呼んでも差し支えないと思ってる。
たとえば、
value:27
に対して電子計算機上だと
11011(2)
で表現されるものがcomputation。
そろばんだったらそろばんの玉の配置。
計算してパチパチ音が出るのが副作用。
逆に言うとvalueの方がわかり難いと思う。計算している計算機の外の世界の
何か数的データみたいな感じがしてわざわざそんな区別いるか?と思う。
一応マジレスすると、valueと似ているけどなんか違いがあるもの、ぐらいだろう。
自分の意図としては、”計算機”上で生成されたデータ。
計算機というのは電子計算機に限定されない。
電卓でもいいし、そろばんでもいいし、計算するときのもととなる
数の表現とかをcomputationと呼んでも差し支えないと思ってる。
たとえば、
value:27
に対して電子計算機上だと
11011(2)
で表現されるものがcomputation。
そろばんだったらそろばんの玉の配置。
計算してパチパチ音が出るのが副作用。
逆に言うとvalueの方がわかり難いと思う。計算している計算機の外の世界の
何か数的データみたいな感じがしてわざわざそんな区別いるか?と思う。
298デフォルトの名無しさん
2024/07/04(木) 23:38:08.08ID:iUDrYol2299デフォルトの名無しさん
2024/07/05(金) 00:05:27.16ID:b38yqPqv >>298
computationがvalueの一つだったら
概念的に computation ⊆ value
になるけど。
少なくとも拡張しているのだから
computation ⊇ value
にならないとおかしくない?
`5 + 3`がcomputationというのは前提にもよるからなんとも言えないと思う。
計算して8(=5+3)を導いたなら8はcomputationだと思うが。
たとえば、掛け算だったとして、九九を唱えてゴサンジュウゴで15を導き出したんなら計算してないからvalueだと思う。
computationがvalueの一つだったら
概念的に computation ⊆ value
になるけど。
少なくとも拡張しているのだから
computation ⊇ value
にならないとおかしくない?
`5 + 3`がcomputationというのは前提にもよるからなんとも言えないと思う。
計算して8(=5+3)を導いたなら8はcomputationだと思うが。
たとえば、掛け算だったとして、九九を唱えてゴサンジュウゴで15を導き出したんなら計算してないからvalueだと思う。
300デフォルトの名無しさん
2024/07/05(金) 00:53:37.68ID:DkqpNxkH >>299
おかしくないよ
OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?
`九九を唱えてゴサンジュウゴの結果を導き出す`のがcomputation
導き出された結果と導き出す計算を区別して
おかしくないよ
OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?
`九九を唱えてゴサンジュウゴの結果を導き出す`のがcomputation
導き出された結果と導き出す計算を区別して
301デフォルトの名無しさん
2024/07/05(金) 02:03:56.64ID:b38yqPqv やっぱりHaskellスレにcomputationネタわかる人いたんだね。
>>300
>OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?
ここは納得。
>導き出された結果と導き出す計算を区別して
なにか f: value -> computation型の関数を念頭に置いて
`f ()`はcomputationと言っているのでは?
意図を勘違いしているかもしれないですが、computationはあくまで導き出された結果でしょう。
それと、関数の返り値を導き出す計算をするにあたって出てくる効果を定義に含めようとしているように感じたのですが、
それはあくまで value -> computation型の関数を計算することに付随する性質であって
computation概念そのものじゃないと思うのですが。
あくまでcomputation概念自体はそういう関数を計算して得られた計算結果なんじゃないですかね。
そう考えると何か不都合な例とかあります?
>>300
>OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?
ここは納得。
>導き出された結果と導き出す計算を区別して
なにか f: value -> computation型の関数を念頭に置いて
`f ()`はcomputationと言っているのでは?
意図を勘違いしているかもしれないですが、computationはあくまで導き出された結果でしょう。
それと、関数の返り値を導き出す計算をするにあたって出てくる効果を定義に含めようとしているように感じたのですが、
それはあくまで value -> computation型の関数を計算することに付随する性質であって
computation概念そのものじゃないと思うのですが。
あくまでcomputation概念自体はそういう関数を計算して得られた計算結果なんじゃないですかね。
そう考えると何か不都合な例とかあります?
302デフォルトの名無しさん
2024/07/25(木) 23:56:39.51ID:zdgCFOr2 stateやioモナドってHaskell以外でも使われてるの?
maybeやeitherは関数型でない言語でも同等のものがあるから分かるけど、stateやioはいまいち便利そうな感じがしない
maybeやeitherは関数型でない言語でも同等のものがあるから分かるけど、stateやioはいまいち便利そうな感じがしない
303デフォルトの名無しさん
2024/07/26(金) 05:41:42.96ID:JmafwQnp >>302
それはそうで、IOモナドは他の言語例えばC言語系列だとhoge();の";"部分を数学的に表現しただけだから。
見た目だけなら
x = x + 1;
printf("%d\n", x);
を
return (x + 1) >>= \x -> print x
do形式に直して
x <- return (x + 1)
print x
ただ、x <- の部分は同名の別の変数をシャドーイングしてるので、厳密にメモリの動作まで合わせるならIORefを使う。
Haskellから見たらメモリもIO処理(ファイル処理含む)も等しく外部への入出力という扱い。
だから、実用としては意味が無い。
一見複数行に見えるコードがその気になれば全部一行に出来るという感動はあるが、それだけだ。
Haskellを仲立ちにして数学とプログラミング言語の関係を研究したりには便利。
逆に自力でIOモナドをPythonなどの適当な言語で実装して全てのコードを関数っぽく書ける。
(Pythonだと演算子の自作が出来ないのでf = (>>=)みたいな事になる)
Haskellは便利だから使うものじゃない。
美しいから使うものだ。
あ、でも腐っても最新版は実行速度が結構上がってる(C#/Java並み)ので、選択肢から外される理由も減ってきた気がする。
それはそうで、IOモナドは他の言語例えばC言語系列だとhoge();の";"部分を数学的に表現しただけだから。
見た目だけなら
x = x + 1;
printf("%d\n", x);
を
return (x + 1) >>= \x -> print x
do形式に直して
x <- return (x + 1)
print x
ただ、x <- の部分は同名の別の変数をシャドーイングしてるので、厳密にメモリの動作まで合わせるならIORefを使う。
Haskellから見たらメモリもIO処理(ファイル処理含む)も等しく外部への入出力という扱い。
だから、実用としては意味が無い。
一見複数行に見えるコードがその気になれば全部一行に出来るという感動はあるが、それだけだ。
Haskellを仲立ちにして数学とプログラミング言語の関係を研究したりには便利。
逆に自力でIOモナドをPythonなどの適当な言語で実装して全てのコードを関数っぽく書ける。
(Pythonだと演算子の自作が出来ないのでf = (>>=)みたいな事になる)
Haskellは便利だから使うものじゃない。
美しいから使うものだ。
あ、でも腐っても最新版は実行速度が結構上がってる(C#/Java並み)ので、選択肢から外される理由も減ってきた気がする。
304デフォルトの名無しさん
2024/07/26(金) 05:47:41.29ID:JmafwQnp そこまで気づくと、Gtk2hsとかWin32とかのC/C++からのラッパーライブラリを関数型言語っぽくない!って拒否する気持ちが分からなくなる。
305デフォルトの名無しさん
2024/07/26(金) 06:16:02.54ID:JmafwQnp あ、IOモナドの利点一応あった。
入力関数が他の関数の引数になったり、他の関数に関数合成出来ない。
Pythonのprint(input())みたいなコードや、len(input())みたいなコードは無理。
ここをしっかり分けることで、そういう変な使い方でのエラーは出ない。
もっと広い視点で言えば、入出力がIOモナドという型で分かれているのでネストの深いループの中でも入出力時に型を意識する必要があるので、そういうバグが大分減る。
手続き型関数型関係なく、ネストの深いループの中のデータが今どんな状態かを頭の中で把握出来る人はそう多くない。
だから、デバッグ時に解きほぐしていくんだが、関数型の方が切り分けしやすいかも?
入力関数が他の関数の引数になったり、他の関数に関数合成出来ない。
Pythonのprint(input())みたいなコードや、len(input())みたいなコードは無理。
ここをしっかり分けることで、そういう変な使い方でのエラーは出ない。
もっと広い視点で言えば、入出力がIOモナドという型で分かれているのでネストの深いループの中でも入出力時に型を意識する必要があるので、そういうバグが大分減る。
手続き型関数型関係なく、ネストの深いループの中のデータが今どんな状態かを頭の中で把握出来る人はそう多くない。
だから、デバッグ時に解きほぐしていくんだが、関数型の方が切り分けしやすいかも?
306デフォルトの名無しさん
2024/07/26(金) 06:20:50.81ID:EERDttnJ Halkellのその先が見たい?
Rustにその答えが全て詰まっている
Rustにその答えが全て詰まっている
307デフォルトの名無しさん
2024/07/26(金) 08:11:21.54ID:3P5OnSpM どなたか教えてください。
数学の構成や命題の証明に使うならば、HaskellとOCamlはどちらがよいでしょうか。
数学の構成や命題の証明に使うならば、HaskellとOCamlはどちらがよいでしょうか。
308デフォルトの名無しさん
2024/07/26(金) 12:15:47.14ID:f34zQmtT Rustは、メモリが見えすぎるのがイヤだー
大したもの書かないから、GCありでお願いしたい
大したもの書かないから、GCありでお願いしたい
309デフォルトの名無しさん
2024/07/26(金) 17:24:09.33ID:HoH4md/R310デフォルトの名無しさん
2024/07/26(金) 17:58:43.47ID:dth0vnjc 数学の構成?
311デフォルトの名無しさん
2024/07/27(土) 00:29:15.86ID:r3Qeb3es >>307
Coqという証明支援プログラミング言語をお使い下さい。
Haskellでも型プログラミングでゴリゴリ自力で命題の証明出来るそうですが、ある程度自動化されている専用言語の方が良いでしょう。
Coqはその中でも日本語情報が多いです。
Coqという証明支援プログラミング言語をお使い下さい。
Haskellでも型プログラミングでゴリゴリ自力で命題の証明出来るそうですが、ある程度自動化されている専用言語の方が良いでしょう。
Coqはその中でも日本語情報が多いです。
312デフォルトの名無しさん
2024/07/27(土) 00:43:27.29ID:r3Qeb3es >>306
実用言語、特に組み込み分野を置き換えるのに期待されてる。
特集記事が無くてもお題スレ見たいな、Rustで問題を解こう的な連載が続いてる辺り、
特にinterfaceの編集陣の熱量は感じる。
Haskellも先駆者の記事によればWeb向けとしては神言語だそうだ。
ただ、周辺環境が未整備なだけで。
(なので、自分で全部作るという茨の道を進む「覚悟」が必要だとか)
未だにそうではないことを祈るが…。
実用言語、特に組み込み分野を置き換えるのに期待されてる。
特集記事が無くてもお題スレ見たいな、Rustで問題を解こう的な連載が続いてる辺り、
特にinterfaceの編集陣の熱量は感じる。
Haskellも先駆者の記事によればWeb向けとしては神言語だそうだ。
ただ、周辺環境が未整備なだけで。
(なので、自分で全部作るという茨の道を進む「覚悟」が必要だとか)
未だにそうではないことを祈るが…。
313デフォルトの名無しさん
2024/07/27(土) 00:53:19.48ID:r3Qeb3es >>307
数の構成の方は、代数的型と基本的な方だと(一部)derivingで自動生成してもらえるから、Haskellはとても楽。
print関数で表示する部分だけでも自動生成してもらう価値はある。
(Read,Enum,Ordで生成されるのは確認済み)
data Nat = Zero | Succ Nat deriving (Show)
連続関数はPCそのものの限界で無理。
代数的型でメモリの続く限りの範囲なら少数も作れるかもしれない。
(その前にリストなり何なりで10進数位取り記法を導入しないと、Natは無限進数なので小数点第1位が1万とか、無限に桁上がりしない構造になる)
数の構成の方は、代数的型と基本的な方だと(一部)derivingで自動生成してもらえるから、Haskellはとても楽。
print関数で表示する部分だけでも自動生成してもらう価値はある。
(Read,Enum,Ordで生成されるのは確認済み)
data Nat = Zero | Succ Nat deriving (Show)
連続関数はPCそのものの限界で無理。
代数的型でメモリの続く限りの範囲なら少数も作れるかもしれない。
(その前にリストなり何なりで10進数位取り記法を導入しないと、Natは無限進数なので小数点第1位が1万とか、無限に桁上がりしない構造になる)
314デフォルトの名無しさん
2024/07/27(土) 13:46:44.73ID:f/jP9uGd315デフォルトの名無しさん
2024/07/27(土) 16:19:23.58ID:Z663WedI >>313
ありがとうございます。
ありがとうございます。
316デフォルトの名無しさん
2024/07/27(土) 17:29:46.87ID:sW1zoNGb317デフォルトの名無しさん
2024/07/27(土) 21:26:10.11ID:wvv58UYW 知ってた
318デフォルトの名無しさん
2024/07/27(土) 23:34:35.07ID:r3Qeb3es319デフォルトの名無しさん
2024/08/01(木) 12:24:32.72ID:XzWUPxYY プロセッサメーカはAIブームと見るやこぞってAI処理特化プロセッサの開発競争
関数型言語に特徴的な処理に特化したプロセッサは誰も作ってくれない
関数型言語に特徴的な処理に特化したプロセッサは誰も作ってくれない
320デフォルトの名無しさん
2024/08/01(木) 16:36:21.75ID:rWBa8MOA それ必要か?
321デフォルトの名無しさん
2024/08/04(日) 23:21:47.06ID:y1wQ9MUm >>319
スタックコンピューターは、Lispの時にぽしゃった。
スタックコンピューターは、Lispの時にぽしゃった。
322デフォルトの名無しさん
2024/08/05(月) 21:33:27.17ID:FcOscapW 日本企業がLisp専用マシン作ったが第五世代コンピュータプロジェクトが💩で何らまともな成果をあげられなかったからね。
323デフォルトの名無しさん
2024/08/11(日) 17:42:41.08ID:7wNJGHOt 麓から山頂を目指す
foldl: 徒歩で登り切ったら滑り台で向こう側へ降りてゴンドラで再び山頂へ戻りゴール
foldr: ゴンドラでいきなり山頂へ。そこから向こうの麓まで滑り台で降り、そこから山頂へ徒歩で戻る。但しある場合は滑り台を途中で降りてそこから山頂へ徒歩で戻ってゴールにしてもよい
こういうこと?
foldl: 徒歩で登り切ったら滑り台で向こう側へ降りてゴンドラで再び山頂へ戻りゴール
foldr: ゴンドラでいきなり山頂へ。そこから向こうの麓まで滑り台で降り、そこから山頂へ徒歩で戻る。但しある場合は滑り台を途中で降りてそこから山頂へ徒歩で戻ってゴールにしてもよい
こういうこと?
324デフォルトの名無しさん
2024/08/12(月) 21:44:35.95ID:EAbaqMlq Preludeのライブラリドキュメントのページが最新のChromeでよく応答なしになるんですが!
現代PCでもプチフリを起こすページとか凄いですね!(怒)
現代PCでもプチフリを起こすページとか凄いですね!(怒)
325デフォルトの名無しさん
2024/08/13(火) 01:44:03.00ID:3Ko8/FbA >>324
hoogle使いんさい。
hoogle使いんさい。
326デフォルトの名無しさん
2024/08/13(火) 01:45:16.10ID:3Ko8/FbA327デフォルトの名無しさん
2024/08/15(木) 10:15:40.11ID:oieuoNWz yesod を導入しようとして調べているのですが、今は stack 前提で cabal での利用は考えられていないのでしょうか?
導入記事では cabal の記述がありますが、
yesod init すると stack new 使えと表示が出ます。
導入記事では cabal の記述がありますが、
yesod init すると stack new 使えと表示が出ます。
328デフォルトの名無しさん
2024/08/15(木) 10:30:38.08ID:oieuoNWz yesod-bin 1.6.2.3 です
329デフォルトの名無しさん
2024/08/19(月) 21:35:37.73ID:CkMOJkdv rambda.jsのfold相当の関数を教えてください
330デフォルトの名無しさん
2024/08/24(土) 05:56:24.20ID:WHJg2+SV 今ってghcupの時代じゃないの?
久しぶりにHaskell書こうと戻ってきた浦島太郎がstackを最新にしようと思ったら
ghcupとか紹介されてミーハーだから飛びついたわ
久しぶりにHaskell書こうと戻ってきた浦島太郎がstackを最新にしようと思ったら
ghcupとか紹介されてミーハーだから飛びついたわ
331デフォルトの名無しさん
2024/08/24(土) 07:38:35.09ID:E4GXjFrz Gカップ、ハアーハアー
332デフォルトの名無しさん
2024/08/28(水) 21:41:00.96ID:HNkudrYA Youtubeでしばらくの間丁寧にHaskellを解説していた人が
ある日「やってらんね、俺はもうHaskellでプログラミングしない」と宣言してHaskellから離れたのを見て
所詮その程度の言語なんだなとガッカリした
ある日「やってらんね、俺はもうHaskellでプログラミングしない」と宣言してHaskellから離れたのを見て
所詮その程度の言語なんだなとガッカリした
333デフォルトの名無しさん
2024/08/28(水) 23:56:40.97ID:FNkSebMV >>332
Haskellはモナドの実証言語という側面が強いから、モナドは結局よくわからないものという結論に達した今では話題もないし、Haskellで視聴回数稼げないんじゃない。
Haskellはモナドの実証言語という側面が強いから、モナドは結局よくわからないものという結論に達した今では話題もないし、Haskellで視聴回数稼げないんじゃない。
334デフォルトの名無しさん
2024/08/29(木) 12:50:10.24ID:D5XAFbVY 自作ライブラリの(+)とPrelude.+が被って、Prelude.+使いたい時一々修飾するの面倒くさいしコードも汚くなります
被った時はデフォルトでPrelude.+を使うよって指定することはできないのですか?
被った時はデフォルトでPrelude.+を使うよって指定することはできないのですか?
335デフォルトの名無しさん
2024/08/29(木) 12:53:31.30ID:1jszJs3n >>332
+1
+1
336デフォルトの名無しさん
2024/08/29(木) 12:54:42.14ID:1jszJs3n >>334
自作の方を修飾
自作の方を修飾
337デフォルトの名無しさん
2024/08/29(木) 14:06:11.00ID:gtm/5H5m338デフォルトの名無しさん
2024/08/29(木) 14:06:50.30ID:gtm/5H5m 使用例:
1 .+ 1
>2
1 .+ 1
>2
339デフォルトの名無しさん
2024/08/29(木) 16:27:15.59ID:Nq0HdWD9 やだやだ!修飾したくない!
どっちの+か特定して自動的に選択してよう!
どっちの+か特定して自動的に選択してよう!
340デフォルトの名無しさん
2024/08/29(木) 16:57:49.70ID:YXIyrRhD 何の自作型だか知らんがSemigroup実装して(<>)にでもすれば
341デフォルトの名無しさん
2024/08/29(木) 17:40:12.63ID:aIGVGYPU 就職しろよ
342デフォルトの名無しさん
2024/08/29(木) 20:48:46.38ID:gtm/5H5m >>339
独自の(+)を自動で使い分けてもらうにはNum型クラスのインスタンスにする必要があるけど、それでも見分けるには型が違わないといけない。
独自の(+)は、独自の型を受け取りますか?
そうじゃないとPreludeの(+)と判別する術がないけど。
独自の(+)を自動で使い分けてもらうにはNum型クラスのインスタンスにする必要があるけど、それでも見分けるには型が違わないといけない。
独自の(+)は、独自の型を受け取りますか?
そうじゃないとPreludeの(+)と判別する術がないけど。
343デフォルトの名無しさん
2024/08/29(木) 20:51:12.20ID:gtm/5H5m あ、できれば型宣言を見せて貰えるとアドバイスしやすい。
344デフォルトの名無しさん
2024/08/31(土) 21:17:53.38ID:XbdVGeAf ワカランドとして .+. と .-. と .*. を定義することにしました。しかし本質的に解決するにはNumクラスのインスタンス宣言するらしいですね。
しかし独自型同士の+と-、Rationalとの*、Rationalとの/はできますが、
独自型同士の*、独自型同士の/は定義不可能です。
従ってNumクラスになることはできませんでした。
結局どうしていいか判らんどからのワカランドで落ち着きました。
しかし独自型同士の+と-、Rationalとの*、Rationalとの/はできますが、
独自型同士の*、独自型同士の/は定義不可能です。
従ってNumクラスになることはできませんでした。
結局どうしていいか判らんどからのワカランドで落ち着きました。
345デフォルトの名無しさん
2024/09/03(火) 18:48:39.95ID:yXFMfbtr もしかしてData.Mapって遅い?
一日中検索かけてるような処理なら、もうMapを卒業するべきときか・・・
一日中検索かけてるような処理なら、もうMapを卒業するべきときか・・・
346デフォルトの名無しさん
2024/09/04(水) 00:16:15.77ID:r/FGXedG Data.Mapというより、リストが遅い。
とりあえずコンパイルの際にghc -O2とかghc -O3とかの最適化掛けてみる。
それでもなお速さを求めるなら、ByteStringとか使うと良い。
もしくは、正格評価版HaskellことIdris 2やRustに乗り換える。
(Idris1と2で互換性が無いらしく、別言語扱いされてる)
Haskellで速さを求めるとバッドノウハウが増えて本末転倒になる。
(そこまで苦労するなら素直に速い言語覚えた方が楽。それでも9.10.1はC#並みにはなった?かな?)
とりあえずコンパイルの際にghc -O2とかghc -O3とかの最適化掛けてみる。
それでもなお速さを求めるなら、ByteStringとか使うと良い。
もしくは、正格評価版HaskellことIdris 2やRustに乗り換える。
(Idris1と2で互換性が無いらしく、別言語扱いされてる)
Haskellで速さを求めるとバッドノウハウが増えて本末転倒になる。
(そこまで苦労するなら素直に速い言語覚えた方が楽。それでも9.10.1はC#並みにはなった?かな?)
347デフォルトの名無しさん
2024/09/04(水) 15:29:34.52ID:ZA+d8/X/ リストが遅い、しかし多くのデータ構造の構築はリストから(fromList)。
つまりコンストラクション回数をいかに減らすか、一度コンストラクトした物を使いまわすか、ということですか
つまりコンストラクション回数をいかに減らすか、一度コンストラクトした物を使いまわすか、ということですか
348デフォルトの名無しさん
2024/09/04(水) 16:12:14.21ID:LSV34QaC lisp系言語はリストの操作が速いのに…
349デフォルトの名無しさん
2024/09/04(水) 22:00:37.92ID:r/FGXedG350デフォルトの名無しさん
2024/09/04(水) 22:22:04.95ID:r/FGXedG351デフォルトの名無しさん
2024/09/05(木) 00:27:39.10ID:mpd8c2G1 普段使いって何してんの
エロ画像収集とか?
エロ画像収集とか?
352デフォルトの名無しさん
2024/09/05(木) 04:50:37.33ID:l0HQxOqp PythonやPerlの代わりにテキスト処理に使ってる。
353デフォルトの名無しさん
2024/09/05(木) 18:56:54.85ID:k3Tfomjz >>351
それ面白いと思って書き込んでんの?
それ面白いと思って書き込んでんの?
354デフォルトの名無しさん
2024/09/06(金) 09:50:34.80ID:zzPaKLb6 ブラウザでリンク画像が http://host/hoge.php?hage=fuga.jpg
みたいになってて最終的に jpg が表示されてるんだけど
http://host/hoge.php?hage=fuga.jpg をブラウザで開いても
jpg じゃなくて jpg ファイルのイメージがテキストファイルみたく表示される
こういうのは hoge.php の造りが悪い(たぶんhttpヘッダーが可笑しい)んだろうけど
じゃあなんで元頁では画像が表示されてたのかとか疑問は残る
それはともかく欲しいのは jpg ファイルなので
ブラウザに頼らずダウンローダーを描いた
みたいになってて最終的に jpg が表示されてるんだけど
http://host/hoge.php?hage=fuga.jpg をブラウザで開いても
jpg じゃなくて jpg ファイルのイメージがテキストファイルみたく表示される
こういうのは hoge.php の造りが悪い(たぶんhttpヘッダーが可笑しい)んだろうけど
じゃあなんで元頁では画像が表示されてたのかとか疑問は残る
それはともかく欲しいのは jpg ファイルなので
ブラウザに頼らずダウンローダーを描いた
355デフォルトの名無しさん
2024/09/06(金) 09:52:13.17ID:zzPaKLb6 補足
修正前: jpg ファイルのイメージ
正: jpg ファイルのバイナリデータ
修正前: jpg ファイルのイメージ
正: jpg ファイルのバイナリデータ
356デフォルトの名無しさん
2024/09/07(土) 19:33:25.03ID:9PXNQc4Q 長大な処理となる関数を実行途中にRAM使用量が嵩んでいくとします
中には解放できる部分もある場合について、
このままガベコレせずに進んでいったらいずれOSが『君にはもうRAM貸せないよ』と言ってくるでしょうが、ランタイムシステムは
@その時になってようやく解放できる場所がないか探し出す
@-i 今必要な最低限の確保ができたら即そこに記録して終わり
@-ii 強制的にminorGCを発動して、即そこに記録して終わり
@-iii 強制的にMajorGCを発動して、即そこに記録して終わり
@-iv 強制的にBlockingMajorGCを発動して、即そこに記録して終わり
@-v もはや解放できる場所は見つからないと判断したら例外終了
A何もせず例外終了する
Bその他
どれですか?
中には解放できる部分もある場合について、
このままガベコレせずに進んでいったらいずれOSが『君にはもうRAM貸せないよ』と言ってくるでしょうが、ランタイムシステムは
@その時になってようやく解放できる場所がないか探し出す
@-i 今必要な最低限の確保ができたら即そこに記録して終わり
@-ii 強制的にminorGCを発動して、即そこに記録して終わり
@-iii 強制的にMajorGCを発動して、即そこに記録して終わり
@-iv 強制的にBlockingMajorGCを発動して、即そこに記録して終わり
@-v もはや解放できる場所は見つからないと判断したら例外終了
A何もせず例外終了する
Bその他
どれですか?
357デフォルトの名無しさん
2024/09/07(土) 19:35:13.52ID:9PXNQc4Q 文字化けしちゃいました。文字化けした?は1、2,3だと思ってください
358デフォルトの名無しさん
2024/09/08(日) 00:17:59.58ID:m7MeNrY2 loop s なんちゃらかんちゃら
= do
let final_score = long_thunk_score + s
s' = sをなんちゃらかんちゃら
modify' $ Data.Map.Strict.insert key final_score
unsafePerformIO ( evaluate $ rnf final_score ) `seq` loop s' なんちゃらかんちゃら
このStateモナドは、final_scoreは状態Mapへ挿入される時はWHNFでしょうが、直後の行で完全に評価されています
この事はマップに挿入されたfinal_scoreへ影響を与えますか?
つまりマップへ挿入済みのサンクとしての値を後からUnsafePerformIOとevaluateとrnfを組み合わせて狙ったタイミングでRNF化できますか?
= do
let final_score = long_thunk_score + s
s' = sをなんちゃらかんちゃら
modify' $ Data.Map.Strict.insert key final_score
unsafePerformIO ( evaluate $ rnf final_score ) `seq` loop s' なんちゃらかんちゃら
このStateモナドは、final_scoreは状態Mapへ挿入される時はWHNFでしょうが、直後の行で完全に評価されています
この事はマップに挿入されたfinal_scoreへ影響を与えますか?
つまりマップへ挿入済みのサンクとしての値を後からUnsafePerformIOとevaluateとrnfを組み合わせて狙ったタイミングでRNF化できますか?
359デフォルトの名無しさん
2024/09/09(月) 11:45:42.71ID:CQiqzRbc >>356
黙って動いてるフリをする
黙って動いてるフリをする
360デフォルトの名無しさん
2024/09/26(木) 23:16:42.97ID:eAiUCVhs この言語まだ息してるのか?
361デフォルトの名無しさん
2024/09/27(金) 00:41:23.43ID:ppX7mFe8 おまいらは圏論はちゃんとマスターしたか?
最近圏論のお勉強流行ってないみたいだが
最近圏論のお勉強流行ってないみたいだが
362デフォルトの名無しさん
2024/09/28(土) 08:56:06.97ID:boijaUwp そもそもHaskellに圏論必要ないよ
363デフォルトの名無しさん
2024/09/28(土) 11:20:55.86ID:szplrxFB 背景の理論を理解してないとbrainf*ckと同列のクソパズル言語にしか見えない
364デフォルトの名無しさん
2024/09/28(土) 11:30:45.96ID:D4fCa7Ze 米田の何ちゃらの辺りで心が折れて終了
365デフォルトの名無しさん
2024/09/28(土) 11:48:20.49ID:M6f6jLKS >>363
> brainf*ckと同列のクソパズル言語
話がそれるけどbrainf*ckがパズル言語なのは100%その通りだよ
しかし構文パーサー、インタープリターやトランスレーター、JITエンジンの実践入門として
丁度良いからこれだけ根強い人気なんだぜ
> brainf*ckと同列のクソパズル言語
話がそれるけどbrainf*ckがパズル言語なのは100%その通りだよ
しかし構文パーサー、インタープリターやトランスレーター、JITエンジンの実践入門として
丁度良いからこれだけ根強い人気なんだぜ
366デフォルトの名無しさん
2024/09/28(土) 20:40:40.54ID:SDDTPU1M >>361
流行ってないのか…。
個人的にはHaskellよりも圏論の方に関心が移ってるのに…。
んでも、圏論はHaskellでなくても、全てのプログラミング言語の裏側でも動いてるし、それこそ算数の裏側でも動いてる。
モナドが表に出てきてるからHaskellには圏論が必要って思うかもだけど、モナドって言わないで do形式だけ教えて知れっとしてても良いし、「こういう動きの演算子」としてモナドを紹介するだけでも良い。
受験数学とちゃんと向き合う数学みたいなものだけど、変にモナドを理解しようとすると深みにはまる。
(それはそれで楽しいけど、楽しめる人だけだよね…)
流行ってないのか…。
個人的にはHaskellよりも圏論の方に関心が移ってるのに…。
んでも、圏論はHaskellでなくても、全てのプログラミング言語の裏側でも動いてるし、それこそ算数の裏側でも動いてる。
モナドが表に出てきてるからHaskellには圏論が必要って思うかもだけど、モナドって言わないで do形式だけ教えて知れっとしてても良いし、「こういう動きの演算子」としてモナドを紹介するだけでも良い。
受験数学とちゃんと向き合う数学みたいなものだけど、変にモナドを理解しようとすると深みにはまる。
(それはそれで楽しいけど、楽しめる人だけだよね…)
367デフォルトの名無しさん
2024/09/29(日) 07:33:19.55ID:bBvJfaeS ラムダと束縛変数をマスターしなければdo記法もマスターできないのを
すっかり忘れるぐらいポイントフリーが普及してるでしょ
すっかり忘れるぐらいポイントフリーが普及してるでしょ
368デフォルトの名無しさん
2024/09/29(日) 08:45:10.72ID:3/NLN/+f コーダーが数学の学習に使える時間なんて限られている
時間や基礎知識が足らないので、難解な数学を攻略するのはほぼ不可能
大学生時CSや数学の講義で身に付けておくしかない
時間や基礎知識が足らないので、難解な数学を攻略するのはほぼ不可能
大学生時CSや数学の講義で身に付けておくしかない
369デフォルトの名無しさん
2024/09/29(日) 09:32:49.44ID:twIz68VA 難解な数学を攻略できるなら
日本ではコーダーにはならないよな
日本ではコーダーにはならないよな
370デフォルトの名無しさん
2024/09/29(日) 10:15:01.09ID:AteoOTMZ 業界入るのに難解数学不要
プログラミングにも不要
数学分からんのでgoogle入るのは無理だけど
プログラミングにも不要
数学分からんのでgoogle入るのは無理だけど
371デフォルトの名無しさん
2024/09/29(日) 11:01:25.51ID:bBvJfaeS 人工的なルールに依存するのがクソパズルだが
自然界でなおかつ野生のマウンティング的なルールにも依存しないことが数学の目的のひとつだね
自然界でなおかつ野生のマウンティング的なルールにも依存しないことが数学の目的のひとつだね
372デフォルトの名無しさん
2024/09/29(日) 20:36:16.00ID:JU2vTa1F 圏論が全てのプログラミング言語の裏で動いてるとか適当なこと書くなよ
373デフォルトの名無しさん
2024/09/30(月) 00:30:17.34ID:Kh4w53R0 >>368
高卒の自分でも理解できるんだから、難しいわけではないんだけど。
何度も出てる通り、必ずしもモナドを理解する必要はないし。
そもそも自分がプログラマーの頃だって、12-13時間働いた後も新しいプログラミング言語や数学勉強してたぞ。
(新しい仕事のために学びたくない言語に時間使う事も)
高卒が圏論みたいな大学数学学ぶには専門用語がそもそも分らんから、用語が分かるまで遡った。
(アーベル圏のアーベルが分からないレベルからのスタート)
自分に投資できないと淘汰されるぞ。
高卒の自分でも理解できるんだから、難しいわけではないんだけど。
何度も出てる通り、必ずしもモナドを理解する必要はないし。
そもそも自分がプログラマーの頃だって、12-13時間働いた後も新しいプログラミング言語や数学勉強してたぞ。
(新しい仕事のために学びたくない言語に時間使う事も)
高卒が圏論みたいな大学数学学ぶには専門用語がそもそも分らんから、用語が分かるまで遡った。
(アーベル圏のアーベルが分からないレベルからのスタート)
自分に投資できないと淘汰されるぞ。
374デフォルトの名無しさん
2024/09/30(月) 00:59:39.85ID:Kh4w53R0 >>372
適当じゃない。
モナドは(主に)逐次処理に現れる構造なので、Haskellのような遅延評価で逐次処理自体を作らないといけない(逐次処理をエミュレートするためのモナド)言語でない限り、意識することすらない。
(だからC言語で言う i = 0; の「;」とか言われる)
適当じゃない。
モナドは(主に)逐次処理に現れる構造なので、Haskellのような遅延評価で逐次処理自体を作らないといけない(逐次処理をエミュレートするためのモナド)言語でない限り、意識することすらない。
(だからC言語で言う i = 0; の「;」とか言われる)
375デフォルトの名無しさん
2024/09/30(月) 03:08:44.15ID:g+sPZSfB376デフォルトの名無しさん
2024/09/30(月) 12:40:29.07ID:+8KmLjt4 圏論の極々一部のモナドを主語をデカくして圏論ガーとか言ってる人は何も分かってないんだなと思うけどね
俺みたいに数学かじってた人からすると
圏論を勉強すると「あ、この概念はこの分野のこれのことか」ってわかるけど
そうじゃない人は何のことを言ってるのかわからんと思う
専門家でも自分の担当外の圏なんて知らないのに
圏論という括りで語ろうとする人はそういうのすら理解してない
俺みたいに数学かじってた人からすると
圏論を勉強すると「あ、この概念はこの分野のこれのことか」ってわかるけど
そうじゃない人は何のことを言ってるのかわからんと思う
専門家でも自分の担当外の圏なんて知らないのに
圏論という括りで語ろうとする人はそういうのすら理解してない
377デフォルトの名無しさん
2024/09/30(月) 13:52:28.73ID:CD9F70e/ やっと普通の人が出てきて安心した
378デフォルトの名無しさん
2024/09/30(月) 13:59:18.70ID:pkON+G7q >>376
数学者向けの圏論の教科書の応用、具体例は全て数学。
数学知らない人が読んでも分かるわけがない。
応用、具体例、演習をCSの分野から採った教科書が望まれるが、書くのが難しい上に面白くするのも困難。
大体CSすらちゃんと修めてないエンジニアはやはり読めない。
CS自体ベースに位相、代数、グラフ理論と数学使うし。
数学者向けの圏論の教科書の応用、具体例は全て数学。
数学知らない人が読んでも分かるわけがない。
応用、具体例、演習をCSの分野から採った教科書が望まれるが、書くのが難しい上に面白くするのも困難。
大体CSすらちゃんと修めてないエンジニアはやはり読めない。
CS自体ベースに位相、代数、グラフ理論と数学使うし。
379デフォルトの名無しさん
2024/09/30(月) 14:09:03.81ID:rwCIuc1C 趣味でやる人に良くいるんだよね。
応用各分野に囚われずに、圏論そのものを学習したい、一般圏論を研究したいって人。
これは数学で言うと、集合論と同じく数学基礎論の分野。
応用各分野に囚われずに、圏論そのものを学習したい、一般圏論を研究したいって人。
これは数学で言うと、集合論と同じく数学基礎論の分野。
380デフォルトの名無しさん
2024/09/30(月) 19:05:45.94ID:8C0MP56i 操作的意味論とか表示的意味論でプログラムを数学の話にして、その数学を圏論で整理するって話
だからアーベル圏とか具体的な圏はあんま出てこない。
やるとすれば
デカルト閉圏:ランベックがλ計算のモデルになると発見して関数型プログラミング的に重要
クライスリ圏:Moggiが計算効果をカプセル化したときの根拠の圏
ローベア理論:代数的効果をちゃんと理解するときは必要らしい。操作的意味論と表示的意味論と同じようにモナドの理論と妥当性が成り立つようだ。
ぐらいじゃね。
だからアーベル圏とか具体的な圏はあんま出てこない。
やるとすれば
デカルト閉圏:ランベックがλ計算のモデルになると発見して関数型プログラミング的に重要
クライスリ圏:Moggiが計算効果をカプセル化したときの根拠の圏
ローベア理論:代数的効果をちゃんと理解するときは必要らしい。操作的意味論と表示的意味論と同じようにモナドの理論と妥当性が成り立つようだ。
ぐらいじゃね。
381デフォルトの名無しさん
2024/09/30(月) 21:09:21.28ID:CVtPTYpb じゃあラムダ計算(のモデル)だけを考えよう
タプルや代数的データ型は使わない
それでもモナドの具体例を作れるのを知ってるのが専門バカ
知らないのが一般国民だ
タプルや代数的データ型は使わない
それでもモナドの具体例を作れるのを知ってるのが専門バカ
知らないのが一般国民だ
382デフォルトの名無しさん
2024/09/30(月) 21:29:13.05ID:8C0MP56i 一般国民。
λ計算のモデルでモナド作ってなにかいいことあるの?計算効果結局表現できないんじゃ?
拡張してcomputational lambda calculusやるって話?
λ計算のモデルでモナド作ってなにかいいことあるの?計算効果結局表現できないんじゃ?
拡張してcomputational lambda calculusやるって話?
383デフォルトの名無しさん
2024/09/30(月) 21:47:09.45ID:CVtPTYpb ないんじゃないか
ただ「具体例を出せば、いいことがある」とは誰も言ってない
というファクトをチェックするのは悪いことではない
ただ「具体例を出せば、いいことがある」とは誰も言ってない
というファクトをチェックするのは悪いことではない
384デフォルトの名無しさん
2024/09/30(月) 21:53:56.34ID:8C0MP56i いいこと(メリット)があるから具体例が作られると思うんだが。
それは単に具体例の適用が間違ってるって話じゃね?
なんとなく作れるから群構造作ってみましたとかとか目的不在で作ったらそら何がいいかわからんし。
モナドだったら、各計算効果を圏(クライスリ圏)の中に閉じ込めることに成功しました(カプセル化)。
計算効果は強モナドの構造を取っているようです(計算効果の研究のとっかかり)。
みたいないいことあるから流行るんでしょ。
それは単に具体例の適用が間違ってるって話じゃね?
なんとなく作れるから群構造作ってみましたとかとか目的不在で作ったらそら何がいいかわからんし。
モナドだったら、各計算効果を圏(クライスリ圏)の中に閉じ込めることに成功しました(カプセル化)。
計算効果は強モナドの構造を取っているようです(計算効果の研究のとっかかり)。
みたいないいことあるから流行るんでしょ。
385デフォルトの名無しさん
2024/10/01(火) 04:04:03.18ID:PZ96E01/ 別にそれ圏論を持ち出す必要ないよね
ハイおしまい
ハイおしまい
386デフォルトの名無しさん
2024/10/01(火) 09:39:15.78ID:KbL1rq/V >なんとなく作れるから群構造作ってみました
ルービックキューブのことか
ルービックキューブのことか
387デフォルトの名無しさん
2024/10/01(火) 09:46:07.52ID:y60InQ2q 数学屋さんもね
研究では圏を使うが
学生に教えるときは
圏を記述に使わず教えたりする
研究では圏を使うが
学生に教えるときは
圏を記述に使わず教えたりする
388デフォルトの名無しさん
2024/10/01(火) 19:23:20.12ID:7kn4RxVI 圏論の話題になったから振ったのに。まあいいよ。
圏論根拠で(ソフトウェア工学的にじゃなくて)数学的にカプセル化が実現されてるってすごい
ことだと思うけどね。
>ルービックキューブのことか
ルービックキューブ解くという目的あるんなら構築する意味あるんじゃない。
圏論根拠で(ソフトウェア工学的にじゃなくて)数学的にカプセル化が実現されてるってすごい
ことだと思うけどね。
>ルービックキューブのことか
ルービックキューブ解くという目的あるんなら構築する意味あるんじゃない。
389デフォルトの名無しさん
2024/10/01(火) 19:34:54.43ID:YZm15ve9 群持ち出したところで解けないよ
390デフォルトの名無しさん
2024/10/01(火) 20:18:43.32ID:PZ96E01/ 圏論がプログラミングの問題解決に寄与するわけないのにね
ただ当てはめてみたってだけのことを過大評価しすぎ
ただ当てはめてみたってだけのことを過大評価しすぎ
391デフォルトの名無しさん
2024/10/01(火) 20:52:10.03ID:u1x9FxNe 雪田修一の「圏論入門 Haskellで計算する 具体例から」ってどうなん?
392デフォルトの名無しさん
2024/10/01(火) 21:10:04.55ID:YpLGkLDy 板チ
目的と手段を混同したら予選敗退
目的と手段を混同したら予選敗退
393デフォルトの名無しさん
2024/10/01(火) 21:16:26.45ID:7kn4RxVI どうなんって何を知るのに?出たときに立ち読みしただけだけど。
394デフォルトの名無しさん
2024/10/01(火) 21:16:56.98ID:Ig6Tf0ue395デフォルトの名無しさん
2024/10/01(火) 21:38:18.13ID:Ig6Tf0ue 圏論をやりたいならまず代数学をやるべき
それだけでだいぶ見通しが違う
それだけでだいぶ見通しが違う
396デフォルトの名無しさん
2024/10/01(火) 21:42:08.00ID:4kH314XL >>390
モナドの効用で自分の把握してるのは
・数学やHaskellの様な遅延評価の場合、逐次処理を表現できる
(これは変数を使いまわさない場合は、関数合成で十分だが、変数を使いまわすときはモナドじゃないと使いまわせない)
・副作用のある関数を使っても参照透明性は保たれている
・モナドは入れ物前提の概念なので、空の状態を使って例外処理をまとめることができる
正直、普通のプログラミング言語にも役立ちそうな3つ目は実感はしてないけど、ネットで例外処理よりモナドの方が優秀っぽい記事を読んだ
2番目もマルチスレッドとか最適化には役に立ちそうではある
(マルチスレッドなら正格評価版HaskellのIdris2やRustだと思うが)
モナドの効用で自分の把握してるのは
・数学やHaskellの様な遅延評価の場合、逐次処理を表現できる
(これは変数を使いまわさない場合は、関数合成で十分だが、変数を使いまわすときはモナドじゃないと使いまわせない)
・副作用のある関数を使っても参照透明性は保たれている
・モナドは入れ物前提の概念なので、空の状態を使って例外処理をまとめることができる
正直、普通のプログラミング言語にも役立ちそうな3つ目は実感はしてないけど、ネットで例外処理よりモナドの方が優秀っぽい記事を読んだ
2番目もマルチスレッドとか最適化には役に立ちそうではある
(マルチスレッドなら正格評価版HaskellのIdris2やRustだと思うが)
397デフォルトの名無しさん
2024/10/01(火) 22:05:17.67ID:4kH314XL 圏論全体だと…当たり前のことを構造として研究してるだけなので、圏論というよりはHaskellの型クラスとの合わせ技で関手(Functor)の方がfmap的なのを他の言語にも導入すれば役に立つかも
圏論の関手を一言で言えば(関数も含めた)型変換
(Hakellだと入れ物前提にすることで、関数ごと型変換を実現。本来はもっと柔軟)
自然変換は一言で言えば単位変換とか、大文字小文字の変換
圏論の関手を一言で言えば(関数も含めた)型変換
(Hakellだと入れ物前提にすることで、関数ごと型変換を実現。本来はもっと柔軟)
自然変換は一言で言えば単位変換とか、大文字小文字の変換
398デフォルトの名無しさん
2024/10/01(火) 22:16:21.15ID:4kH314XL モノイドは条件が結合法則だけなので、ほぼ結合法則そのものがモノイド
(その割には繰り返しとか数え上げに現れる構造)
そしてモナドも構造はそっくりなので、入れ物前提のモノイドとも考えられる
(モナドの再帰はループ処理でスタックを消費しないし、数え上げは逐次処理と考えられる)
(その割には繰り返しとか数え上げに現れる構造)
そしてモナドも構造はそっくりなので、入れ物前提のモノイドとも考えられる
(モナドの再帰はループ処理でスタックを消費しないし、数え上げは逐次処理と考えられる)
399デフォルトの名無しさん
2024/10/01(火) 23:08:20.75ID:KbL1rq/V バグを無くすこと自体が目的になりがちなのが数学とプログラムなんだよね
真の目的のため、デバッグを二の次にするやつが正しいと言われても・・・
それって証明とかあるんですか
真の目的のため、デバッグを二の次にするやつが正しいと言われても・・・
それって証明とかあるんですか
400デフォルトの名無しさん
2024/10/01(火) 23:21:35.19ID:syLuNokt401デフォルトの名無しさん
2024/10/01(火) 23:25:15.70ID:syLuNokt402デフォルトの名無しさん
2024/10/02(水) 05:35:22.65ID:OAhBXB+m やっぱり数学的に表現してみただけってことか
まぁ実際のプログラミングに利益はないわな
まぁ実際のプログラミングに利益はないわな
403デフォルトの名無しさん
2024/10/02(水) 07:50:08.23ID:AFS53MaU >>400
よくよく考えたら特別な事じゃないんだけど、普通のプログラミング言語でも大文字・小文字の変換関数を自作するってなったら、文字をInt型に変換して処理する。
それって文字の圏で直接大文字小文字の変換するを作れない場合、一旦整数の圏を経由する関数を作る。
A(a) → B(a)
↓ ↓
A(A) → B(A)
可換図のA(a) → B(a)の逆射が作れれば、B(a) → B(A)が作れる。
ほら、分かってみれば「なーんだ。そんなことか」でしょ?
よくよく考えたら特別な事じゃないんだけど、普通のプログラミング言語でも大文字・小文字の変換関数を自作するってなったら、文字をInt型に変換して処理する。
それって文字の圏で直接大文字小文字の変換するを作れない場合、一旦整数の圏を経由する関数を作る。
A(a) → B(a)
↓ ↓
A(A) → B(A)
可換図のA(a) → B(a)の逆射が作れれば、B(a) → B(A)が作れる。
ほら、分かってみれば「なーんだ。そんなことか」でしょ?
404デフォルトの名無しさん
2024/10/02(水) 07:53:32.91ID:AFS53MaU この場合、整数同士の足し算に対応する、文字同士の足し算が作れる。
(ただし、整数と文字列で集合の大きさを合わせる必要がある。0-25とか1-26とかで循環する集合)
(ただし、整数と文字列で集合の大きさを合わせる必要がある。0-25とか1-26とかで循環する集合)
405デフォルトの名無しさん
2024/10/02(水) 07:55:35.67ID:AFS53MaU んで、プログラマーはいちいち集合を合わせないで、エラー処理だったり循環リスト作ったりで対応するわけだぬ。
406デフォルトの名無しさん
2024/10/02(水) 08:30:24.33ID:VSz9kg2E 数学の圏論テキストではカリー化の操作は良く使うが、カリー化の名前を付けて引用することはまず無いね。
407デフォルトの名無しさん
2024/10/02(水) 08:47:20.09ID:wonXK6QE408デフォルトの名無しさん
2024/10/02(水) 09:21:51.83ID:ZmuRtoMU 大文字の文字列の型から小文字の文字列の型への変換と考えると簡単
409デフォルトの名無しさん
2024/10/02(水) 09:24:29.51ID:ZmuRtoMU リスト関手から集合関手への自然変換も分かりやすい。
410デフォルトの名無しさん
2024/10/02(水) 10:25:28.13ID:xCLOcr8o すまん嘘を書いた
自然変換では無くリストの圏から集合の圏への関手だった
自然変換では無くリストの圏から集合の圏への関手だった
411デフォルトの名無しさん
2024/10/02(水) 10:27:20.94ID:ZmuRtoMU 大文字列、小文字列も同様に間違い
412デフォルトの名無しさん
2024/10/02(水) 16:24:48.26ID:H02uk4bf413デフォルトの名無しさん
2024/10/02(水) 20:27:37.99ID:AFS53MaU >>407
圏論の自然変換だと文字コード前提じゃないので、[0..25] = ['a'..'z'] = ['A'..'Z']ってする。
んで、大文字と小文字は同じ文字の圏、[0..25]は自然数の圏とする。
lCharToInt c = (length.takeWhile (c /=)) ['a'..'z'] -- 小文字からIntへの変換(関手)
uCharToInt c = (length.takeWhile (c /=)) ['A'..'Z'] -- 大文字からIntへの変換(関手)
toLChar = (['a'..'z']!!) -- Intから小文字への変換(関手)
toUChar = (['A'..'Z']!!) -- Intから大文字への変換(関手)
mytoLower = toLChar.uCharToInt -- 大文字から小文字への変換(自然変換)
mytoUpper = toUChar.lCharToInt -- 小文字から大文字への変換(自然変換)
でも、普通のプログラミング言語のtoLower, toUpperも、Char型を圏とみれば同じ。
可換にするのは面倒くさい上に効率悪いけど、そういう関手を作ろうと思えば作れる。
圏論の自然変換だと文字コード前提じゃないので、[0..25] = ['a'..'z'] = ['A'..'Z']ってする。
んで、大文字と小文字は同じ文字の圏、[0..25]は自然数の圏とする。
lCharToInt c = (length.takeWhile (c /=)) ['a'..'z'] -- 小文字からIntへの変換(関手)
uCharToInt c = (length.takeWhile (c /=)) ['A'..'Z'] -- 大文字からIntへの変換(関手)
toLChar = (['a'..'z']!!) -- Intから小文字への変換(関手)
toUChar = (['A'..'Z']!!) -- Intから大文字への変換(関手)
mytoLower = toLChar.uCharToInt -- 大文字から小文字への変換(自然変換)
mytoUpper = toUChar.lCharToInt -- 小文字から大文字への変換(自然変換)
でも、普通のプログラミング言語のtoLower, toUpperも、Char型を圏とみれば同じ。
可換にするのは面倒くさい上に効率悪いけど、そういう関手を作ろうと思えば作れる。
414デフォルトの名無しさん
2024/10/02(水) 20:45:45.19ID:AFS53MaU 可換図にすると
Char(小文字)
⇗
Int ⇑toL ⇓toU
⇘
Char(大文字)
ここで、小文字→Int, 大文字→Intが作れればtoLower, toUpperを直接作らなくても、関手の合成で作れる。
Char(小文字)
⇗
Int ⇑toL ⇓toU
⇘
Char(大文字)
ここで、小文字→Int, 大文字→Intが作れればtoLower, toUpperを直接作らなくても、関手の合成で作れる。
415デフォルトの名無しさん
2024/10/02(水) 20:53:28.38ID:4E8lSXKR 出番ですよ >>399
416デフォルトの名無しさん
2024/10/02(水) 21:03:02.82ID:AFS53MaU 圏論の地平線でも書かれていたけど、圏論は直接的に役に立つというより、発想の転換の源泉になるそうな。
(なので、別に圏論分かったから偉いとかない)
(なので、別に圏論分かったから偉いとかない)
417デフォルトの名無しさん
2024/10/02(水) 21:18:36.03ID:JUMm5MLB 数学の研究には有用かも知れないが
プログラミングで
直接役に立つようなことはまず無い
プログラミングで
直接役に立つようなことはまず無い
418デフォルトの名無しさん
2024/10/02(水) 21:42:50.80ID:Xrjxo4NT どっ白け
419デフォルトの名無しさん
2024/10/02(水) 21:51:30.73ID:OPLMo7z3 プログラミング言語もどんどん数学に寄せているし、上のカキコみたいにプログラムの記述を
そのまま数学的対象とみなせるように改造していってると思う。本来は別物と考えるべきだと思う。
数学の研究といってもプログラム意味論の研究で、プログラムを数学の世界に写像したら
どう表現できるかということを研究していると言えるんじゃないかと思う。
数学の世界には、式の評価途中に発生する副作用といった概念がないので、現実のプログラムを
そのまま数学の世界に移そうと思ってもできないことの方が多い。
計算効果を圏論的に表現できたというのは、そういうプログラミング言語の数学化の一端みたいな
もんだと思う。
そのまま数学的対象とみなせるように改造していってると思う。本来は別物と考えるべきだと思う。
数学の研究といってもプログラム意味論の研究で、プログラムを数学の世界に写像したら
どう表現できるかということを研究していると言えるんじゃないかと思う。
数学の世界には、式の評価途中に発生する副作用といった概念がないので、現実のプログラムを
そのまま数学の世界に移そうと思ってもできないことの方が多い。
計算効果を圏論的に表現できたというのは、そういうプログラミング言語の数学化の一端みたいな
もんだと思う。
420デフォルトの名無しさん
2024/10/02(水) 22:00:14.12ID:YWEZQEUD 副作用ってどうでもよくね
Haskellとかだとそもそも副作用ないし
Haskellとかだとそもそも副作用ないし
421デフォルトの名無しさん
2024/10/02(水) 22:12:34.31ID:OPLMo7z3 現実のプログラムだと式を評価する途中で発生する副作用というのは普通だけれど、
これを表示的意味論、操作的意味論で数学の世界に写そうと思うと途端に難しくなる。
数学で式の途中に文字列をディスプレイに映し出す、みたいな概念はないから。
それを整理して副作用と呼んでも差し支えない概念を提唱してHaskellに実装しているんだよ。
実際、IOモナドの圏論的定式みるとこれが副作用?という表式してる。
全部後回しにしてフラッシュするというアイディアみたい。副作用をプログラムの最終局面で
実行しているから、式の評価途中の参照透明性も壊さない。なるほど、って感じ。
これを表示的意味論、操作的意味論で数学の世界に写そうと思うと途端に難しくなる。
数学で式の途中に文字列をディスプレイに映し出す、みたいな概念はないから。
それを整理して副作用と呼んでも差し支えない概念を提唱してHaskellに実装しているんだよ。
実際、IOモナドの圏論的定式みるとこれが副作用?という表式してる。
全部後回しにしてフラッシュするというアイディアみたい。副作用をプログラムの最終局面で
実行しているから、式の評価途中の参照透明性も壊さない。なるほど、って感じ。
422デフォルトの名無しさん
2024/10/02(水) 22:20:07.75ID:sFAdPyYV ID:OPLMo7z3 = ID:AFS53MaU 本人か同レベル
複おじってレベル
複おじってレベル
423デフォルトの名無しさん
2024/10/02(水) 22:24:19.37ID:YWEZQEUD 途端に難しくなるか?
副作用のない計算に変換する手順が教科書に書いてあるはずだが?
副作用のない計算に変換する手順が教科書に書いてあるはずだが?
424デフォルトの名無しさん
2024/10/02(水) 22:29:49.51ID:OPLMo7z3425デフォルトの名無しさん
2024/10/02(水) 22:43:26.42ID:+kVmY7U4426デフォルトの名無しさん
2024/10/02(水) 22:46:45.28ID:+kVmY7U4427デフォルトの名無しさん
2024/10/02(水) 22:51:00.95ID:OPLMo7z3 定義が何もないのに何も言えるわけないじゃん。
数学でこういうものを定義します、これをプログラムのこれこれと対応付けます。
てプロセスないじゃん。
数学でこういうものを定義します、これをプログラムのこれこれと対応付けます。
てプロセスないじゃん。
428デフォルトの名無しさん
2024/10/02(水) 22:52:03.28ID:YWEZQEUD429デフォルトの名無しさん
2024/10/02(水) 22:55:13.15ID:+kVmY7U4430デフォルトの名無しさん
2024/10/02(水) 22:56:24.21ID:OPLMo7z3 いや。プログラム意味論の本結構探し回ったけど副作用の記述は漠然としてて
扱えないわけじゃないらしいけど、具体的な変換なんて見たことない。
ちょうど伝統的なプログラム意味論で副作用どう扱われているか調べているんだ。
なんて本に書いてありましたか?
扱えないわけじゃないらしいけど、具体的な変換なんて見たことない。
ちょうど伝統的なプログラム意味論で副作用どう扱われているか調べているんだ。
なんて本に書いてありましたか?
431デフォルトの名無しさん
2024/10/02(水) 23:02:49.62ID:YWEZQEUD どれにでも書いてあるだろ、whileプログラムをラムダ計算に変換する手順とか書いてないなんてことがあるわけがない
432デフォルトの名無しさん
2024/10/02(水) 23:06:08.21ID:OPLMo7z3 なんだ。いや聞きたいのは入出力とかの副作用だよ。
433デフォルトの名無しさん
2024/10/02(水) 23:17:44.98ID:YWEZQEUD 入出力なんて代入に比べたら自明だろ…
そんなのいちいち教科書に書くかよ
そんなのいちいち教科書に書くかよ
434デフォルトの名無しさん
2024/10/02(水) 23:26:30.50ID:OPLMo7z3 書いてないのは自明だからではなくて、研究の方向性がどう転ぶかわからないからだと思う。
表示的意味論も出た当時の文献では副作用について語ってることが多い。
現代的な本になるほどD∞モデルつくってはいおしまいで数学的にきれいなところしかやらない。
表示的意味論も出た当時の文献では副作用について語ってることが多い。
現代的な本になるほどD∞モデルつくってはいおしまいで数学的にきれいなところしかやらない。
435デフォルトの名無しさん
2024/10/02(水) 23:36:01.67ID:JUMm5MLB プログラムの仕様とその証明を数学で記述する本にあるだろうね。
436デフォルトの名無しさん
2024/10/02(水) 23:37:10.87ID:YWEZQEUD どこが非自明なのかさっぱりわからん
代入と違って入出力は垂れ流しだし、入出力は代入の特別な場合だろ
代入と違って入出力は垂れ流しだし、入出力は代入の特別な場合だろ
437デフォルトの名無しさん
2024/10/02(水) 23:46:11.64ID:OPLMo7z3 >>435
ホーア論理とか公理的意味論か。いやそれはないな。あっても一般に適用できないし。
>>436
関数型プログラミングだとプログラムをλ式に対応させて、プログラムの実行をそのλ式の簡約に
対応させるというのが理想的なモデルとして想定されることが多いと思う。
でもλ式はλ項からλ項への対応でしかないから、λ項を値(value)と呼ぶとすると
value から valueへの数学的関数でしかない。これには入出力とかの副作用を表現する余地がない。
つまり、
入出力があるプログラム→value から valueへの数学的関数
という対応付けをすると、入出力という特徴が数学世界では失われてしまう。
という難問があった、けどモナドで一つ解答が出た。
ホーア論理とか公理的意味論か。いやそれはないな。あっても一般に適用できないし。
>>436
関数型プログラミングだとプログラムをλ式に対応させて、プログラムの実行をそのλ式の簡約に
対応させるというのが理想的なモデルとして想定されることが多いと思う。
でもλ式はλ項からλ項への対応でしかないから、λ項を値(value)と呼ぶとすると
value から valueへの数学的関数でしかない。これには入出力とかの副作用を表現する余地がない。
つまり、
入出力があるプログラム→value から valueへの数学的関数
という対応付けをすると、入出力という特徴が数学世界では失われてしまう。
という難問があった、けどモナドで一つ解答が出た。
438デフォルトの名無しさん
2024/10/02(水) 23:54:51.93ID:YWEZQEUD 代入が書けるんだから、入出力なんて自明だろ…
こいつ何いってんだ…
こいつ何いってんだ…
439デフォルトの名無しさん
2024/10/03(木) 00:02:36.12ID:B2Xmf+Xl だから、入出力がある数学的関数なんてないだろって言ってんの。
数学的関数で入出力は非自明だと思うんだが。
数学的関数で入出力は非自明だと思うんだが。
440デフォルトの名無しさん
2024/10/03(木) 00:09:13.65ID:B2Xmf+Xl Haskellでいうと、
純粋関数は、λ式(valueからvalueへの数学的関数)
に対応付けられるけど、
IOモナド使ったプログラムは、その現実のプログラムが持つ特徴を表現できるλ式がないので対応付けられない
って言ってんの。
純粋関数は、λ式(valueからvalueへの数学的関数)
に対応付けられるけど、
IOモナド使ったプログラムは、その現実のプログラムが持つ特徴を表現できるλ式がないので対応付けられない
って言ってんの。
441デフォルトの名無しさん
2024/10/03(木) 00:21:32.37ID:omgk7HiD 入出力なんてただの値のリストだろ…
442デフォルトの名無しさん
2024/10/03(木) 03:50:19.64ID:KCHr29fD 圏論持ち出して愚にもつかないことをグダグダと…
それで何か効率良くなるならいいんだけど,何のメリットもないんだよね
それで何か効率良くなるならいいんだけど,何のメリットもないんだよね
443デフォルトの名無しさん
2024/10/03(木) 04:21:38.74ID:zyXzLypu 圏論なんかより、遅延評価ならIOがwhnfの先頭に出てきたら実行すればいいって人類が気づいたのが本質なんじゃねーの
444デフォルトの名無しさん
2024/10/03(木) 08:29:58.17ID:LNI2TnSo 最近の人類はseqのメリットを直接的に利用するコツに気づいとるんか
順調に進化しとるな
順調に進化しとるな
445デフォルトの名無しさん
2024/10/03(木) 14:31:37.97ID:1wv2Oz28 コンパクトな言語仕様だが表現力は強力
数学をプログラミングに取り入れるメリットってまぁこんなもんでしかないでしょ
一方で静的に性質を決定しようとするやり方は一般的な人間の能力を簡単に超えてしまう
数学をプログラミングに取り入れるメリットってまぁこんなもんでしかないでしょ
一方で静的に性質を決定しようとするやり方は一般的な人間の能力を簡単に超えてしまう
446デフォルトの名無しさん
2024/10/03(木) 16:46:40.39ID:TkNlnb1D 急にポエマーだらけw
447デフォルトの名無しさん
2024/10/03(木) 19:56:29.70ID:B2Xmf+Xl 入出力があるプログラムをどう数学的に整合する概念に対応させるかについて書いてみる。
こういう説明が通るものなのか興味があるし。
まず、仮想的なシェルスクリプト風の行番号付き手続き型言語を想定して、
その言語で入出力があるプログラムを定義するとする。
000 procedure prog1(int n) {
001 double res
002 (なにか込み入った計算)
....
020 echo "hogehoge"
021 (なにか込み入った計算)
....
050 echo "fugafuga"
051 (なにか込み入った計算)
...
100 return res }
このプログラムは実行 $(prog1) すると、行番号001版から順に評価していって複雑な計算をしつつ途中
hogehoge ← 行番号020の命令を評価
fugafuga ← 行番号050の命令を評価
と表示した上で、返り値 res を返す、という動作をする。
こういう説明が通るものなのか興味があるし。
まず、仮想的なシェルスクリプト風の行番号付き手続き型言語を想定して、
その言語で入出力があるプログラムを定義するとする。
000 procedure prog1(int n) {
001 double res
002 (なにか込み入った計算)
....
020 echo "hogehoge"
021 (なにか込み入った計算)
....
050 echo "fugafuga"
051 (なにか込み入った計算)
...
100 return res }
このプログラムは実行 $(prog1) すると、行番号001版から順に評価していって複雑な計算をしつつ途中
hogehoge ← 行番号020の命令を評価
fugafuga ← 行番号050の命令を評価
と表示した上で、返り値 res を返す、という動作をする。
448デフォルトの名無しさん
2024/10/03(木) 19:57:08.78ID:B2Xmf+Xl 現実のよくあるプログラムとはこういう感じのものだけれども、実行 $(prog1) をしてその結果が返ってくるという現実的に
必要な点だけを考えると、途中の行番号020を評価したとかそういう情報はいらなくて、結局 $(prog1) して
hogehoge
fugafuga
を表示して、複雑な計算の結果 res が返ってくれさえすればいいともいえる。
だったら、数学的に取り扱いがしづらい、式の評価途中で入出力が発生するみたいな部分を取っ払って
000 procedure prog2(int n) {
001 double res
002 (なにか込み入った計算)
....
020 ## echo "hogehoge" #コメントアウト
021 (なにか込み入った計算)
....
050 ## echo "fugafuga" #コメントアウト
051 (なにか込み入った計算)
...
100 return ("hogehoge"を表示する予約1、"fugafuga"を表示する予約2、返り値 res) }
というように、返り値の部分に全部まとめるということをするということが考えられる。こうしても、プログラムのユーザー側からすると
実行すると$(prog2)
hogehoge
fugafuga
と表示されて複雑な計算した結果 res が返ってくるということは変わらない。
必要な点だけを考えると、途中の行番号020を評価したとかそういう情報はいらなくて、結局 $(prog1) して
hogehoge
fugafuga
を表示して、複雑な計算の結果 res が返ってくれさえすればいいともいえる。
だったら、数学的に取り扱いがしづらい、式の評価途中で入出力が発生するみたいな部分を取っ払って
000 procedure prog2(int n) {
001 double res
002 (なにか込み入った計算)
....
020 ## echo "hogehoge" #コメントアウト
021 (なにか込み入った計算)
....
050 ## echo "fugafuga" #コメントアウト
051 (なにか込み入った計算)
...
100 return ("hogehoge"を表示する予約1、"fugafuga"を表示する予約2、返り値 res) }
というように、返り値の部分に全部まとめるということをするということが考えられる。こうしても、プログラムのユーザー側からすると
実行すると$(prog2)
hogehoge
fugafuga
と表示されて複雑な計算した結果 res が返ってくるということは変わらない。
449デフォルトの名無しさん
2024/10/03(木) 19:57:34.71ID:B2Xmf+Xl というわけで、入出力があるプログラムというのは、こういう返り値の部分というか評価の最終段階の部分に「入出力の予約情報と返り値の情報がまとめられたもの」だったんだ、と整理しよう。
ただ、こういう「入出力の予約情報と返り値の情報がまとめられたもの」と長い文で表すのはよろしくないので、何か名前を与えた方がいいということで
computationと呼ぶことにする。
そうすると、Haskellでいえば、
純粋関数は、valueからvalueへの数学的関数
に割り当てることができたけれど、
入出力付きのプログラムについては、valueからcomputationへの対応
に割り当てるということが数学的に正当化できそうだ、ということになるわけだ。
ただ、こういう「入出力の予約情報と返り値の情報がまとめられたもの」と長い文で表すのはよろしくないので、何か名前を与えた方がいいということで
computationと呼ぶことにする。
そうすると、Haskellでいえば、
純粋関数は、valueからvalueへの数学的関数
に割り当てることができたけれど、
入出力付きのプログラムについては、valueからcomputationへの対応
に割り当てるということが数学的に正当化できそうだ、ということになるわけだ。
450デフォルトの名無しさん
2024/10/03(木) 20:00:39.07ID:B2Xmf+Xl 訂正
computationというか、今でいう「入出力の予約情報と返り値の情報がまとめられたもの」を
数学的にうまく正当化するということが達成することができるのであれば、
入出力つきのプログラムを、valueからcomputationへの対応
に割り当てるということが正当化できるはずだ、と考えられる。
computationというか、今でいう「入出力の予約情報と返り値の情報がまとめられたもの」を
数学的にうまく正当化するということが達成することができるのであれば、
入出力つきのプログラムを、valueからcomputationへの対応
に割り当てるということが正当化できるはずだ、と考えられる。
451デフォルトの名無しさん
2024/10/03(木) 20:23:28.46ID:zyXzLypu 何言ってるのか全然わからん
ぶっちゃけ入力は関数の引数にして、出力は返り値にするように変換するだけでいいだろ
読み出し位置のカーソル管理が必要なら代入を使えばできるじゃん
ぶっちゃけ入力は関数の引数にして、出力は返り値にするように変換するだけでいいだろ
読み出し位置のカーソル管理が必要なら代入を使えばできるじゃん
452デフォルトの名無しさん
2024/10/03(木) 20:39:38.40ID:B2Xmf+Xl よくわかんないけど、そういう入出力プログラムがあったとする。
そしてそれを引数付きで実行することを考えると
$(prog n)
こうなる。ここで、引数の部分の n はプログラムの記述に属さないといけない。
なぜかというと現実世界の「入力」部分をそのまま引数のところには持ってこれないから。
引数部分を入力にするにしても、別途入力されたものをプログラムの変数に割り当てる概念
みたいなのが必要になるし、それは関数の引数だからということでは説明にならないと思う。
だから、少なくともprogの引数部分はvalueじゃないといけない。
そしてそれを引数付きで実行することを考えると
$(prog n)
こうなる。ここで、引数の部分の n はプログラムの記述に属さないといけない。
なぜかというと現実世界の「入力」部分をそのまま引数のところには持ってこれないから。
引数部分を入力にするにしても、別途入力されたものをプログラムの変数に割り当てる概念
みたいなのが必要になるし、それは関数の引数だからということでは説明にならないと思う。
だから、少なくともprogの引数部分はvalueじゃないといけない。
453デフォルトの名無しさん
2024/10/03(木) 20:45:47.19ID:zyXzLypu ポエムすぎて意味わからん。値のリストはvalueじゃないと?
454デフォルトの名無しさん
2024/10/03(木) 20:59:58.72ID:B2Xmf+Xl 値のリスト自体をそのまま持ってくればvalueということになるんだろうけれど、
$(prog n)
の実行結果として出てくるもので、計算効果の説明になるものであって、返り値の型を包含するもの
であればcomputationと判断せざるを得ないとかそういうことしか言えないです。
$(prog n)
の実行結果として出てくるもので、計算効果の説明になるものであって、返り値の型を包含するもの
であればcomputationと判断せざるを得ないとかそういうことしか言えないです。
455デフォルトの名無しさん
2024/10/03(木) 21:11:15.46ID:zyXzLypu 判断するって何言ってるの?
computationって定義は何なの?
ラムダ項を書き換えていく手続きが計算じゃないの?
computationって定義は何なの?
ラムダ項を書き換えていく手続きが計算じゃないの?
456デフォルトの名無しさん
2024/10/03(木) 21:22:37.64ID:B2Xmf+Xl valueとcomputationの違いは微妙で$(prog n)の実行結果として出てくるかどうかとか
計算効果が発露しているかというところで見極めるしかない、と理解している。判断する
というのは専門用語としては使ってない。
computationの定義はまた微妙だけれど、$(prog n)の計算効果込みの実行結果みたいな概念。
最後は超個人的見解だけど、「λ項を書き換えていく行為」というのは、どういう方法で表現して
どういう方法で簡約していくか?というところが決まってない。λ計算じゃないけれど、
1+1=2
という計算を暗算でやるか、電卓でやるか、そろばんでやるかという違いを出しても計算することに
変わりない。
暗算でやると、脳内物質の分量が変わるし、電卓だと電位が変わる。そして、そろばんでやると
「ぱちぱち」という音が出る。
計算効果が発露しているかというところで見極めるしかない、と理解している。判断する
というのは専門用語としては使ってない。
computationの定義はまた微妙だけれど、$(prog n)の計算効果込みの実行結果みたいな概念。
最後は超個人的見解だけど、「λ項を書き換えていく行為」というのは、どういう方法で表現して
どういう方法で簡約していくか?というところが決まってない。λ計算じゃないけれど、
1+1=2
という計算を暗算でやるか、電卓でやるか、そろばんでやるかという違いを出しても計算することに
変わりない。
暗算でやると、脳内物質の分量が変わるし、電卓だと電位が変わる。そして、そろばんでやると
「ぱちぱち」という音が出る。
457デフォルトの名無しさん
2024/10/03(木) 21:30:24.72ID:zyXzLypu ❌決まってない
⭕知らない
間違えるなよ
⭕知らない
間違えるなよ
458デフォルトの名無しさん
2024/10/03(木) 21:31:19.82ID:zyXzLypu お前の脳内にしかないお花畑に巻き込むのやめてもらっていいですか?
459デフォルトの名無しさん
2024/10/03(木) 22:10:04.42ID:/brOvmjG おそらくメンタルヘルスに問題がある方なのかな?
自分の頭の中の映像をそのまま言葉にしたような感じを受ける
自分の頭の中の映像をそのまま言葉にしたような感じを受ける
460デフォルトの名無しさん
2024/10/04(金) 05:46:29.14ID:vLDssEdm >>428
Haskellの副作用については2つの解釈がある。
1.副作用も含めてアクションという単位で値としてみる。
(アクションを受け取って、アクションを返す関数)
2.Haskellは指示書を発行しているだけで、実際に実行するのは数学(Hakell)の外だから、Haskellそのものには副作用が無い。
((末尾にHaskellに値を返す形の)マシン語を返して、ハードウェアに実行してもらうと考えるアウトソーシング方式)
Haskellの副作用については2つの解釈がある。
1.副作用も含めてアクションという単位で値としてみる。
(アクションを受け取って、アクションを返す関数)
2.Haskellは指示書を発行しているだけで、実際に実行するのは数学(Hakell)の外だから、Haskellそのものには副作用が無い。
((末尾にHaskellに値を返す形の)マシン語を返して、ハードウェアに実行してもらうと考えるアウトソーシング方式)
461デフォルトの名無しさん
2024/10/04(金) 05:52:21.21ID:EogKDI3R >>460
ようするに副作用はないってことじゃん
ようするに副作用はないってことじゃん
462デフォルトの名無しさん
2024/10/04(金) 05:57:16.46ID:vLDssEdm >>461
Javaは変数をクラスの外で作れないから、グローバル変数は存在しない。
けど、事実上のグローバル変数は作れてしまう。
ってのと、同じ。
アクションの中に副作用があろうが、マシン語を返していると解釈しようが、事実として副作用はある。
ただ、重要なのは副作用を伴っても参照透明性が保たれているってこと。
Javaは変数をクラスの外で作れないから、グローバル変数は存在しない。
けど、事実上のグローバル変数は作れてしまう。
ってのと、同じ。
アクションの中に副作用があろうが、マシン語を返していると解釈しようが、事実として副作用はある。
ただ、重要なのは副作用を伴っても参照透明性が保たれているってこと。
463デフォルトの名無しさん
2024/10/04(金) 06:07:02.79ID:4jD3Hbcp 副作用が隔離できていることが大切
スレの基地外の隔離スレのように
スレの基地外の隔離スレのように
464デフォルトの名無しさん
2024/10/04(金) 06:24:04.70ID:EogKDI3R >>462
それは例えばwhileプログラムから副作用のない言語に変換したあとの形式と同じ状態にすでになってるってことで、計算のルール上はもう副作用はないでしょ
それは例えばwhileプログラムから副作用のない言語に変換したあとの形式と同じ状態にすでになってるってことで、計算のルール上はもう副作用はないでしょ
465デフォルトの名無しさん
2024/10/04(金) 07:22:19.19ID:vLDssEdm >>464
そうなんだけど、結局普通のプログラミング言語を使ってる人にしてみれば屁理屈でしかない。
見た目そのままで伝えるなら、純粋関数型言語の定義のまんま、「副作用を伴っても参照透明性が保たれている」でいい。
そうなんだけど、結局普通のプログラミング言語を使ってる人にしてみれば屁理屈でしかない。
見た目そのままで伝えるなら、純粋関数型言語の定義のまんま、「副作用を伴っても参照透明性が保たれている」でいい。
466デフォルトの名無しさん
2024/10/04(金) 07:38:19.23ID:EogKDI3R467デフォルトの名無しさん
2024/10/04(金) 07:48:51.79ID:vLDssEdm >>466
そうそう。
副作用は無い!って、こっちが必死になって弁を述べれば述べるほど、屁理屈感が出てくる。
それよりは副作用を認めて、「副作用を分離」「副作用を伴っても参照透明性が保たれている」って言った方が、納得感がある。
そうそう。
副作用は無い!って、こっちが必死になって弁を述べれば述べるほど、屁理屈感が出てくる。
それよりは副作用を認めて、「副作用を分離」「副作用を伴っても参照透明性が保たれている」って言った方が、納得感がある。
468デフォルトの名無しさん
2024/10/04(金) 19:23:08.02ID:tixO3LDq とりあえず続きを書いてみる。
Haskellでいうところの
純粋関数は、valueからvalueへの数学的関数
入出力プログラムは、valueから(入出力)computationへの対応
に割り当てることで、数学上にプログラミング行為を写し出せそうだ、というところまで書いた。
ただ、やっぱり(入出力)computationって何?とか、valueと形式的にどう違うの?という疑問は拭い去ることができない。
そこでMoggiは、次のようなアイディアを2つ出して(結構ムリヤリに)疑問を解決した。
ただし、ここで入出力プログラム prog は A型の引数を取って(computationの整理をする前は)B型の返り値を返すとする。
Haskellでいうところの
純粋関数は、valueからvalueへの数学的関数
入出力プログラムは、valueから(入出力)computationへの対応
に割り当てることで、数学上にプログラミング行為を写し出せそうだ、というところまで書いた。
ただ、やっぱり(入出力)computationって何?とか、valueと形式的にどう違うの?という疑問は拭い去ることができない。
そこでMoggiは、次のようなアイディアを2つ出して(結構ムリヤリに)疑問を解決した。
ただし、ここで入出力プログラム prog は A型の引数を取って(computationの整理をする前は)B型の返り値を返すとする。
469デフォルトの名無しさん
2024/10/04(金) 19:23:42.06ID:tixO3LDq Moggiのアイディア1
・返り値の型がBのcomputationは、何か型構築子をIOとすると、その型構築子を適用した型 IO B のvalueに対応する。
※Moggiの原理ともいう。
つまり、上で挙げた入出力プログラム prog の型は、具体的に A → IO B になると言っている。
IO B 型の実装で、入出力の予約だか、値のリストだか指示書だか表現はいろいろあるが、そういう機構を実装すれば、
prog :: A → IO B
は参照透過性を保ったまま入出力を行うプログラムになる。
もっと広がりが出そうなcomputation概念なのに、急に狭窄な感じがするアイディアだけれど、
実装と折り合いをつけるという観点からすると仕方ないともいえる。
なお、代数的効果のPlotkinとPowerが批判しているのはこのMoggiのアイディア1である感じがする(あんまわかってない)。
・返り値の型がBのcomputationは、何か型構築子をIOとすると、その型構築子を適用した型 IO B のvalueに対応する。
※Moggiの原理ともいう。
つまり、上で挙げた入出力プログラム prog の型は、具体的に A → IO B になると言っている。
IO B 型の実装で、入出力の予約だか、値のリストだか指示書だか表現はいろいろあるが、そういう機構を実装すれば、
prog :: A → IO B
は参照透過性を保ったまま入出力を行うプログラムになる。
もっと広がりが出そうなcomputation概念なのに、急に狭窄な感じがするアイディアだけれど、
実装と折り合いをつけるという観点からすると仕方ないともいえる。
なお、代数的効果のPlotkinとPowerが批判しているのはこのMoggiのアイディア1である感じがする(あんまわかってない)。
470デフォルトの名無しさん
2024/10/04(金) 19:24:13.18ID:tixO3LDq Moggiのアイディア2
・入出力プログラム(に対応する数学的概念)は、圏をなすはずだ。
Moggiのアイディア1の段階でもprog :: A → IO Bは参照透過性を保ったまま入出力を行うプログラムになるはずだが、
入出力プログラム同士の合成が考えられていない。入出力プログラム prog1、prog2と開発したら、できるだけ再利用するというのが
現実のプログラミングだと思う。わざわざprog1とprog2の合成として定義できそうなプログラムを得るために、イチイチいちから
開発するということを理論的に要請されるというのは不合理。
純粋関数は、λ式に割り当てられることになって、当然、圏をなすだろうに、
プログラムに割り当てられるものが圏を成さないというのはおかしい。
でも、入出力プログラムはMoggiのアイディア1から、
prog :: A → IO B
という特殊な返り値の型を持っているため単純な合成ができない。
・入出力プログラム(に対応する数学的概念)は、圏をなすはずだ。
Moggiのアイディア1の段階でもprog :: A → IO Bは参照透過性を保ったまま入出力を行うプログラムになるはずだが、
入出力プログラム同士の合成が考えられていない。入出力プログラム prog1、prog2と開発したら、できるだけ再利用するというのが
現実のプログラミングだと思う。わざわざprog1とprog2の合成として定義できそうなプログラムを得るために、イチイチいちから
開発するということを理論的に要請されるというのは不合理。
純粋関数は、λ式に割り当てられることになって、当然、圏をなすだろうに、
プログラムに割り当てられるものが圏を成さないというのはおかしい。
でも、入出力プログラムはMoggiのアイディア1から、
prog :: A → IO B
という特殊な返り値の型を持っているため単純な合成ができない。
471デフォルトの名無しさん
2024/10/04(金) 19:29:03.13ID:tixO3LDq Moggiのアイディア1の段階でcomputationの概念というのは解消してしまう。
PlotokinとPowerはそこが不満なんだろうか?
PlotokinとPowerはそこが不満なんだろうか?
472デフォルトの名無しさん
2024/10/04(金) 20:18:31.78ID:WSIC8Xt5 だから、副作用を隠してラムダ計算に変換する手続きは、世界をステートにする変換をした時点で達成されてるわけで、そんなの太古の昔から分かってたことだろ
IO aの定義読んでから出直せよ
IO aの定義読んでから出直せよ
473デフォルトの名無しさん
2024/10/04(金) 20:30:15.44ID:SclsbEZF 日を跨ぐつもりならコテハンでも付けてくれんか
追えん
追えん
474デフォルトの名無しさん
2024/10/04(金) 20:44:30.01ID:tixO3LDq475デフォルトの名無しさん
2024/10/04(金) 20:49:17.68ID:WSIC8Xt5476デフォルトの名無しさん
2024/10/04(金) 20:51:48.70ID:tixO3LDq だから、入出力がある数学的関数なんてないじゃん。
入出力があるプログラムを数学的に表現しようと思っても詰むからどうしようって話。
入出力があるプログラムを数学的に表現しようと思っても詰むからどうしようって話。
477デフォルトの名無しさん
2024/10/04(金) 20:57:28.69ID:6lZW+X9H こんなところで長文書くのはやめてもろて
読む価値があるものならzennとかnoteに書けば?
関数型言語界隈の人たちがクソミソにレビューしてくれるよ
読む価値があるものならzennとかnoteに書けば?
関数型言語界隈の人たちがクソミソにレビューしてくれるよ
478デフォルトの名無しさん
2024/10/04(金) 20:58:08.93ID:WSIC8Xt5479デフォルトの名無しさん
2024/10/04(金) 21:00:48.64ID:qBjLuAvO メインの入力とメインの出力は数学にもある
主じゃないやつを副作用といってる
主じゃないやつを副作用といってる
480デフォルトの名無しさん
2024/10/04(金) 21:11:30.04ID:tixO3LDq481デフォルトの名無しさん
2024/10/04(金) 21:11:31.21ID:tixO3LDq482デフォルトの名無しさん
2024/10/04(金) 21:18:24.66ID:WSIC8Xt5483デフォルトの名無しさん
2024/10/04(金) 21:25:06.50ID:WSIC8Xt5 そうだよ、こんなとこじゃなくてzennとかに煽った感じのタイトルつけて炎上する記事書いてコメントもらって来いよ
484デフォルトの名無しさん
2024/10/04(金) 21:28:05.10ID:tixO3LDq λ計算を機械語とかアセンブラと見立てて、λ計算ですべて数学世界を組み立てれば、
入出力がある数学的関数も定義できるだろうから、あえて数学的正当性なんて与えようとする
理由がわからない、ということだろうと思った。
プログラムの部分は全てλ計算で組み立てれば完全に同じものが作れると思っているということ
だけれども、じゃあ文字列をディスプレイに表示するというプログラムの構成要素である
ディスプレイはハードウェア部分だけれども、それはλ計算で組み立てるという範疇にはいるんですか?
入らないなら、なにか数学的概念を持ち出してきてそれに対応付けるということをしないといけないんじゃ
ないですか?
という趣旨のことを書いた。
入出力がある数学的関数も定義できるだろうから、あえて数学的正当性なんて与えようとする
理由がわからない、ということだろうと思った。
プログラムの部分は全てλ計算で組み立てれば完全に同じものが作れると思っているということ
だけれども、じゃあ文字列をディスプレイに表示するというプログラムの構成要素である
ディスプレイはハードウェア部分だけれども、それはλ計算で組み立てるという範疇にはいるんですか?
入らないなら、なにか数学的概念を持ち出してきてそれに対応付けるということをしないといけないんじゃ
ないですか?
という趣旨のことを書いた。
485デフォルトの名無しさん
2024/10/04(金) 21:33:15.17ID:tixO3LDq これ読んだらわかるけどMoggi論文の読書感想文。いまさらの。
匿名以外でいまさら突っ込んでくるわけないじゃん。
匿名以外でいまさら突っ込んでくるわけないじゃん。
486デフォルトの名無しさん
2024/10/04(金) 21:33:16.29ID:tixO3LDq これ読んだらわかるけどMoggi論文の読書感想文。いまさらの。
匿名以外でいまさら突っ込んでくるわけないじゃん。
匿名以外でいまさら突っ込んでくるわけないじゃん。
487デフォルトの名無しさん
2024/10/04(金) 21:34:24.07ID:qBjLuAvO 関数の「型」を見ろ
入力が何で出力が何かが宣言されている
入力が何で出力が何かが宣言されている
488デフォルトの名無しさん
2024/10/04(金) 21:39:26.17ID:tixO3LDq489デフォルトの名無しさん
2024/10/04(金) 21:39:59.29ID:WSIC8Xt5 >>484
意味不明すぎる
ラムダ計算は数学的に正当化されてるだろ
例えば合流性があるとか数学的に証明されてる
これのどこに非数学的要素があるんだって言ってるんだよ
すでに数学的な説明がされてるものに対して、数学的に正当化されてないとか言うのやめろよ
意味不明すぎる
ラムダ計算は数学的に正当化されてるだろ
例えば合流性があるとか数学的に証明されてる
これのどこに非数学的要素があるんだって言ってるんだよ
すでに数学的な説明がされてるものに対して、数学的に正当化されてないとか言うのやめろよ
490デフォルトの名無しさん
2024/10/04(金) 21:48:55.49ID:tixO3LDq λ計算が数学的に正当化されてないというような話はしてなくて、
現実のプログラムをλ計算に反映させようと思っても入出力とか非決定計算の部分は表現しきれない
そのλ計算からはみ出す部分をどう正当化させようかという話。
現実のプログラムをλ計算に反映させようと思っても入出力とか非決定計算の部分は表現しきれない
そのλ計算からはみ出す部分をどう正当化させようかという話。
491デフォルトの名無しさん
2024/10/04(金) 21:52:13.21ID:WSIC8Xt5492デフォルトの名無しさん
2024/10/04(金) 22:03:12.33ID:tixO3LDq >>491
うーん。例えば、数学は集合論上で展開されているから、集合論があればその上で展開される
解析学とか、線形代数学とかいらない、みたいな論法じゃない?
この現象は、解析学でモデル化できるけれども、解析学は集合論上で展開できるから、
そんなモデル化はいらなくていちいち集合論の言葉で書けばいいじゃん的な。
みんなそこに興味あるわけじゃないと思いますよ。
うーん。例えば、数学は集合論上で展開されているから、集合論があればその上で展開される
解析学とか、線形代数学とかいらない、みたいな論法じゃない?
この現象は、解析学でモデル化できるけれども、解析学は集合論上で展開できるから、
そんなモデル化はいらなくていちいち集合論の言葉で書けばいいじゃん的な。
みんなそこに興味あるわけじゃないと思いますよ。
493デフォルトの名無しさん
2024/10/04(金) 22:08:30.14ID:vLDssEdm >>484
横からというか >460 書いた者だけど、あなたの疑問は解釈1の「アクションを受け取ってアクションを返す関数」だとざっくりし過ぎて納得いかないって感じでしょうか?
でしたら、解釈2では納得出来ませんでしょうか?
解釈2は、モナドの効能の一つに追加して「数学の世界にアウトソーシングという概念を持ち込む」というものです。
モナドの例えとして、床下配線というのがありますが、MaybeやListの様な通常のモナドも、>>=の中に関数適用部分を押し込んで、表から見えないようにしています。
(これも、見ようによってはアウトソーシングです。同じ数学の世界なので、隣の席に頼んだ感じですが)
IOモナドは、>>=の中すら見えない状態で関数適用しているわけですが、 >460 でも書いたとおり、「数学の外(ハードウェア)」で関数適用されていると考えるわけです。
IOモナドの>>= は、外の世界と遣り取りする受付窓口というわけですね。
(実際、バッファの様な振る舞いをします)
main = do x <- return 0
_________x <- return (x + 1)
_________print x
横からというか >460 書いた者だけど、あなたの疑問は解釈1の「アクションを受け取ってアクションを返す関数」だとざっくりし過ぎて納得いかないって感じでしょうか?
でしたら、解釈2では納得出来ませんでしょうか?
解釈2は、モナドの効能の一つに追加して「数学の世界にアウトソーシングという概念を持ち込む」というものです。
モナドの例えとして、床下配線というのがありますが、MaybeやListの様な通常のモナドも、>>=の中に関数適用部分を押し込んで、表から見えないようにしています。
(これも、見ようによってはアウトソーシングです。同じ数学の世界なので、隣の席に頼んだ感じですが)
IOモナドは、>>=の中すら見えない状態で関数適用しているわけですが、 >460 でも書いたとおり、「数学の外(ハードウェア)」で関数適用されていると考えるわけです。
IOモナドの>>= は、外の世界と遣り取りする受付窓口というわけですね。
(実際、バッファの様な振る舞いをします)
main = do x <- return 0
_________x <- return (x + 1)
_________print x
494デフォルトの名無しさん
2024/10/04(金) 22:14:36.08ID:WSIC8Xt5495デフォルトの名無しさん
2024/10/04(金) 22:16:42.74ID:vLDssEdm この場合、IOモナドを使って変数xを書き換えているのではなく、シャドーイングによって同じxという名前の変数を新しく作って、古い x に +1 した値を束縛しています。
496デフォルトの名無しさん
2024/10/04(金) 22:21:54.69ID:tixO3LDq >>493
ごめんなさい。全然違う。入出力を題材にしているのはあくまで例で別に疑問はないです(実装をちゃんと知っているわけではないですが)。
モナドを導入する動機はMoggi論文読んだ読書感想文なので途中まで書いてますが、圏をなすかどうかです。
ごめんなさい。全然違う。入出力を題材にしているのはあくまで例で別に疑問はないです(実装をちゃんと知っているわけではないですが)。
モナドを導入する動機はMoggi論文読んだ読書感想文なので途中まで書いてますが、圏をなすかどうかです。
497デフォルトの名無しさん
2024/10/04(金) 22:27:08.92ID:vLDssEdm 無理やりハードウェアも数学と言い張るなら、ハードウェアもチューリングマシンという計算モデルなので数学が元と言えなくはない?
そういうこじつけは置いておいても、IOモナドをアウトソーシングと考えると、じゃあ外の世界はめちゃくちゃか?と考えて、そうではないと気付く。
ハードウェアも一定の秩序がある。
数学だけが全てではないのかもしれない。
何かしらの秩序というか、法則性を持った世界(数学、数学以外含む)どうしのやり取りにモナドが橋渡しとして働いているのでは?とか、考えたりする。
そういうこじつけは置いておいても、IOモナドをアウトソーシングと考えると、じゃあ外の世界はめちゃくちゃか?と考えて、そうではないと気付く。
ハードウェアも一定の秩序がある。
数学だけが全てではないのかもしれない。
何かしらの秩序というか、法則性を持った世界(数学、数学以外含む)どうしのやり取りにモナドが橋渡しとして働いているのでは?とか、考えたりする。
498デフォルトの名無しさん
2024/10/04(金) 22:28:17.05ID:tixO3LDq >>494
モナドの原論文(Moggiの論文)の読書感想文を入出力の計算効果を題材に解説してみているんだって。
ブログに書いても今更突っ込むなんて恥ずかしいことができる人はいるわけないので、ここに書いている。
モナドの原論文(Moggiの論文)の読書感想文を入出力の計算効果を題材に解説してみているんだって。
ブログに書いても今更突っ込むなんて恥ずかしいことができる人はいるわけないので、ここに書いている。
499デフォルトの名無しさん
2024/10/04(金) 22:32:08.56ID:WSIC8Xt5 >>498
その人はHaskellは数学的に正当化されてないけしからんって言ってたの?
その人はHaskellは数学的に正当化されてないけしからんって言ってたの?
500デフォルトの名無しさん
2024/10/04(金) 22:34:04.82ID:WSIC8Xt5 最低限、論文に書いてある正しいこととお前の妄想がはっきり区別できるように感想文を書けよ
501デフォルトの名無しさん
2024/10/04(金) 22:44:05.60ID:tixO3LDq502デフォルトの名無しさん
2024/10/04(金) 22:46:51.98ID:vLDssEdm >>496
少なくともコマンド系のプログラムは圏をなしますね。
Haskellで作ると実感しますが、Haskellに限らず、
(ユーザーから見て)プログラムそのものが関数になります。
Linuxでコマンドをパイプライン処理するのは関数(射の)合成に相当しますし。
id相当のプログラムは作れますし。
・・・と考えると圏をなすと思うのですが。
(GUIプログラムもボタン単位とかで関数と言えますが、合成は…押した順序?)
例えば
{(x,2x+1) | x ∈ R} と 2x+1のグラフは同型だと直感的に分かりますが、その関数(射)は数式で表せません。
圏論では、可換図を受け取って可換図を返すとか出てきますので、{(x,2x+1) | x ∈ R} と 2x+1のグラフを結ぶ関数(射)が人間って言うのも有かな?とか、考えます。
(圏論では同型と分かれば(証明できれば)よくて、射の中身には言及しない)
少なくともコマンド系のプログラムは圏をなしますね。
Haskellで作ると実感しますが、Haskellに限らず、
(ユーザーから見て)プログラムそのものが関数になります。
Linuxでコマンドをパイプライン処理するのは関数(射の)合成に相当しますし。
id相当のプログラムは作れますし。
・・・と考えると圏をなすと思うのですが。
(GUIプログラムもボタン単位とかで関数と言えますが、合成は…押した順序?)
例えば
{(x,2x+1) | x ∈ R} と 2x+1のグラフは同型だと直感的に分かりますが、その関数(射)は数式で表せません。
圏論では、可換図を受け取って可換図を返すとか出てきますので、{(x,2x+1) | x ∈ R} と 2x+1のグラフを結ぶ関数(射)が人間って言うのも有かな?とか、考えます。
(圏論では同型と分かれば(証明できれば)よくて、射の中身には言及しない)
503デフォルトの名無しさん
2024/10/04(金) 22:50:56.01ID:WSIC8Xt5504デフォルトの名無しさん
2024/10/04(金) 22:52:29.23ID:tixO3LDq ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
505デフォルトの名無しさん
2024/10/04(金) 22:52:30.15ID:tixO3LDq ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
506デフォルトの名無しさん
2024/10/04(金) 22:54:07.35ID:WSIC8Xt5 そもそもラムダ項は関数ではないし、集合ではあるということはできるけど、それは自然数1は集合であるみたいな話でそれに意義なんてないよ
507デフォルトの名無しさん
2024/10/04(金) 23:02:32.42ID:vLDssEdm >>504
>398 じゃ答えにならない?
>398 じゃ答えにならない?
508デフォルトの名無しさん
2024/10/04(金) 23:02:43.19ID:6lZW+X9H 流石にこれじゃ関数型界隈の人達にボコボコにされて終わるね
やめといた方がいい
やめといた方がいい
509デフォルトの名無しさん
2024/10/04(金) 23:04:12.66ID:tixO3LDq βη簡約するとλ項が別の簡約されたλ項になる。この対応関係を数学的関数とみなせると言ってると解釈してる。
510デフォルトの名無しさん
2024/10/04(金) 23:12:30.87ID:WSIC8Xt5511デフォルトの名無しさん
2024/10/04(金) 23:14:09.18ID:tixO3LDq 全域関数となる理由はわからん。全域関数=数学的関数ということを言いたいんだろうと思ってたけどそこから詰めてなかった。
512デフォルトの名無しさん
2024/10/04(金) 23:22:52.03ID:WSIC8Xt5 >>511
お前が言い出したんだろ
お前が言い出したんだろ
513デフォルトの名無しさん
2024/10/04(金) 23:30:08.11ID:6lZW+X9H これがワードサラダか
514デフォルトの名無しさん
2024/10/04(金) 23:41:03.02ID:tixO3LDq すまんね。準備不足だったわ。詰めるところわかったし、
詰めるところ詰めることができたらひっそりどっかに書くことにするわ。
いろいろコメント参考になったわ。
詰めるところ詰めることができたらひっそりどっかに書くことにするわ。
いろいろコメント参考になったわ。
515デフォルトの名無しさん
2024/10/05(土) 00:27:27.96ID:aeHKoAMv 集合と写像の区別がついてないんだから、何を準備しようが時間の無駄
516デフォルトの名無しさん
2024/10/05(土) 07:57:53.70ID:jwoAd9Km ZFでは集合しか無いから。写像だろうが、自然数だろうが何でも集合。全てを集合で実装する世界。
517デフォルトの名無しさん
2024/10/05(土) 08:14:37.65ID:JByJwyk5 圏論は逆で、対象(集合で言う元)を恒等写像と同一視して全てを射(写像)として扱うね。
518デフォルトの名無しさん
2024/10/05(土) 08:53:09.61ID:jwoAd9Km 対象Aに対しA=id_Aとする圏の定義は、射のクラスの上での全域的で無い結合的2項演算⚪︎を持つ代数系としての簡潔な定式化。この定義では圏には射しかなくて、対象とは恒等射の別名に過ぎない。
ただ、この圏の実装は入門者には分かり難い。
Aが圏Cの対象であることを古い文献はA in Ob(C)と書くことが多いけど、最近の文献はA in Cと書いてしまう。fが圏Cの射f:A --> Bなことはf in Hom_C(A,B)かf in Mor_C(A,B)。
ただ、この圏の実装は入門者には分かり難い。
Aが圏Cの対象であることを古い文献はA in Ob(C)と書くことが多いけど、最近の文献はA in Cと書いてしまう。fが圏Cの射f:A --> Bなことはf in Hom_C(A,B)かf in Mor_C(A,B)。
519デフォルトの名無しさん
2024/10/05(土) 10:51:32.56ID:KE+ltgGd 普通のλはどの順序で適用しても同じ計算結果になる(Church-Rosserの定理)けど
副作用を伴うλは適用順序が入れ替わると副作用の順序も変わって同じ結果とは言えなくなるから
順序を保証する仕組みとしてモナドが応用されてるはず
IO a >>= (a -> IO b) -> IO b
は(a -> IO b)が(IO a)を受け取れないから
(IO a)からaを取り出せるところまで計算しないと(a -> IO b)を適用できない
仮に
IO a -> (IO a -> IO b) -> IO b
みたいな形だと(IO a)の計算を保留したまま(IO a -> IO b)を適用できる
圏論はよく分からないけど
圏Aに便宜的な時間軸をつけたA_t0, A_t1, A_t2, …を用意して関手
A_t0 → A_t1, A_t1 → A_t2, …
を作るとA_t0, A_t1…は全部AのクローンだからA_t0 → A_t1, …は自己関手になって
その自己関手の集合がなんやかんやでモナドに相当するみたいなイメージ
副作用を伴うλは適用順序が入れ替わると副作用の順序も変わって同じ結果とは言えなくなるから
順序を保証する仕組みとしてモナドが応用されてるはず
IO a >>= (a -> IO b) -> IO b
は(a -> IO b)が(IO a)を受け取れないから
(IO a)からaを取り出せるところまで計算しないと(a -> IO b)を適用できない
仮に
IO a -> (IO a -> IO b) -> IO b
みたいな形だと(IO a)の計算を保留したまま(IO a -> IO b)を適用できる
圏論はよく分からないけど
圏Aに便宜的な時間軸をつけたA_t0, A_t1, A_t2, …を用意して関手
A_t0 → A_t1, A_t1 → A_t2, …
を作るとA_t0, A_t1…は全部AのクローンだからA_t0 → A_t1, …は自己関手になって
その自己関手の集合がなんやかんやでモナドに相当するみたいなイメージ
520デフォルトの名無しさん
2024/10/05(土) 11:23:42.68ID:KE+ltgGd どうでもいいけど計算科学のside effect→副作用は誤訳だと思う
薬学のside effectは「随伴作用」(副作用)だけど計算科学のside effectは「側面作用」って感じ
薬学のside effectは「随伴作用」(副作用)だけど計算科学のside effectは「側面作用」って感じ
521デフォルトの名無しさん
2024/10/05(土) 11:40:17.86ID:gdCH0E84 圏論のコンコルド効果について。
Haskellのコーティングの質をあげようと、
一生懸命頑張って勉強したのに実はほとんど役に立たない…
「大量の時間と労力を学習したのに悔しい!」
そのことを認めることができず、懸命に圏論のプログラミングでの有用性を力説し、学習布教に努める。
Haskellのコーティングの質をあげようと、
一生懸命頑張って勉強したのに実はほとんど役に立たない…
「大量の時間と労力を学習したのに悔しい!」
そのことを認めることができず、懸命に圏論のプログラミングでの有用性を力説し、学習布教に努める。
522デフォルトの名無しさん
2024/10/05(土) 13:16:57.88ID:AoKf42Y0 >>519
異なる順序でreductionする方法がある場合は、どの順序でreductionしても同じ結果になるだろ?
IO a >>= (a -> IO b) -> IO bなら当たり前だけど(a -> IO b) -> IO bをa -> IO bに先にreduction可能
異なる順序でreductionする方法がある場合は、どの順序でreductionしても同じ結果になるだろ?
IO a >>= (a -> IO b) -> IO bなら当たり前だけど(a -> IO b) -> IO bをa -> IO bに先にreduction可能
523デフォルトの名無しさん
2024/10/05(土) 13:51:21.32ID:2BBo/yBe 数日程度で成果を出す戦略を採用したにもかかわらず何年も戦争が続く
こういうのは圏論に限定されない現象だ
順序を入れかえたら結果が変わる
数日後の情報が今ここに伝わるならそれは時間軸とは言えないぞ
こういうのは圏論に限定されない現象だ
順序を入れかえたら結果が変わる
数日後の情報が今ここに伝わるならそれは時間軸とは言えないぞ
524デフォルトの名無しさん
2024/10/05(土) 14:41:11.81ID:hOtauQiF >>522
IO a >>= (a -> IO b) -> IO b
は
(IO a >>= (a -> IO b)) -> IO b
であって
IO a >>= ((a -> IO b) -> IO b)
にはならないよ
(>>=)は演算子
IO a >>= (a -> IO b) -> IO b
は
(IO a >>= (a -> IO b)) -> IO b
であって
IO a >>= ((a -> IO b) -> IO b)
にはならないよ
(>>=)は演算子
525デフォルトの名無しさん
2024/10/05(土) 15:10:26.09ID:u1hwkRNd 圏論の話題出すなよ
Haskellで何か書くにあたって利益があるわけじゃないんだから
Haskellで何か書くにあたって利益があるわけじゃないんだから
526デフォルトの名無しさん
2024/10/05(土) 15:30:46.49ID:2BBo/yBe 利益は道徳よりも軽い
これも、未来予知ができなければ利益を計算できないことに原因がある
これも、未来予知ができなければ利益を計算できないことに原因がある
527デフォルトの名無しさん
2024/10/05(土) 17:25:54.13ID:JByJwyk5 >>521
役に立つなら、もっと色々入ってるかと…。
私はむしろHaskellより圏論そのものに興味の対象が移って、Haskellは圏論の概念を実際に動かしてみるための道具に成り下がってますね^^;
とはいえ、数学の知識不足なので群論やらトポロジーやらあっちこっち読み漁りながらなので、歩みは遅いですが…。
役に立つなら、もっと色々入ってるかと…。
私はむしろHaskellより圏論そのものに興味の対象が移って、Haskellは圏論の概念を実際に動かしてみるための道具に成り下がってますね^^;
とはいえ、数学の知識不足なので群論やらトポロジーやらあっちこっち読み漁りながらなので、歩みは遅いですが…。
528デフォルトの名無しさん
2024/10/05(土) 20:22:21.95ID:J2mQEu2j >>527
面倒でも一般位相の基本、ホモロジーの初歩…と地道にやるのをおすすめします
面倒でも一般位相の基本、ホモロジーの初歩…と地道にやるのをおすすめします
529デフォルトの名無しさん
2024/10/05(土) 20:30:18.78ID:aeHKoAMv 集合と写像の区別もついてないんだから、集合と位相からやらないとだめ
530デフォルトの名無しさん
2024/10/05(土) 22:07:16.25ID:JByJwyk5531デフォルトの名無しさん
2024/10/05(土) 22:16:56.83ID:aeHKoAMv532デフォルトの名無しさん
2024/10/05(土) 23:30:55.73ID:bPGp2ASj >>373=396=530 っぽいから言うと、(数学に関して)「分かった」「理解した」の自己基準が不安しかない
> ほら、分かってみれば「なーんだ。そんなことか」でしょ?
> なるほど、って感じ。
と自分に言い聞かせていても、ポピュラーサイエンス書感覚で読んだってダメ
他人との議論では、逆に「こいつ分かってないな」と思われるだけだからな
> ほら、分かってみれば「なーんだ。そんなことか」でしょ?
> なるほど、って感じ。
と自分に言い聞かせていても、ポピュラーサイエンス書感覚で読んだってダメ
他人との議論では、逆に「こいつ分かってないな」と思われるだけだからな
533デフォルトの名無しさん
2024/10/05(土) 23:50:06.63ID:JByJwyk5 >>532
独学ですしね^^;
こいつ分かってないなと思われても良いですよ?
それで指摘されたものも新しい知識になるので。
どうも定義を読むだけじゃイメージ湧かないので、ネット上や数学書の複数の例え話が全て真だと仮定して、共通の特徴からイメージを掴むパターンが多いんです。
独学ですしね^^;
こいつ分かってないなと思われても良いですよ?
それで指摘されたものも新しい知識になるので。
どうも定義を読むだけじゃイメージ湧かないので、ネット上や数学書の複数の例え話が全て真だと仮定して、共通の特徴からイメージを掴むパターンが多いんです。
534デフォルトの名無しさん
2024/10/06(日) 01:53:03.98ID:6zQjUfx4 いま正常性バイアスを理解した
全て正常だと仮定する
なるほど
全て正常だと仮定する
なるほど
535デフォルトの名無しさん
2024/10/06(日) 10:54:18.58ID:jCq2z3ec 本来Haskell使う上で必要のない数学の知識をかじらされるのかわいそう
こうやって無駄に間口狭めてなんの意味があるんだか
こうやって無駄に間口狭めてなんの意味があるんだか
536デフォルトの名無しさん
2024/10/06(日) 11:09:45.81ID:y6HCCYtz537デフォルトの名無しさん
2024/10/06(日) 12:50:07.74ID:6zQjUfx4538デフォルトの名無しさん
2024/10/06(日) 13:58:19.62ID:jCq2z3ec まず圏論が必要ないっての
539デフォルトの名無しさん
2024/10/06(日) 14:19:17.49ID:6zQjUfx4 それは極論だがそれを許容する代わりに反対側の極論も許容してもらう
ダブルヘイターとは違うのだよ
ダブルヘイターとは違うのだよ
540デフォルトの名無しさん
2024/10/07(月) 16:51:22.87ID:89HfDe1C >>539
君頭悪いなら無理に書き込まないほうがいいよ
君頭悪いなら無理に書き込まないほうがいいよ
541デフォルトの名無しさん
2024/10/08(火) 16:34:43.77ID:uOPPJ/Hn 圏論好きはHaskellよりCPLで幸せになれる
542デフォルトの名無しさん
2024/10/08(火) 19:19:24.66ID:fXGz3G0z >>529
集合と写像って違うんですか?写像って集合ではなかったですか?
集合と写像って違うんですか?写像って集合ではなかったですか?
543デフォルトの名無しさん
2024/10/08(火) 19:24:10.23ID:u3fJk7wa >>541
CPLとは?kwsk
CPLとは?kwsk
544デフォルトの名無しさん
2024/10/08(火) 19:35:49.07ID:i8KKt4Pq545デフォルトの名無しさん
2024/10/08(火) 20:00:43.25ID:fXGz3G0z >>544
なるほど。勉強になります。
なるほど。勉強になります。
546デフォルトの名無しさん
2024/10/08(火) 20:58:36.65ID:uOPPJ/Hn >>543
CPL (圏論プログラミング言語)
https://ja.m.wikipedia.org/wiki/CPL_(%E5%9C%8F%E8%AB%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
CPL (圏論プログラミング言語)
https://ja.m.wikipedia.org/wiki/CPL_(%E5%9C%8F%E8%AB%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
547デフォルトの名無しさん
2024/10/08(火) 21:59:10.54ID:fIGAPb3c CPL使ったことは一度もないが
関手圏よりもっとややこしい圏で、モナドより凡庸なものを定義するんでしょ
関手圏よりもっとややこしい圏で、モナドより凡庸なものを定義するんでしょ
548デフォルトの名無しさん
2024/10/08(火) 23:08:48.38ID:Fz/Eetv9 こんなんだけど
>通常では,自然数などのデータ型は,効率のためにシステムに組込んであるが,CPLでは定義しなければならない.
>また,定義したとしても,機械本来の足し算,かけ算を使用できず,独自に定義しなければならない.
>通常では,自然数などのデータ型は,効率のためにシステムに組込んであるが,CPLでは定義しなければならない.
>また,定義したとしても,機械本来の足し算,かけ算を使用できず,独自に定義しなければならない.
549デフォルトの名無しさん
2024/10/09(水) 00:11:45.00ID:NBQjGpZO O'CAMLのCAMLはCategorical Abstract Machine Languageの略ということを忘れてはかわいそう。
550デフォルトの名無しさん
2024/10/09(水) 20:31:07.90ID:UpCIlB6y >>546
Thenks!!
Thenks!!
551デフォルトの名無しさん
2024/10/12(土) 20:07:00.42ID:fyUcodga 初心者はStack、ガチムチはCabalで開発するんですか?
552デフォルトの名無しさん
2024/10/15(火) 05:30:10.38ID:CzVFQLgH みんなStackだよ
Cabalの依存関係解決はましになったとはいえプロジェクト構成の記述はStackのほうがよくできてるし
Cabalの依存関係解決はましになったとはいえプロジェクト構成の記述はStackのほうがよくできてるし
553デフォルトの名無しさん
2024/10/15(火) 22:34:15.38ID:2I09ehic 詳しい情報サンクス
CabalやめてStackに帰ります
GHCup tuiで選べるCabalやHLSやStackも全部recommendedに落とします
CabalやめてStackに帰ります
GHCup tuiで選べるCabalやHLSやStackも全部recommendedに落とします
554デフォルトの名無しさん
2024/10/16(水) 05:04:51.74ID:PvdZsye3 ああCabal辞めてStackに移行したらビルドし直しただけでTLSのハンドシェイクがTwitchでは大丈夫なのにツイキャスで失敗する謎の不具合が治りました
やっぱStackすわ
やっぱStackすわ
555デフォルトの名無しさん
2024/10/18(金) 18:33:56.50ID:358zSdqs 別に不具合あったわけじゃないならよくね
みんなとか言い出したらそもそもみんなhaskellなんか使ってないが
みんなとか言い出したらそもそもみんなhaskellなんか使ってないが
556デフォルトの名無しさん
2024/10/25(金) 23:46:50.40ID:jl3K3ThU Haskellを学んだみたいと思うんだけど、「すごいHaskell たのしく学ぼう」って書籍は今でも有用?
Haskellの良書として挙げることは多いと思うけど、出版から10年以上経ってるのが気になった
その間で言語に大きな変更があったとか、「今のHaskellだったらこう書くよね」みたいな注意が必要な点などあれば知りたい
あるいは最近の書籍でよりおすすめというものでも
Haskellの良書として挙げることは多いと思うけど、出版から10年以上経ってるのが気になった
その間で言語に大きな変更があったとか、「今のHaskellだったらこう書くよね」みたいな注意が必要な点などあれば知りたい
あるいは最近の書籍でよりおすすめというものでも
ちょっと古い情報だけど、
僕が「すごいH」を購入したのが2016.12だけど、数年後には章立ての変更まではなかったかもしれないけど、コードの記述など結構アップデートされてたような
いずれにしても、一冊でHaskellを、ってのはアレで、何冊かは読まないとと僕の場合
僕が「すごいH」を購入したのが2016.12だけど、数年後には章立ての変更まではなかったかもしれないけど、コードの記述など結構アップデートされてたような
いずれにしても、一冊でHaskellを、ってのはアレで、何冊かは読まないとと僕の場合
558デフォルトの名無しさん
2024/10/26(土) 01:14:59.65ID:jaMDzNJq559デフォルトの名無しさん
2024/10/26(土) 13:33:26.33ID:qze4GRwI モナドはCのポインタより概念が難しいのどうにかならんの
別のはないんですか
別のはないんですか
560デフォルトの名無しさん
2024/10/26(土) 14:33:50.42ID:jaMDzNJq ない
別に理論的な部分はすっ飛ばしていいよ
純粋関数型言語で手続き型言語のようなシーケンスをどうやったら書けるか?みたいなパズルを解く方法と思ってればいい
全てはdo記法にため
別に理論的な部分はすっ飛ばしていいよ
純粋関数型言語で手続き型言語のようなシーケンスをどうやったら書けるか?みたいなパズルを解く方法と思ってればいい
全てはdo記法にため
561デフォルトの名無しさん
2024/10/26(土) 18:20:45.25ID:QG40CL6R >>559
だったらCleanはどうでせう?
モナドの代わりに線形何たらっての使ってる。
副作用関数を使い捨て関数と捉える概念らしいけど…。
変数は引数のない関数と捉えられるので、入力関数も外部で代入する変数と捉えられる。
んで、
return 0 >>= \x -> return (x + 1) >>= \x -> return (x + 1) = 2
は
return 0 >>= (\x -> return (x + 1) >>= (\x -> return (x + 1)))
と解釈されて、(\x -> ...) 部分が1個のラムダ式(関数)の上に階層構造なので、同名の変数 x はシャドーイングで古い値は隠される。
(そして隠されたら他から参照されなくなるのでGCでメモリを解放される)
IOモナドな入力関数も引数が無いので、値を外部で代入する変数と捉え、シャドーイングで古い値は隠されると考えると、線形何たらの使い捨て副作用関数と同じことしてる。
だったらCleanはどうでせう?
モナドの代わりに線形何たらっての使ってる。
副作用関数を使い捨て関数と捉える概念らしいけど…。
変数は引数のない関数と捉えられるので、入力関数も外部で代入する変数と捉えられる。
んで、
return 0 >>= \x -> return (x + 1) >>= \x -> return (x + 1) = 2
は
return 0 >>= (\x -> return (x + 1) >>= (\x -> return (x + 1)))
と解釈されて、(\x -> ...) 部分が1個のラムダ式(関数)の上に階層構造なので、同名の変数 x はシャドーイングで古い値は隠される。
(そして隠されたら他から参照されなくなるのでGCでメモリを解放される)
IOモナドな入力関数も引数が無いので、値を外部で代入する変数と捉え、シャドーイングで古い値は隠されると考えると、線形何たらの使い捨て副作用関数と同じことしてる。
562デフォルトの名無しさん
2024/10/28(月) 07:23:18.71ID:duvMwVsG563デフォルトの名無しさん
2024/10/28(月) 11:18:21.59ID:ABlPDVd9 すごいエロい本か
564デフォルトの名無しさん
2024/10/28(月) 16:01:27.57ID:3PX2guVI >>563
それ面白いと思ってレスしてんの?
それ面白いと思ってレスしてんの?
565デフォルトの名無しさん
2024/10/28(月) 17:13:55.02ID:B1OBTGXf 10年前のtwitterでは鉄板ジョークでしたよ
すごいH
すごいH
566デフォルトの名無しさん
2024/10/28(月) 19:07:28.37ID:aKxYxFxQ haskell知らない人はエロ本だと思うし
隠れた卑猥な意味が無ければ
隠語としての価値も無い
隠れた卑猥な意味が無ければ
隠語としての価値も無い
567デフォルトの名無しさん
2024/10/28(月) 19:57:49.83ID:2RuMUG8y ML族のRustが市民権を得た今haskellやる意味ないよ
その時間をRustに当てなさい
その時間をRustに当てなさい
568デフォルトの名無しさん
2024/10/28(月) 21:28:05.60ID:B1OBTGXf 平均的HaskellerはRustもやった上でLinearTypes拡張がどうなるか様子見しつつ両方使ってるのでは?
https://zenn.dev/konn/articles/2023-10-01-linear-haskell-in-2023
https://zenn.dev/konn/articles/2023-10-01-linear-haskell-in-2023
569デフォルトの名無しさん
2024/10/28(月) 22:50:50.12ID:duvMwVsG Haskellスレで言われましても
わざわざカレー屋に来て「ラーメンを食え」って喧伝するようなものでしょ
わざわざカレー屋に来て「ラーメンを食え」って喧伝するようなものでしょ
570デフォルトの名無しさん
2024/10/29(火) 10:29:33.30ID:2QinlXet >>567
ほんそれ
ほんそれ
571デフォルトの名無しさん
2024/10/29(火) 11:58:27.10ID:IrbjK6II Rustを関数型扱いするやつは
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
572デフォルトの名無しさん
2024/10/29(火) 12:22:05.93ID:dZcxKFDp そう。世界がHaskellから孤立していく
世界はもっと危機感もった方が良いよ
世界はもっと危機感もった方が良いよ
573デフォルトの名無しさん
2024/10/29(火) 15:30:57.70ID:+9FvEifI 実用プログラムに使った例はあるの?
574デフォルトの名無しさん
2024/10/29(火) 16:00:48.67ID:FJXFYfo2575デフォルトの名無しさん
2024/10/29(火) 22:29:59.15ID:LPWWq4s4 >>573
自分も詳しくはないけど、クローズドな分野が多いんじゃない?
自分も詳しくはないけど、クローズドな分野が多いんじゃない?
576デフォルトの名無しさん
2024/10/29(火) 23:08:38.64ID:+9FvEifI >>575
秘密ということ、それじゃわからんと同じことじゃないか
秘密ということ、それじゃわからんと同じことじゃないか
577デフォルトの名無しさん
2024/10/29(火) 23:25:09.95ID:6SLkDv7J 世界は頭悪すぎてHaskellを使いこなせていない
世界はもっと危機感を持った方が良い
世界はもっと危機感を持った方が良い
578デフォルトの名無しさん
2024/10/30(水) 02:10:51.19ID:p9nsrTZ/ 急に主語が大きくなったぞωωω=2πf
579デフォルトの名無しさん
2024/11/02(土) 09:15:14.82ID:KpOoS8wa クローズドな部分なら使ったうちには入らないな
580デフォルトの名無しさん
2024/11/02(土) 18:11:47.64ID:3NvQMTDb 金融工学で使ってるとこあるかもね
OCamlが定番らしいし
OCamlが定番らしいし
581デフォルトの名無しさん
2024/11/02(土) 19:19:33.26ID:Mufqfjtq582デフォルトの名無しさん
2024/11/02(土) 19:33:48.22ID:pIz290+w583デフォルトの名無しさん
2024/11/02(土) 19:38:33.59ID:3NvQMTDb584デフォルトの名無しさん
2024/11/02(土) 20:11:17.53ID:pIz290+w >>581
どっちかというと、教育に興味があって、例えば足し算の足し方が増加と追加って2種類あるんだけど、追加は後から増えるって意味だと教科書に書いてあるけど、その説明がもやもやする。
それで、違いを考えるとこれは
増加の足し算:末尾再帰。その場で簡約出来る
3 + 2 = (3 + 1) + (2- 1) = 4 + 1 = (4 + 1) + (1 -1) = 5 + 0 = 5
追加の足し算:再帰。基底部まで来てから簡約開始。リストの ++ 演算子的な動き。
2 + 3 = 1 + ((2 - 1) + 3) = 1 + (1 + ((1 - 1) + 3)) = 1 + (1 + (0 + 3)) = 1 + (1 + 3) = 1 + 4 = 5
みたいに、足し算作らないと気付かない違いを気付いて教えるのに役立ててる。
(+1/-1の代わりにsucc/pred関数の適用で考えた方が分かり易いかも)
どっちかというと、教育に興味があって、例えば足し算の足し方が増加と追加って2種類あるんだけど、追加は後から増えるって意味だと教科書に書いてあるけど、その説明がもやもやする。
それで、違いを考えるとこれは
増加の足し算:末尾再帰。その場で簡約出来る
3 + 2 = (3 + 1) + (2- 1) = 4 + 1 = (4 + 1) + (1 -1) = 5 + 0 = 5
追加の足し算:再帰。基底部まで来てから簡約開始。リストの ++ 演算子的な動き。
2 + 3 = 1 + ((2 - 1) + 3) = 1 + (1 + ((1 - 1) + 3)) = 1 + (1 + (0 + 3)) = 1 + (1 + 3) = 1 + 4 = 5
みたいに、足し算作らないと気付かない違いを気付いて教えるのに役立ててる。
(+1/-1の代わりにsucc/pred関数の適用で考えた方が分かり易いかも)
585デフォルトの名無しさん
2024/11/02(土) 20:16:43.59ID:pIz290+w >>583
そうなんだ。
そういうライブラリ頼みっぽい事なら、MathmacticaとかPythonのが良さそうなのにね。
金融商品だったら統計に強いRだってあるし。
なぜわざわざOCamlだったのやら…。
そうなんだ。
そういうライブラリ頼みっぽい事なら、MathmacticaとかPythonのが良さそうなのにね。
金融商品だったら統計に強いRだってあるし。
なぜわざわざOCamlだったのやら…。
586デフォルトの名無しさん
2024/11/03(日) 11:40:35.68ID:kGU90lSm587デフォルトの名無しさん
2024/11/03(日) 17:33:41.03ID:4RaSizfZ その手のはかなり昔からの話だしその頃pythonはそんな一般的ではない
588デフォルトの名無しさん
2024/11/03(日) 18:58:10.27ID:W/WQS3jI589デフォルトの名無しさん
2024/11/06(水) 18:53:34.69ID:s8sk505y semigroupoidsのAltからFunctor抜いたやつないのかな
catsのSemigroupK相当のやつ
catsのSemigroupK相当のやつ
590デフォルトの名無しさん
2024/11/07(木) 02:17:24.00ID:w1FRCcDr HackageもHaskellWikiもつながらねえ
攻撃でも受けたか
攻撃でも受けたか
591デフォルトの名無しさん
2024/11/07(木) 06:45:43.72ID:NVSipRlq 数か月前もHoogle繋がらなかったしね…。
592デフォルトの名無しさん
2024/11/09(土) 18:32:16.19ID:r4DlAvJp mylist.py TotalSeconds : 6.1246778
1:def mylist(n, m):
2: a = 1
3: outer = []
4: for _ in range(0, n):
5: inner = []
6: for _ in range(0, m):
7: inner.append(a)
8: a += 1
9: outer.append(inner)
10: return outer
11:
12:print(mylist(6000, 8000)[-1][-1])
上と同じ動きのコードを書いたけど、
アルゴリズムとしてはPythonと同じmylist.hsのコードが良いはずなのに、
どっちも最適化するとmylist2.hsのが良好。
(ファイル名の横の秒数は実行時間)
mylist.hs TotalSeconds : 4.107899
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.f $ [1..]
4: where f ns = xs:f ys
5: where (xs, ys) = splitAt m ns
mylist2.hs TotalSeconds : 2.3916408
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.iterate f $ [1..m]
4: where f = map (+m)
1:def mylist(n, m):
2: a = 1
3: outer = []
4: for _ in range(0, n):
5: inner = []
6: for _ in range(0, m):
7: inner.append(a)
8: a += 1
9: outer.append(inner)
10: return outer
11:
12:print(mylist(6000, 8000)[-1][-1])
上と同じ動きのコードを書いたけど、
アルゴリズムとしてはPythonと同じmylist.hsのコードが良いはずなのに、
どっちも最適化するとmylist2.hsのが良好。
(ファイル名の横の秒数は実行時間)
mylist.hs TotalSeconds : 4.107899
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.f $ [1..]
4: where f ns = xs:f ys
5: where (xs, ys) = splitAt m ns
mylist2.hs TotalSeconds : 2.3916408
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.iterate f $ [1..m]
4: where f = map (+m)
593デフォルトの名無しさん
2024/11/09(土) 18:32:43.47ID:r4DlAvJp mylist2.hsのアルゴリズムは
f = map (+3)とすれば
[1,2,3]
[4,5,6] -- f [1,2,3] = [1 + 3, 2 + 3, 3 + 3] = [4,5,6]
[7,8,9] -- f (f [1,2,3]) = f [1 + 3, 2 + 3, 3 + 3] = [4 + 3, 5 + 3, 6 + 3] = [7,8,9]
と、行数が増えるごとに関数の適用回数が増えるので本来なら遅いはずですが、
考えるに直前の結果をキャッシュする様な最適化が施された模様。(-O3)
(そうすると、mylist.hsのsplitAtの方がボトルネックになる?)
最適化なしでのコンパイルはしてないので、
もしかしたらiterateの中身自身がキャッシュするように改良されたのかも。
f = map (+3)とすれば
[1,2,3]
[4,5,6] -- f [1,2,3] = [1 + 3, 2 + 3, 3 + 3] = [4,5,6]
[7,8,9] -- f (f [1,2,3]) = f [1 + 3, 2 + 3, 3 + 3] = [4 + 3, 5 + 3, 6 + 3] = [7,8,9]
と、行数が増えるごとに関数の適用回数が増えるので本来なら遅いはずですが、
考えるに直前の結果をキャッシュする様な最適化が施された模様。(-O3)
(そうすると、mylist.hsのsplitAtの方がボトルネックになる?)
最適化なしでのコンパイルはしてないので、
もしかしたらiterateの中身自身がキャッシュするように改良されたのかも。
594デフォルトの名無しさん
2024/11/10(日) 16:05:22.18ID:AfmJKCJ3 これ数学的にどういうことなのか
かいつまんで教えてくらまいか
watch?v=dYj0rPQeRkA
かいつまんで教えてくらまいか
watch?v=dYj0rPQeRkA
595デフォルトの名無しさん
2024/11/16(土) 10:08:07.70ID:9CYVpzbn Category Theory Using Haskell
An Introduction with Moggi and Yoneda
Shuichi Yukita
という書籍が来月出るんですって?
An Introduction with Moggi and Yoneda
Shuichi Yukita
という書籍が来月出るんですって?
596デフォルトの名無しさん
2024/11/16(土) 14:32:48.68ID:Avgm411i597596
2024/11/16(土) 14:36:30.07ID:Avgm411i 円記号がバックスラッシュになっていたので訂正
¥36,125
フォントによるわけだが
¥36,125
フォントによるわけだが
598デフォルトの名無しさん
2024/11/16(土) 15:13:06.50ID:ZnREBqGy 買って損するだけの高額本の予感
599デフォルトの名無しさん
2024/11/16(土) 15:27:44.60ID:x85mVkLf なんだ雪田の本じゃねぇか
プラスアルファはあるかも知れんが
基本雪田の「圏論入門 Haskellで計算する具体例から」と大差無いと思うぞ
プラスアルファはあるかも知れんが
基本雪田の「圏論入門 Haskellで計算する具体例から」と大差無いと思うぞ
600デフォルトの名無しさん
2024/11/16(土) 20:50:43.88ID:ZUJ+jDQV 結局Moggiのアイディアがなんなのか書いてなかったから、洋書でも同じでしょ。
601デフォルトの名無しさん
2024/11/16(土) 21:01:44.68ID:UsNa54E4 すでに書かれてるのがwikipediaにあるじゃん
https://ja.m.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%AA%E5%9C%8F
https://ja.m.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%AA%E5%9C%8F
602デフォルトの名無しさん
2024/11/16(土) 21:18:48.47ID:ZUJ+jDQV wikiのは肝心のvalueとcomputationについてちゃんと書いてない。
computationの訳を「計算された値」とするのは微妙。
computationの訳を「計算された値」とするのは微妙。
603デフォルトの名無しさん
2024/11/16(土) 21:28:16.06ID:ZUJ+jDQV 『圏論入門』の方にはvalueもcomputationも書いてなかったと思うから言わずもがな。
604デフォルトの名無しさん
2024/11/16(土) 21:43:11.16ID:HNcchqjT 出たら人柱になって買って読んで下さい
605デフォルトの名無しさん
2024/11/16(土) 22:29:43.38ID:MlIU4R6X 多分加筆してると思うよ
日本の出版社はなぜかページ数制限があることが多いんだけど
海外にそれはないし
日本の出版社はなぜかページ数制限があることが多いんだけど
海外にそれはないし
606デフォルトの名無しさん
2024/11/16(土) 22:41:34.37ID:ZUJ+jDQV 加筆してvalueとcomputationの説き起こしから始めて本当にMoggiのアイディア書くかなぁ?
米田の補題が工学応用できるとかいう主張と衝突する気がするんだけれど。
米田の補題が工学応用できるとかいう主張と衝突する気がするんだけれど。
607デフォルトの名無しさん
2024/11/17(日) 08:11:12.88ID:RK7ri1yG レポよろ
608デフォルトの名無しさん
2024/11/17(日) 09:07:13.97ID:zx90fdBd ぷりぷりです
609デフォルトの名無しさん
2024/11/17(日) 14:35:29.88ID:895B27h0 4万近く出してわざわざレポだけする奴なんているの?
圏論入門と同じでそれらしいキーワードだけ出して終わりの可能性高いのに。
圏論入門と同じでそれらしいキーワードだけ出して終わりの可能性高いのに。
610デフォルトの名無しさん
2024/11/17(日) 19:34:30.56ID:A63wUj4E まぁそもそもHaskellで圏論持ち出す必要ないしな
生産性上がらないよ
生産性上がらないよ
611デフォルトの名無しさん
2024/11/17(日) 19:42:07.02ID:bAlb8WtH Haskell、コーダー界隈で圏論勉強会が流行していた時期、あれは何だったのか?
612デフォルトの名無しさん
2024/11/17(日) 20:00:10.23ID:895B27h0 圏がグラフの拡張みたいな概念だったから、グラフ理論みたいに有用なプログラミングにつかえるアルゴリズムがあるんじゃないかってことでやってたように見えた。
モナドも説明したかったようにみえたけど、結局圏論の勉強を踏まえた説明はでてこなかった。
モナドも説明したかったようにみえたけど、結局圏論の勉強を踏まえた説明はでてこなかった。
613デフォルトの名無しさん
2024/11/17(日) 21:17:15.64ID:U7PWp5lE614デフォルトの名無しさん
2024/11/20(水) 04:56:53.37ID:vcDCbnyw プログラムは合成できないといけないって当然のことを、いちいち圏である必要があるとか言い換えるオレ天才だわー
615デフォルトの名無しさん
2024/11/20(水) 18:55:46.60ID:QVKMRnqI616デフォルトの名無しさん
2024/11/21(木) 00:16:43.88ID:r2/mXbdf 集合論と圏論の抽象度がもし同レベルならたしかに圏である必要はないな
必要ない情報は捨象されるべきだと言われれば何も反論できない
だから抽象化マウントは強いんだ
必要ない情報は捨象されるべきだと言われれば何も反論できない
だから抽象化マウントは強いんだ
617デフォルトの名無しさん
2024/11/21(木) 01:45:46.56ID:bAf4oZLa 抽象化すればプログラムしにくいと思うけど
618デフォルトの名無しさん
2024/11/21(木) 19:02:52.56ID:fTdZV0pc プログラムが圏になるためとかいうクソしょうもない理由がモナド導入の理由って本当か?
圏論っていうか圏じゃん。モノイド構造も米田の補題もなにも出てこないんだが
圏論っていうか圏じゃん。モノイド構造も米田の補題もなにも出てこないんだが
619デフォルトの名無しさん
2024/11/21(木) 21:57:07.56ID:r2/mXbdf 型構築子を導入すれば関手もモナドも勝手についてくる
型を必要とするすべての言語で同じことが言える
これも抽象化
型を必要とするすべての言語で同じことが言える
これも抽象化
620デフォルトの名無しさん
2024/11/28(木) 10:04:33.91ID:p2Q1UON9 haskellでスクレイピングがやりたいんだが
arch linuxのリポにはscalpelがない
別言語でやったほうがいいかな?
arch linuxのリポにはscalpelがない
別言語でやったほうがいいかな?
621デフォルトの名無しさん
2024/12/04(水) 21:11:42.90ID:D3PBVzJs ディストリで全部パッケージ化してくれてるとは思えん
stackかcabal入れて自分で管理するんじゃね?
ローカルに1GBくらいのライブラリ入るし重複しないようにしないといかんが
もちろんseleniumとか使うにしてもpythonとかrubyのほうが楽やろ
stackかcabal入れて自分で管理するんじゃね?
ローカルに1GBくらいのライブラリ入るし重複しないようにしないといかんが
もちろんseleniumとか使うにしてもpythonとかrubyのほうが楽やろ
622デフォルトの名無しさん
2024/12/08(日) 23:12:57.17ID:G2o8fSXB おおむね10^-300前後(-400乗は無理だった)精度の任意精度少数。
定義済みの中ではPico(10^-12)までは定義されてる。
下の定義のE300/10^300/F300を書き換えれば任意精度の浮動小数型が作れる。
(F300がPicoとかNanoとかの型)
ただし、pi/sin/sqrtなどの倍精度/単精度の浮動小数型用関数/定数が使えなくなるので四則演算を駆使して自作する必要がある。
import Data.Fixed
data E300
instance HasResolution E300 where resolution _ = 10^300
type F300 = Fixed E300
定義済みの中ではPico(10^-12)までは定義されてる。
下の定義のE300/10^300/F300を書き換えれば任意精度の浮動小数型が作れる。
(F300がPicoとかNanoとかの型)
ただし、pi/sin/sqrtなどの倍精度/単精度の浮動小数型用関数/定数が使えなくなるので四則演算を駆使して自作する必要がある。
import Data.Fixed
data E300
instance HasResolution E300 where resolution _ = 10^300
type F300 = Fixed E300
623デフォルトの名無しさん
2024/12/19(木) 15:03:02.64ID:NXRHTsH0 add (x,y) (a,b) = (x+a,y+b)
これをaddを定義せずにarrowで簡単にかく方法はありますか
これをaddを定義せずにarrowで簡単にかく方法はありますか
624デフォルトの名無しさん
2024/12/19(木) 16:15:15.91ID:hCGKCs/t arrowてなんすか
625デフォルトの名無しさん
2024/12/19(木) 19:27:09.72ID:gIJYmlNm 富士通のスマホ
626デフォルトの名無しさん
2024/12/20(金) 01:32:43.30ID:/9ZUXmih スマホでHaskellを簡単に書く方法はないかな
627デフォルトの名無しさん
2024/12/20(金) 02:01:04.72ID:I9azuXSK >>626
今はキミの言うところの「簡単」ではない環境で書いてるってこと?
今はキミの言うところの「簡単」ではない環境で書いてるってこと?
628デフォルトの名無しさん
2024/12/20(金) 02:04:07.41ID:/9ZUXmih629デフォルトの名無しさん
2024/12/20(金) 15:54:59.07ID:IOWVZ3it スマホでHaskell書く必要ある?
ないよね
ないよね
630デフォルトの名無しさん
2024/12/20(金) 22:08:57.75ID:uE9QxZQGレスを投稿する
ニュース
- 【箱根駅伝】日テレのバイク中継カメラ接近で波紋… 選手が怒り露わ「どけ!」 SNSも苦言「カメラ邪魔すぎ」「かわいそう」「危険」 [冬月記者★]
- トランプ氏の予言「我々は大恐慌に向かっている」 [お断り★]
- 「女子アナが自ら性接待」人気女性アナリストが目撃した衝撃飲み会を具体的証言「今もテレビに出てる…芸能界はヤバイな」 [muffin★]
- 【芸能】森香澄、「女性に『カワイイ』って言える男性が少なすぎて言える人が無双する」「素直に言えるだけでモテる」 [muffin★]
- 【旭川】アパートの家賃滞納の24歳男、催促に来た管理会社の人間を金属パイプで殴打 逮捕後も留置所で警官に唾を吐きかけ再逮捕 [シャチ★]
- 「私は犬じゃない」出された食事に、ミサキは徐々に追い詰められた…入管で潰えた「日本が好き」 [少考さん★]
- 【三賀日恒例】!omikuji丼!damaで豚丼381円を出すスレ
- しんぶん赤旗「政府はプラスチック生産削減へ責任を果たせ。海がプラごみに汚染され、クジラやウミガメがプラごみを飲み込んでいる」 [932029429]
- 22時ワイ「少し目を閉じるか」今ワイ「ファッ!?」
- 今からツーリングに行くけどこの時間から開いててのんびりできるところ。
- 【悲報】高校生「親ガチャを言っても仕方ない。自分の人生を自分で切り拓くべき」 [288593948]
- 【悲報】異世界アニメ、飽きられる [874629454]