X

関数型プログラミング言語Haskell Part34

1デフォルトの名無しさん
垢版 |
2021/12/17(金) 12:57:26.37ID:NPioGyUL
関数型プログラミング言語 Haskell について語るスレです。

Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/

前スレ
関数型プログラミング言語Haskell Part33
https://mevius.5ch.net/test/read.cgi/tech/1581326256/
2デフォルトの名無しさん
垢版 |
2021/12/17(金) 12:57:57.45ID:NPioGyUL
過去スレ一覧
32) https://mevius.5ch.net/test/read.cgi/tech/1548720347/
31) https://mevius.5ch.net/test/read.cgi/tech/1506447188/
3デフォルトの名無しさん
垢版 |
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
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
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)
6デフォルトの名無しさん
垢版 |
2021/12/20(月) 09:52:21.45ID:ZumN5JOf
https://qiita.com/mod_poppo/items/a6317294ba1e39b1c3b3

コメント欄に毛の壁現る
7デフォルトの名無しさん
垢版 |
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/
12デフォルトの名無しさん
垢版 |
2021/12/20(月) 23:17:06.32ID:ceMzU2Ib
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
ちゃんと出るじゃねーか...
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ではない)
数(特に浮動小数点数)まわりの関数でなみだ出てくるのは多少同意
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)
21デフォルトの名無しさん
垢版 |
2021/12/23(木) 21:27:02.59ID:cmpFYqPS
Twitterで

ohagiya UCLA

で検索すると岡部健さんの学歴にけちを付けてる人が出てくるね
22デフォルトの名無しさん
垢版 |
2021/12/23(木) 23:57:52.67ID:MjSWMWRR
ハリウッド映画でよくある、酒場でのウィットに富んだ大人の会話の一種では?
0時を過ぎると、酒瓶を割って拳で語り合う・・・いまその状態では?
夜が明けると、互いを理解し絆が深まる。
そして生涯の友となるのでは?
23デフォルトの名無しさん
垢版 |
2021/12/27(月) 09:38:29.17ID:hZ17KgJk
https://ken-okabe
.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年、ロート製薬流で進めるキャリア支援

ロート製薬が副業をいち早く導入した「超人間的」な理由

ロート製薬会長が「副業を受け入れない会社は発展しない」と断言する理由
25デフォルトの名無しさん
垢版 |
2021/12/28(火) 08:27:45.42ID:FaceSKSV
https://mobile.twitter.com/matusita2012/status/172883696091791361
https://twitter.com/5chan_nel (5ch newer account)
2021/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"
みたいな書き方がしたい
2021/12/31(金) 03:53:55.07ID:aP8qPSMg
自己解決したけどデータが多いとスタックが...
>countword . countchars . map chkspand $ " 1313 13 111 rfr fdf"
>5
2021/12/31(金) 14:45:34.52ID:KqmzC1Ir
リストみたいなただのデータコンストラクタだったら、いくら長くてもスタック関係ないのに
リストを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"
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

上手く行きました
イテレータのパターンマッチ目からウロコ
2021/12/31(金) 20:42:25.11ID:aP8qPSMg
>>30のこれ
iterator (0:1:xs) = 1 + (iterator xs)
内部で
1+1+1+1+...が積みあがって最後に計算されるの?
32デフォルトの名無しさん
垢版 |
2021/12/31(金) 20:58:03.01ID:bqUePCKa
>>31
それは処理系の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が積みあがらないはず
2022/01/02(日) 21:09:40.82ID:OOMiLRw0
ghciで確認
>>30はスタックオーバーフローで止まった
>>34は止まらないからctr-Cで止めた
2022/01/03(月) 00:17:58.15ID:eS7vipFo
OOPでも、整数を他のオブジェクトとは全然違う形式にしないと
計算が遅過ぎてダサくなるよね

逆にオブジェクトの方を整数と同じようなGC非依存みたいな構造にする手もあるか
37デフォルトの名無しさん
垢版 |
2022/01/03(月) 08:08:25.82ID:hLrwvjQQ
まぁコレは趣味による
Haskellでは性能面より可読性を重視するからな
それも使う人次第だけど
>>34のようにすればメモリも時間も節約できるけど可読性は失われる
どこまで我慢するかだけどオレは計算時間もメモリも線形までなら我慢して可読性を重視する
>>34だと入力に比例して要求されるスタック量が増える
線形までならしょうがないと思う
どのみち入力が大きくなるにつれてシステムが大きくなるのは元々しょうがないんだしその時の比例定数の違いまでなら我慢する
今具体的にやりたいことがあってその線形オーダーの無駄すら許されない状況なら考えるけど
2022/01/03(月) 11:20:12.64ID:TEX8BSo6
>>37
今回のお題はワードカウント、ファイルサイズがギガになる場合を想定
スタックなりヒープなりを消費しない手法は?です
Cなどで実装した場合、ループでカウントして再帰なしスタックもヒープも消費なしとか(可読性は...)

他にマルチスレッドで分割カウントした時の手法とか(ディスクのIOで律速か)
39デフォルトの名無しさん
垢版 |
2022/01/03(月) 12:59:34.38ID:hLrwvjQQ
今回の場合1ワード消費するたびにスタック一個消費するから必要なメモリリソースが倍以上になる可能性もあるから意味はあるかな
特にコレは>>34の方法だと必要なメモリリソースがデータ保持する分を除けばlogオーダーになるからな
しかも読み込んだデータは順次捨てていけるし(そこまでのカウント結果を保持しないといけないので有限オートマトンでは無理だけど有限オートマトン以上、チューリング完全以下、こういう計算クラスは名前ついてるのかな?)
個人的にはこういうときメモリ線形、時間線形までは許さないと大した事できないことが多いのでそれ以上のこだわりは持たないようにしてる
数学的研究対象とかにするなら別だけど
2022/01/03(月) 15:29:08.17ID:TEX8BSo6
>>39
今回なにを確認したのか
それは、Cで組むような単純繰り返しを同じ感覚でヒャッハーとhaskellの遅延評価で行うと
ヤバイと言う教訓とそれを回避する手法
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

と入れると楽しいよな
44デフォルトの名無しさん
垢版 |
2022/01/11(火) 17:47:50.88ID:rZde0CTm
>>43
ひどすぎるだろこれ
可哀想に
45デフォルトの名無しさん
垢版 |
2022/01/14(金) 10:48:22.13ID:3PF6dXYX
最新の怪文書も読んだけどさ、毛の壁は毎回毎回威勢だけは良いんだよなw
たとえば「ちくわは民事でもやる!」「ちくわはもう詰み」(9年前)
「ちくわはもう死に体」(7年前)とかさ。
死に体なのに、つい最近もブログで恨み節w
ネズミ一匹、始末できないなんてだらしがないな
46デフォルトの名無しさん
垢版 |
2022/01/15(土) 18:49:30.83ID:chCIM2fB
質問です
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の結果を自分で勝手に“メモ化”してよきにはからってくれているんでしょうか?
2022/01/16(日) 13:40:56.61ID:rC9oNTrC
メモ化は独自実装ではなく仕様

何かの文章は嘘
でも騙されたことがないので被害が存在しないし、加害者も存在しない
49デフォルトの名無しさん
垢版 |
2022/01/16(日) 14:36:08.72ID:f2QwXzzi
>>48
仕様なんですか?
Language Reportかなんかに書いてありますか?
50デフォルトの名無しさん
垢版 |
2022/01/16(日) 14:39:15.35ID:f2QwXzzi
何かの文章は "ウォークスルー Haskell" というやつでした

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入れて明治的に正格評価してもらってるんですけど標準でメモ化してくれるなら消せるしスッキリするし、あるいは明示しないと他の処理系だとしてくれないなら残しとかないといけないし
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.
56デフォルトの名無しさん
垢版 |
2022/01/27(木) 08:50:29.18ID:NJ4yaxSd
https://qiita.com/lucker_summer/items/baa68e681872de44d5f8

コメント欄ひどすぎだろ
@stken2050(これ岡部健)が非道いので皆さん通報してほしい
2022/01/27(木) 10:10:34.06ID:orDFdZXN
毛さんは昔から色々酷いが
>>56のコメ欄の流れだけでいうと単に@Zuishinが分が悪いわ
珍妙な独自用語は早めに芽を摘まないといけない
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)
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/
2022/01/28(金) 09:50:56.34ID:F+QYYxM3
>>60
そもそも質問者が来たと思ってないんだろう
強いて言うなら「命令者」が来たと思われてるね
63デフォルトの名無しさん
垢版 |
2022/02/01(火) 14:44:50.86ID:VXi8EI6O
Qiitaの運営どうなってんのこれ

https://qiita.com/lucker_summer/items/baa68e681872de44d5f8#comment-ceab8639f8275f297563
64デフォルトの名無しさん
垢版 |
2022/02/01(火) 15:19:04.39ID:rr+/bjEX
https://twitter.com/kuratan/status/114732100682391552
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に書かれている高階関数の定義に疑問を呈するのが筋
それをしてないせいで論理的にぶっ飛んで見える
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に行く
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がかなり自由度高かった気がする。
2022/02/10(木) 14:08:35.36ID:Rx8BtNec
単純に難しいからだろ
元の言語仕様はシンプルなのに、ソフトウェア工学的なノウハウに基づいて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
>>79
こいつに“H“はムリ(爆)

“三擦り半“で昇天するよw
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のソースってどこに転がってます?
2022/02/14(月) 20:10:36.04ID:TSLH56nb
>>82
ghc haskell ソース でググれば見つかる
2022/02/14(月) 20:56:01.04ID:uQiQyHca
ソースを1行も読まなくても分かることがいくつかある
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の開発者メチャメチャ優秀っぽいし」と思った次第
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
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桁くらいは余裕というのは確認済みなんです
週末にでも桁数増やして実験してみます
ありがとうございました
2022/02/15(火) 00:40:37.96ID:2crEr/EW
Haskellの多倍長計算、昔は大変だったけど今はよくなった、みたいな記事が10年前くらいに書かれてた
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億桁くらいまで実用的な?速度で計算できるもんなんですね
ボチボチやってみます
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型で混ぜて作ったせいか
ボトムアップ方式で作るのが間違えなのか。

まだまだ初心者の愚痴。
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でも同じようにあった問題で綺麗な書き方よりも早い書き方が重視される
そうこうしているうちにどんどん人は離れていったよ
理念が現実に負けたのだと思う・・
2022/05/25(水) 23:31:09.11ID:HGLTMsh1
あとそうだ
なによりもデバッグがあまりに困難すぎるし
デバッグのために型制約とか何バカやってんだろな・・って思うことしばしば

作業環境が悪いのがまるで改善されないから嫌になる
2022/05/27(金) 23:36:10.66ID:IybSybG6
型はコンパイル時にしか存在しない
モナドクラスもコンパイル時にしか使わない
実行時に使われているのはモナドのインスタンスのみ
そのインスタンスは任意の言語で再発明できる
どの言語でデバッグしても困難は同じ

結局は再発明をやらなきゃ実用的な知識が身につかない
2022/05/27(金) 23:58:56.33ID:IeVDSTdQ
今だにprintfデバッグに頼ってるなんてHaskellくらいのものかもね・・
2022/05/28(土) 00:21:10.26ID:1xwNIN3l
Cのライブラリに丸投げする効率化を考えれば
デバッグの効率化にはこだわらない方が丸投げしやすい
2022/07/18(月) 03:26:49.61ID:zDzunRmU
なんでここまで人気なくなったんだろうな
2022/07/18(月) 14:14:58.82ID:IRYfc5Qz
声の大きい人たちが使わなくなっただけでは
2022/07/19(火) 17:39:52.93ID:6V/PH7AR
個人が言語を自作できるレベルになってる説
団体は必須ではない
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]]

を見てもどう見てもパターンマッチしてるのに?
何故?
2022/08/08(月) 19:26:19.73ID:NwZYLTPj
>>106
リストの長さがマッチしてない
長さが2でないリストをどこで作ったのかはソースを読めば分かる
***は長さが3のリストを返す
2022/08/09(火) 10:46:53.89ID:VUIfOlq+
>>107
あ、ホントだ
コピペミスかなんかか
thx
2022/08/11(木) 18:04:41.32ID:9dSVJvSP
おまいらこのクソ暑い夏をどうにかするCOOLなコードをHaskellで簡潔に書けんのか?
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))
この~はどういう文法なの?
2022/08/25(木) 21:14:39.81ID:+PRPT5FW
https://www.sampou.org/haskell/tutorial-j/patterns.html#tut-lazy-patterns
2022/08/25(木) 21:15:08.79ID:3SQ1xNiu
stack でwxHaskell インストールしようとしたんだが、
> stack install wxHaskell
とすると
Unknown package: wxhaskell
とでてインストールできない。
StackだとwxHaskellインストールできないの?んなわけないと思うんだが。
公式見てもstackの場合の方法が書いてない。
2022/08/29(月) 23:25:47.74ID:mJ1Da6QY
stackage に入っていないからじゃないかな?

最近アップデートされていないし
並行処理も問題ありそうだし…

stack と GUI で検索したらこんな記事があった
https://www.stackbuilders.com/blog/gui-application/
2022/08/30(火) 19:30:33.33ID:XzDfLd3k
みんな中央集権クラウドに騙されてる
2022/09/10(土) 21:18:15.99ID:Jyomj+F3
ボトルネックは事実上バグと変わらないから
結局パフォーマンスを考えると
Haskellはバグが混入しやすい言語と言える
しかも入出力は正しいから解決がクッソ厄介で実用性はない
2022/09/10(土) 23:20:56.83ID:6vG8VA3K
ロマン思考言語_
2022/09/11(日) 00:14:39.94ID:HO9VQuZG
まあ合ってるな
2022/09/20(火) 01:04:13.74ID:zJWv8hkC
ghci --show-options | wc -l
Output: 1200
2022/09/24(土) 01:20:51.22ID:v6+/ywPo
書き込んでいた専門家たちが書き込みをやめたので下火になっている感が出ているわけですね。
2022/09/24(土) 02:26:09.94ID:vtJ0GRzX
イヤ、でも実際した火なんじゃない?
やっぱりHaskellで“性能”と“可読性”の両立を図るのはかなり難しい
やっぱり言語の生い立ちというか、性格というか、性能面、特に速度面の性能面はどうしても優先順位が低い、しかし実務上はもちろんそこは最重要factorだからそこがでないとした火になるのもやむを得ないかと
2022/09/24(土) 03:13:03.66ID:v6+/ywPo
仕組みはわからんが計画的だろ。
言い換えると、騒ぐ奴らがうざいから騒がなくなるまで下火なんだろう。
2022/09/24(土) 03:21:31.25ID:cIbikbIQ
てか元々世界のメジャーな言語に躍り出ようというつもりなんかHaskellコミュニティにはないのかもね
Haskellコミュニティなんて学者の集合体でしょ?
実務になんか元々興味ないんじゃない?
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がこの状態。
2022/09/27(火) 19:55:55.43ID:CVmtKHy4
Haskellに飛びつく層は
Rustには飛びつかんよね
Rustには面白みが無い
2022/09/27(火) 20:30:27.34ID:Ctbd02WQ
とにもかくにももう少しHaskellは速度性能を出すための方法の標準化について詰めてほしい
Haskell2010の文章のメモ化の部分の詰めがダメすぎる
実情のGHCとかで提供されてるものと差がありすぎて意味がわからん
GHCでの研究成果をもっと標準仕様に取り入れてほしい
何をどうやったら確実にドレコレはメモ化されるかハッキリ文書化してほしい
2022/09/28(水) 02:23:18.14ID:4krAnsc6
整理する気がないからな
どんどんカオスになって行く
2022/09/29(木) 03:37:20.42ID:IPtlf3/T
いまだにGHCというとGuarded Horn Clausesの方のGHCを先に思い出す
2022/10/01(土) 19:53:52.72ID:7gwAD0df
1番実用的な関数型言語やその影響が強い言語って何になるの?
2022/10/01(土) 20:00:27.14ID:IQLzQmPp
Cじゃね
2022/10/01(土) 22:58:35.36ID:76wmMtDf
標準規格を一番忠実に実装した奴が優勝みたいな考え方は全然数学的ではない
2022/10/03(月) 18:02:59.08ID:LGdcguEE
lisp系やocamlとか。
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
2022/10/14(金) 22:28:23.68ID:GVf4qcGD
ラムダや <- や case で束縛される変数の値は二回以上計算されない
seqは計算のタイミングを変える効果しかない

難しいのは = で定義される名前だが
= の右辺で頑張ってseqを使っても報われない
2022/10/14(金) 23:54:06.57ID:91YiMGAd
でもhaskell 2010 reportには評価順を変える方法はseqしか規定されていない
GHQなどの実際の処理系でそれ以外のタイミングでメモ化されたりするのはあくまで処理系の独自仕様でしかない
ある処理系でメモ化されて早かったプログラムが別の処理系で同じ速度で処理してくれる保証などどこにもない
2022/10/15(土) 08:05:01.19ID:/BlEbfcm
>>138
もしかして、個人の感想のようなものを悪と思ってるのかね
そして客観的事実 (ようするに絶対正しい事実) と称するものが正義だと

個人の感想を排除するべきという思想はどこにも規定されてないでしょ
2022/10/15(土) 09:49:59.76ID:fUoifk8c
メモ化に関しては俺も>>138と同じような感想持ってるな
2022/10/15(土) 10:11:19.74ID:/BlEbfcm
ある人の感想が別の人の感想と同じになる保証はどこにもない
保証がなくても特に問題ないと判明したならそれでいい
2022/10/15(土) 10:19:45.48ID:+yYiQ+MP
一番嫌なのはネットに転がってるすごいスッキリしたプログラムがあって「おお、すげぇ」と思っても結局それはGHCのメモ化の恩恵でしかなくHaskell本来のそれではないので別の処理系では通用しないものであったりする事
事実上GHCが標準なのでGHCで早ければ「早いプログラムが書けない事はない」のではあるけど、じゃあGHCはどんな時は気をきかせてメモ化してくれるのか、どんな時はその事を利用して早い、しかし短い、わかりやすいプログラムを書けるのかはHaskell 2010 reportではなくGHCの方の仕様書を読むか、実験してみるかしかない、しかし前者はそもそもGHCの仕様書そのものどこにあるかわからないんだけど見つけてもおそらくメモ化の理論は相当に難しい論文レベルの話、さりとて実験で詰めていくのはデバッグと同じレベルのかなり苦痛な作業で、しかも完成したものは大概速さのために可読性をかなり犠牲にしないといけないものになる、当然可搬性も落ちてる
GHCがやってくれてる事全てでなくてもいいけどネットによく転がってるフィボナッチ数列とか素数生成とかのGHCの良きに計らってくれる機能を利用したスッキリした、けど早いプログラムくらいまでは標準化して全ての処理系で動くようにしてほしいけどね
2022/10/15(土) 11:46:05.26ID:fUoifk8c
まあ実際のところメモ化を考え出したら
Lispと同じように可読性を犠牲にした速度重視のコードしか生まれないので・・
メモ化は考えないのが筋だけどそうすると実用性は皆無であってつまり
2022/10/15(土) 15:59:55.52ID:/BlEbfcm
LispとHaskellの違いで重要なのは
モジュールの定義をインタラクティブにやらないこと
ghci起動時に全てのモジュールが定義され最後に
mainや他の式を評価・実行するところだけがインタラクティブ

そもそもmodule Main whereとかいうのは式ではない
式ではないから評価順序という考え方がそこでは通用しない
2022/11/03(木) 00:12:52.63ID:A4mGU1Ql
GHCがデファクトだしこだわりがなければ他のコンパイラを使うこともないでしょ
とはいえ関数型言語って速度を重視するタスクには向かないでしょ
速さを求めるのが間違い
2022/11/03(木) 01:14:31.73ID:+2fbLBnA
Symbolicsが失敗した事例を思い出す
あれも理想を追求したはいいけど何をやってもひたすら遅く
他社はそれより早く安い機材を次々と繰り出していた
当然惨敗は必然だった
2022/11/03(木) 06:02:33.84ID:A4mGU1Ql
静的な型付けによる頑健性だとrustがあるしなぁ
2022/11/03(木) 11:53:42.15ID:k32TY8HF
結局のところHaskellの言語策定をしてるコミュニティは学者さんのコミュニティで実用的な性能を向上させる事にそもそも興味ないから実務面での有用性を期待するのは無理やね
2022/11/04(金) 01:33:00.25ID:ggdePY4U
まあそうだろうな
2022/11/05(土) 10:09:23.49ID:nyx0vuE5
>>142 の指摘って他の言語のGCにもそのまま当てはまると思う。
151デフォルトの名無しさん
垢版 |
2022/11/06(日) 14:53:18.67ID:p6fV7yyc
Haskellで開発している会社ってどこがあるの?
検索するとHERPやTuruCapitalしか出てこない…
152デフォルトの名無しさん
垢版 |
2022/11/06(日) 16:00:47.05ID:8Hp8Ymz2
GHC9.4.3 リリース
2022/11/06(日) 16:35:55.22ID:MgGeIf3l
Haskell wikiに載ってるやつ見るに、部分的にHaskellを使うって感じかなぁ
2022/11/06(日) 18:08:25.72ID:SOHxH3HV
>>151
一時期富士通が募集してたことがあったような
もうないからやめたのだろうけど
155デフォルトの名無しさん
垢版 |
2022/11/06(日) 19:47:21.37ID:p6fV7yyc
あと朝日ネットの募集要項はHaskellがありました
朝日ネットに応募してみようかなぁ。
HERPはリファレンスチェックが面倒…(上司とかと会話したくない)
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を使う意味がない、みたいな…
2022/11/07(月) 11:14:09.19ID:uMWKgAVp
オーバーヘッドを気にせず頑健性を取りたいとき
うーん、具体例が出てこない
2022/11/07(月) 12:17:58.82ID:y2qdzeiV
>>157

> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか
2022/11/07(月) 12:18:26.38ID:y2qdzeiV
誤操作スマソ
2022/11/08(火) 09:36:33.50ID:VjMrXhSs
消費者目線ではGHCはフリーソフトだからコストが高いとは言えない

コストという物差しが万能ではない具体例がいま出た
2022/11/09(水) 01:51:03.18ID:3Bh922De
まあ学者さんたちのお遊びだからね・・
2022/11/09(水) 10:38:48.12ID:wL144bz5
どういう結果になるのか契約とか誓約しないのがオープンソース
お遊びにしかならないという保証もしてない
2022/12/02(金) 14:29:56.51ID:fOU9+Fqp
Haskellまだイキテル?
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に採用なら関数型プログラミングでは
一番使われることになるんだろうか
2022/12/13(火) 21:33:17.94ID:s5AI7uvQ
ちょっとやってみるかと思ったら
今は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を引き抜くなんてゲーム業界はすごい
169デフォルトの名無しさん
垢版 |
2022/12/15(木) 11:15:36.01ID:3Q63kYiw
いや15年越し
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と比較してどの程度でしょうか?多いですか?少ないですか?
2022/12/23(金) 15:37:27.80ID:Rf1vHPUu
サーバとクライアントのサンプルプログラムを練習で書いたのだけど
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?
2022/12/23(金) 20:44:32.65ID:Gou4DLut
>>171
明示的に変換しなきゃいけないのは事実だがその原因はC言語じゃない
言語と無関係だからこそHaskell2010でもC言語でも同じデータ構造が使える

>>170
データだけ見ればメモリ使用量を同じにすることは可能
2022/12/29(木) 17:00:27.04ID:ZBF5EoRT
モノイド、関手は習得できたけど
自然変換で躓いてる
2022/12/29(木) 23:24:37.93ID:pM4wQIt0
今haskellでguiを作るなら何がいい?
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい
2022/12/30(金) 12:18:58.51ID:/hxsvxNk
ところでwxHaskellが流行らないのはなぜ?
wxが流行ってないからかな?
2022/12/30(金) 13:53:40.82ID:FXsz7+hW
本当に必要なのはドリルの大量生産ではなくドリルでもなく穴だからかな
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
技術評論社のせいでは?
2023/01/04(水) 05:08:58.65ID:peYJ5uzH
メンテナーが次々と逃げ出してるのが象徴的・・
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる

遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい
184デフォルトの名無しさん
垢版 |
2023/01/04(水) 18:10:50.86ID:HUTbVNXS
PureScriptに移行しようぜ
正格評価で使いやすいし
2023/01/05(木) 03:59:19.12ID:PBBtO4Nd
しかし無限数列とか表現できなくなるのがなぁ
2023/01/05(木) 12:24:48.41ID:dQdtWkz5
あんなもの現実には扱えないからな
適当な数値を上限にしとけばいいだけ
2023/01/05(木) 13:19:36.00ID:PBBtO4Nd
イヤ、“表現できる”ってとこに意味があるんだよ
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)
2023/01/17(火) 00:55:50.42ID:zIKNxshB
無限の長さの [a] を仮に廃止して他の言語と同じような方式に変えたら IO a のような型になる

生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある
2023/01/17(火) 01:31:37.81ID:PP1OxyD+
生物学関係ないな
2023/01/17(火) 03:13:49.00ID:zIKNxshB
言語は死なないとか復活させればいいだけとか思うならもう生物学関係ない
そう思わないなら関係ありそう
2023/01/17(火) 08:07:29.90ID:Inpyi8aQ
無意味な比喩表現
2023/01/19(木) 01:20:46.84ID:cE+DUb2P
クラウドは中に人がいるのか無人なのか調べられないので
人間と機械を混同したのではなく不確実にした
2023/01/19(木) 07:47:39.45ID:7wHhBGeN
意味不明
もう少し文章を書く練習をしろ
2023/01/19(木) 17:42:25.26ID:ugYwIpAQ
嘘を書くのをやめろって言われない努力はしてる
現に、嘘だと言われない
2023/01/19(木) 20:45:58.03ID:LuniV29G
間違ってさえいない文章
真偽以前に中身がない
2023/01/19(木) 20:49:17.03ID:LuniV29G
それっぽいだけで少し読めば大したことすら書かれてないのがわかる
2023/01/19(木) 21:18:32.97ID:ugYwIpAQ
「わかる」と「意味不明」は矛盾しそう
どっちかが嘘ついるのでは
2023/01/19(木) 21:33:25.41ID:QROh3L3M
>>199
お前読解力もないのか
もうこのスレ来るなよ
2023/01/19(木) 21:38:24.06ID:CHvJHSS4
お前も反応すんなよ
2023/01/20(金) 01:52:23.49ID:jpIFaaML
いくら話題がないからって
2023/01/21(土) 13:30:02.33ID:ms4pFp6J
職業倫理が苦手です
2023/01/21(土) 16:31:20.60ID:c9rqNig0
スレチ
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)
2023/01/30(月) 02:11:06.80ID:jVdK8GQm
>>205
fork (f, g) h = (f h, g h)
では?
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
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)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?
2023/02/17(金) 00:17:58.82ID:x2uQcODA
ChatGPTにいろんなサンプル書かせて勉強させてもらってるわ
2023/02/18(土) 07:53:47.68ID:pwjCq/Fb
>>208ですがスレチですかね
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)
211デフォルトの名無しさん
垢版 |
2023/02/23(木) 22:53:40.11ID:3VcdShfb
すみません
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが

具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。

v1 :: Maybe a
v1 = Nothing

v2 :: [a]
v2 = []

型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。

また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)
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に対して等値性を定義するための仕組みです。
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
214デフォルトの名無しさん
垢版 |
2023/04/29(土) 14:07:24.45ID:AoTbqg9O
マルチポストだが教えてくれ
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
2023/05/01(月) 00:30:45.06ID:PDTetkfq
>>214
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician
2023/05/03(水) 20:58:10.10ID:ioA1phJ7
>>214
英語で調べてもそんな話出てきたことはないな。
2023/05/03(水) 21:14:18.69ID:ioA1phJ7
これにもそんなストーリー書いてない
https://pdfs.semanticscholar.org/59d7/a0f5c341ab450e2893eb73384895524bbebd.pdf
2023/06/09(金) 14:58:05.85ID:GYy2ex4t
lispやらカリー=ハワード同型やらの関連性は
数学的な意味では遥か前だし実装上の話かな
https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics
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が展開されてる回数を確かめる方法はありますか?
よろしくお願い致します
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 )
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です
よろしくお願い致します
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 )

です
よろしくお願い致します
2023/06/25(日) 15:08:12.64ID:CDxt6lPg
型クラスの単相性制限とか、関数従属性とか、とか。。。
的外れなこと言ってたらごめん。
2023/06/25(日) 15:23:50.61ID:CDxt6lPg
なんか Bard とかにつっこんでも情報得られるかも
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を使うとどうやらこうやら書いてあるんですけどなんのことやら
2023/07/03(月) 23:45:49.20ID:QPaqlNti
値とmoduleどっちも含んだdata作ればいいのでは
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一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと
2023/07/04(火) 11:11:04.93ID:rN492ZrW
この記事では剰余環を作っているみたいだけど、参考にならないかな

https://qiita.com/gummycandy/items/9abca700eea7f46626e4
2023/07/06(木) 01:04:07.84ID:sds/6LG1
みなさん情報ありがとうございます
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
https://ideone.com/3Lhc4z
230デフォルトの名無しさん
垢版 |
2023/08/05(土) 13:07:07.29ID:1IOAcn45
hage
2023/09/04(月) 14:41:20.09ID:FcZAE9nJ
haskellは廃れてきてるな、悲しい
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの
232デフォルトの名無しさん
垢版 |
2023/09/16(土) 21:21:50.35ID:6682wM15
数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利)
なぜ多くの言語では集合に順番がないのでしょうか?
233デフォルトの名無しさん
垢版 |
2023/09/16(土) 21:25:49.38ID:6682wM15
等価判定演算子では順番を問わないが、
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが

一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?
2023/09/16(土) 23:06:28.20ID:XG1/1lYn
順番がないやつと順番があるやつは
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?

逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?
235デフォルトの名無しさん
垢版 |
2023/09/16(土) 23:13:33.62ID:6682wM15
数学的概念として等価だったりどちらが特殊とか言えないのは納得しています

ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です
2023/09/17(日) 02:24:17.53ID:yNwKlKA6
データ型としての起源としては
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様
2023/09/17(日) 02:39:39.55ID:XqeO/FaW
組み込み型とユーザー定義型の区別をなくす思想はある
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる
2023/09/17(日) 23:47:13.96ID:70jB6wMR
初心者は++を使うけどなれたら<>を使ってる人が多い気がする
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな
2023/09/18(月) 10:00:00.93ID:E5yF50jH
俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません
俗説が正解だった時代などない
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で作ろうとしてるのですがバグがあるのでしょうか?
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で作ろうとしてるのですがバグがあるのでしょうか?
2023/09/19(火) 19:58:16.28ID:QCYT99dv
すみません、書き込むボタンの反応がなかったので連投になってしまいました
2023/09/19(火) 20:14:24.31ID:a563RtWW
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
2023/09/19(火) 20:14:45.64ID:a563RtWW
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
2023/09/19(火) 20:18:27.88ID:a563RtWW
ありゃ俺も連投しちまったすまん
なんか5ch重いっぽいね
2023/09/20(水) 08:38:40.03ID:I55f6i4N
for i in * ; do touch anotherdir/$i ; done
247デフォルトの名無しさん
垢版 |
2023/09/20(水) 08:53:25.46ID:I55f6i4N
>>246(bash)でお茶を濁した

perlが明日消えてなくなるらしいのでHaskellをPerlの代わりに使おうと思う
正規表現とグロブ、ファイル入出力はできた
他に何かあるかな
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
2023/09/22(金) 13:06:36.18ID:8SLDLfd5
https://jutememo.blogspot.com/2008/06/haskell-join-listdata-intersperse.html
2023/09/22(金) 14:01:02.50ID:NjV4q9P3
putStrLn $ intercalate " " $ map show l
これでいけました
2023/09/22(金) 14:01:12.58ID:W8j4O+ex
泥臭いだけで罪があるかのように日常的に刷りこまれてるから
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな
2023/09/27(水) 15:30:51.70ID:9Ywamwi5
{-# LANGUAGE BinaryLiterals #-}
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ
2023/09/27(水) 17:59:16.99ID:k7PwLxD8
readが定義されたモジュールは別のLANGUAGEってこと?
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とは型があいませんでした
2023/10/11(水) 17:39:54.48ID:Fikp0OWy
>>254
import Data.Function
groupBy ((==) `on` snd)

結局かっこは使うのだけど、これがあなたの求めるものでしょうか
2023/10/11(水) 22:05:36.63ID:1pnnvG+R
括弧を使わずにじゃなくてラムダを使わずにでした
まさに欲しかったのそれです
ありがとうございました!!
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
2023/11/16(木) 18:41:54.01ID:wXoixzgD
岡部健、復活したよ!

エックス内を
“Ken140291“
で探してみて下さい。

最近登録したばかりの様です。
2023/11/18(土) 16:03:54.22ID:sLhTkQlu
自分で書き込んでいるのでは・・・。
2023/11/19(日) 15:31:44.23ID:/inwpH7b
>>248
init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] でOK
2023/11/20(月) 09:46:08.35ID:sZ0M6Dsh
>260 打ち間違えた!
lnlt$foldl(\a x->a ++show x++" ")[][1,10,3]
が正解。
2023/11/20(月) 14:32:44.66ID:4MiKC4cJ
>>258
ぎゃははははははは
2023/11/20(月) 21:45:30.49ID:Jf1v4QK8
https://github.com/ken-okabe/functional-programming-from-scratch-ja#before

> Unkown(気づいてない)

ウンコウンわろた。
2023/11/20(月) 23:57:47.37ID:N43MAaAU
スレチ
2023/11/21(火) 12:01:48.14ID:MS7pneIs
毛の壁くん復活してたのか!!
2023/11/21(火) 12:21:46.16ID:W0g+S6dW
https://archive.md/m7008

毛の壁(岡部健)についてはここが詳しい
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というのはどういう文法なのですか?
リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね?
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)
2023/11/23(木) 07:24:43.49ID:WRBO39fy
<-はパターンガード修飾子と呼ぶのですね
初めて知りました
ありがとうございました
2023/11/24(金) 17:42:26.91ID:V3Fz2AWZ
毛の壁のTwitterの新しいアカウントは

Ken140291
FPFSstutorial
leadmove3648637

です!!
271デフォルトの名無しさん
垢版 |
2023/12/04(月) 12:27:24.28ID:GjmDAseS
>>270
ぎゃっはっはっはっはw
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
オワコン
2024/02/29(木) 01:38:01.78ID:d2gqoSk4
windowsにインストールできんみたいだなcabalがエラー?
まあwindowsでやるなってことだな
276デフォルトの名無しさん
垢版 |
2024/03/03(日) 23:47:35.89ID:9XAeTkis
モナドについて、床下配線に例えられたり、世界を受け取って副作用後の世界を返すと(IOモナドについて)語られたりするのが当時は分からなくて、考えた結果

何かから値を取り出し、関数適用して(その関数が)何かに値を戻す「動き」をモナドという。

って結論になっていたのだが、IOモナドも含めてもっと良い例えはないかと考えた結果、

モナドとは、アウトソーシング(外部依頼)を数学的に表現したもの。

という結論に至った。

アウトソーシング先が(数学の)外の世界だとIOモナドで、同じ数学の世界だとその他のモナド。

それならHaskell自身は「この関数実行しておいて~」って依頼出して結果を受け取るだけだから、
副作用はないと言う主張に矛盾はない(のか?)
(もしくは、IOモナドはHaskellが受け取れる形の値を返すような入出力の「マシン語」を返してる?)

そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。
2024/03/04(月) 00:46:59.53ID:XMYw3zR0
箱の中に処理したいデータが入ってるけど一緒にIOウイルスも入ってて
普通に箱を開けるとIOウイルスが外界に漏れて困るから
もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて
密封した上で内側の箱を開けてデータを処理する

そうすると箱の中に処理されたデータとIOウイルスが入った状態になる
これを延々と繰り返すのがIOモナド

ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな
278デフォルトの名無しさん
垢版 |
2024/03/04(月) 01:02:22.82ID:vyClhVzf
ふーむ。
仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。
(do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり)

そう考えて私のアウトソーシング説が出来た感じですね。
Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。
2024/03/04(月) 01:22:40.61ID:XMYw3zR0
doの場合は1行ごとに新しい箱が作られてる
順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから
必要な順序は保証される

外界の予測不能な状態を全部1つの箱の中に押し込んで
箱の外側の処理装置製造工場は全部予測可能(純粋)にしてる感じ

数学の敗北の意味はよく分からないけど
実用性のために予測不能な状態を持ち込んだことかな
2024/03/06(水) 10:29:39.18ID:Yy7OLBEk
なんか大げさな例えを使いたがるやつが増えたなぁ
コーディングの上でなんの役に立つんだが
2024/03/06(水) 15:29:14.97ID:soRPwZI7
「末尾呼び出ししたい関数をデータコンストラクタで置き換える」という仮説は役に立つけれども
(>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること
282デフォルトの名無しさん
垢版 |
2024/04/10(水) 04:46:37.45ID:+L19CyUd
WindowsでghcupをインストールするのにWSLが不要になって
PowerShellだけで導入できるようになってる
2024/04/13(土) 09:43:59.70ID:p3ysjEUv
rustスレで知ったけどhaskellを正格にして依存型を入れたidris(idris2)つー言語があるんだな
2024/04/13(土) 10:37:58.47ID:VEwLcqlL
idrisまで興味があるのならHaskell/Elm/Rust/Zigの流れで開発されているRoc-langも見ておくと良い
特にstatic reference counting周り
2024/04/13(土) 22:46:49.50ID:p3ysjEUv
色々知らないのがあった、ありがとう
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(数学)の外で初期化される変数とも考えられる。
2024/05/17(金) 10:56:06.61ID:kEVlBeR0
参照カウントは0になれば即座にデストラクタを呼び出す
つまり呼び出しを遅延しない
正格にすることと参照カウントを入れることは実質的に同じこと
2024/05/18(土) 22:55:12.58ID:HEnIptqp
cabalのバージョン上がってたので
windowsで試したらちゃんと動いたわ
気にかけてくれてたんやな
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
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に対応していない物があり確認したいです。
2024/06/23(日) 21:13:21.29ID:1+Xj+JzS
度々すみません。

GHCのWindows11対応についての質問の件
Windows11機にGHC8.xをインストールして試した所

問題なくコンソールから実行して
結果のデータファイル生成できました。

取り敢えずはこれでやってみます。
2024/07/03(水) 21:32:31.40ID:FVo2vRsM
Functorってf : value -> valueの関数をfmap f : computation -> computationの関数に拡張してあれこれするけど、
そもそもvalue -> value関数がいらなくない?

わざわざvalue とcomputationを区別するから難しくなるのであって、
全部Functor適用した体で computation -> computationの拡張関数だけ使うように
設計しなおせばもっと普及するんじゃない?
2024/07/03(水) 23:29:27.98ID:XPii5wC3
何を言っとるんじゃw
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の概念は百害あって一利なしなんじゃまいか。
2024/07/04(木) 14:17:13.04ID:PVQ//B0J
>>295
君の言うcomputationってどういう定義?
2024/07/04(木) 19:36:46.28ID:CIK9cQRa
しらんがな。
一応マジレスすると、valueと似ているけどなんか違いがあるもの、ぐらいだろう。

自分の意図としては、”計算機”上で生成されたデータ。
計算機というのは電子計算機に限定されない。
電卓でもいいし、そろばんでもいいし、計算するときのもととなる
数の表現とかをcomputationと呼んでも差し支えないと思ってる。

たとえば、
value:27
に対して電子計算機上だと
11011(2)
で表現されるものがcomputation。

そろばんだったらそろばんの玉の配置。
計算してパチパチ音が出るのが副作用。

逆に言うとvalueの方がわかり難いと思う。計算している計算機の外の世界の
何か数的データみたいな感じがしてわざわざそんな区別いるか?と思う。
2024/07/04(木) 23:38:08.08ID:iUDrYol2
>>297
computationはvalueの一つ
`5 + 3`がcomputation
`Just 8`もcomputation
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だと思う。
2024/07/05(金) 00:53:37.68ID:DkqpNxkH
>>299
おかしくないよ
OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?

`九九を唱えてゴサンジュウゴの結果を導き出す`のがcomputation
導き出された結果と導き出す計算を区別して
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概念自体はそういう関数を計算して得られた計算結果なんじゃないですかね。
そう考えると何か不都合な例とかあります?
302デフォルトの名無しさん
垢版 |
2024/07/25(木) 23:56:39.51ID:zdgCFOr2
stateやioモナドってHaskell以外でも使われてるの?
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並み)ので、選択肢から外される理由も減ってきた気がする。
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モナドという型で分かれているのでネストの深いループの中でも入出力時に型を意識する必要があるので、そういうバグが大分減る。

手続き型関数型関係なく、ネストの深いループの中のデータが今どんな状態かを頭の中で把握出来る人はそう多くない。

だから、デバッグ時に解きほぐしていくんだが、関数型の方が切り分けしやすいかも?
2024/07/26(金) 06:20:50.81ID:EERDttnJ
Halkellのその先が見たい?
Rustにその答えが全て詰まっている
307デフォルトの名無しさん
垢版 |
2024/07/26(金) 08:11:21.54ID:3P5OnSpM
どなたか教えてください。
数学の構成や命題の証明に使うならば、HaskellとOCamlはどちらがよいでしょうか。
2024/07/26(金) 12:15:47.14ID:f34zQmtT
Rustは、メモリが見えすぎるのがイヤだー
大したもの書かないから、GCありでお願いしたい
2024/07/26(金) 17:24:09.33ID:HoH4md/R
>>307
漠然としすぎ
やり直し
2024/07/26(金) 17:58:43.47ID:dth0vnjc
数学の構成?
311デフォルトの名無しさん
垢版 |
2024/07/27(土) 00:29:15.86ID:r3Qeb3es
>>307
Coqという証明支援プログラミング言語をお使い下さい。

Haskellでも型プログラミングでゴリゴリ自力で命題の証明出来るそうですが、ある程度自動化されている専用言語の方が良いでしょう。
Coqはその中でも日本語情報が多いです。
312デフォルトの名無しさん
垢版 |
2024/07/27(土) 00:43:27.29ID:r3Qeb3es
>>306
実用言語、特に組み込み分野を置き換えるのに期待されてる。
特集記事が無くてもお題スレ見たいな、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万とか、無限に桁上がりしない構造になる)
2024/07/27(土) 13:46:44.73ID:f/jP9uGd
>>307
結局こいつがなんの返信もしてない時点で適当に書き込んでたってことがわかるよ
真面目に相手をしないほうがいい
315デフォルトの名無しさん
垢版 |
2024/07/27(土) 16:19:23.58ID:Z663WedI
>>313
ありがとうございます。
2024/07/27(土) 17:29:46.87ID:sW1zoNGb
>>311-313>>314は同一人物だよ
騙されないで
2024/07/27(土) 21:26:10.11ID:wvv58UYW
知ってた
318デフォルトの名無しさん
垢版 |
2024/07/27(土) 23:34:35.07ID:r3Qeb3es
>>316
他人を語ったつもりもないけどね?(ID見れば分かるんだし)
ちなみに>303-305も私だ。

1日2-3回くらいしか見に来ないから、書き込めることはまとめて書き込んだ結果です。
2024/08/01(木) 12:24:32.72ID:XzWUPxYY
プロセッサメーカはAIブームと見るやこぞってAI処理特化プロセッサの開発競争
関数型言語に特徴的な処理に特化したプロセッサは誰も作ってくれない
2024/08/01(木) 16:36:21.75ID:rWBa8MOA
それ必要か?
321デフォルトの名無しさん
垢版 |
2024/08/04(日) 23:21:47.06ID:y1wQ9MUm
>>319
スタックコンピューターは、Lispの時にぽしゃった。
2024/08/05(月) 21:33:27.17ID:FcOscapW
日本企業がLisp専用マシン作ったが第五世代コンピュータプロジェクトが💩で何らまともな成果をあげられなかったからね。
323デフォルトの名無しさん
垢版 |
2024/08/11(日) 17:42:41.08ID:7wNJGHOt
麓から山頂を目指す

foldl: 徒歩で登り切ったら滑り台で向こう側へ降りてゴンドラで再び山頂へ戻りゴール
foldr: ゴンドラでいきなり山頂へ。そこから向こうの麓まで滑り台で降り、そこから山頂へ徒歩で戻る。但しある場合は滑り台を途中で降りてそこから山頂へ徒歩で戻ってゴールにしてもよい

こういうこと?
324デフォルトの名無しさん
垢版 |
2024/08/12(月) 21:44:35.95ID:EAbaqMlq
Preludeのライブラリドキュメントのページが最新のChromeでよく応答なしになるんですが!
現代PCでもプチフリを起こすページとか凄いですね!(怒)
325デフォルトの名無しさん
垢版 |
2024/08/13(火) 01:44:03.00ID:3Ko8/FbA
>>324
hoogle使いんさい。
326デフォルトの名無しさん
垢版 |
2024/08/13(火) 01:45:16.10ID:3Ko8/FbA
>>323
foldl = 末尾再帰を高階関数化
foldr = 普通の再帰を高階関数化
2024/08/15(木) 10:15:40.11ID:oieuoNWz
yesod を導入しようとして調べているのですが、今は stack 前提で cabal での利用は考えられていないのでしょうか?
導入記事では cabal の記述がありますが、
yesod init すると stack new 使えと表示が出ます。
2024/08/15(木) 10:30:38.08ID:oieuoNWz
yesod-bin 1.6.2.3 です
2024/08/19(月) 21:35:37.73ID:CkMOJkdv
rambda.jsのfold相当の関数を教えてください
2024/08/24(土) 05:56:24.20ID:WHJg2+SV
今ってghcupの時代じゃないの?
久しぶりにHaskell書こうと戻ってきた浦島太郎がstackを最新にしようと思ったら
ghcupとか紹介されてミーハーだから飛びついたわ
2024/08/24(土) 07:38:35.09ID:E4GXjFrz
Gカップ、ハアーハアー
2024/08/28(水) 21:41:00.96ID:HNkudrYA
Youtubeでしばらくの間丁寧にHaskellを解説していた人が
ある日「やってらんね、俺はもうHaskellでプログラミングしない」と宣言してHaskellから離れたのを見て
所詮その程度の言語なんだなとガッカリした
2024/08/28(水) 23:56:40.97ID:FNkSebMV
>>332
Haskellはモナドの実証言語という側面が強いから、モナドは結局よくわからないものという結論に達した今では話題もないし、Haskellで視聴回数稼げないんじゃない。
334デフォルトの名無しさん
垢版 |
2024/08/29(木) 12:50:10.24ID:D5XAFbVY
自作ライブラリの(+)とPrelude.+が被って、Prelude.+使いたい時一々修飾するの面倒くさいしコードも汚くなります
被った時はデフォルトでPrelude.+を使うよって指定することはできないのですか?
2024/08/29(木) 12:53:31.30ID:1jszJs3n
>>332
+1
2024/08/29(木) 12:54:42.14ID:1jszJs3n
>>334
自作の方を修飾
337デフォルトの名無しさん
垢版 |
2024/08/29(木) 14:06:11.00ID:gtm/5H5m
>>334
両方使う予定があるのに、何故わざわざ同じ記号にしたのか…。
自分は自作の方を(.+)とか、微妙に変えてる。
338デフォルトの名無しさん
垢版 |
2024/08/29(木) 14:06:50.30ID:gtm/5H5m
使用例:
1 .+ 1
>2
2024/08/29(木) 16:27:15.59ID:Nq0HdWD9
やだやだ!修飾したくない!
どっちの+か特定して自動的に選択してよう!
2024/08/29(木) 16:57:49.70ID:YXIyrRhD
何の自作型だか知らんがSemigroup実装して(<>)にでもすれば
2024/08/29(木) 17:40:12.63ID:aIGVGYPU
就職しろよ
342デフォルトの名無しさん
垢版 |
2024/08/29(木) 20:48:46.38ID:gtm/5H5m
>>339
独自の(+)を自動で使い分けてもらうには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クラスになることはできませんでした。
結局どうしていいか判らんどからのワカランドで落ち着きました。
345デフォルトの名無しさん
垢版 |
2024/09/03(火) 18:48:39.95ID:yXFMfbtr
もしかしてData.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#並みにはなった?かな?)
347デフォルトの名無しさん
垢版 |
2024/09/04(水) 15:29:34.52ID:ZA+d8/X/
リストが遅い、しかし多くのデータ構造の構築はリストから(fromList)。
つまりコンストラクション回数をいかに減らすか、一度コンストラクトした物を使いまわすか、ということですか
2024/09/04(水) 16:12:14.21ID:LSV34QaC
lisp系言語はリストの操作が速いのに…
349デフォルトの名無しさん
垢版 |
2024/09/04(水) 22:00:37.92ID:r/FGXedG
>>347
そういう事。
そして、そういう事を考えさせる時点でどうなの?ってのもある。

文法好きだし、普段使いで困らないけど、速さ求めるなら他の言語使うよねって。
350デフォルトの名無しさん
垢版 |
2024/09/04(水) 22:22:04.95ID:r/FGXedG
>>348
遅延評価だからってのも地味に大きい。

自分はプログラミング言語「数学」の(未完全な)実装として見てるので、遅延評価じゃないと困るが。
2024/09/05(木) 00:27:39.10ID:mpd8c2G1
普段使いって何してんの
エロ画像収集とか?
352デフォルトの名無しさん
垢版 |
2024/09/05(木) 04:50:37.33ID:l0HQxOqp
PythonやPerlの代わりにテキスト処理に使ってる。
2024/09/05(木) 18:56:54.85ID:k3Tfomjz
>>351
それ面白いと思って書き込んでんの?
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 ファイルなので
ブラウザに頼らずダウンローダーを描いた
355デフォルトの名無しさん
垢版 |
2024/09/06(金) 09:52:13.17ID:zzPaKLb6
補足
修正前: jpg ファイルのイメージ
正: jpg ファイルのバイナリデータ
356デフォルトの名無しさん
垢版 |
2024/09/07(土) 19:33:25.03ID:9PXNQc4Q
長大な処理となる関数を実行途中にRAM使用量が嵩んでいくとします
中には解放できる部分もある場合について、
このままガベコレせずに進んでいったらいずれ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化できますか?
2024/09/09(月) 11:45:42.71ID:CQiqzRbc
>>356
黙って動いてるフリをする
2024/09/26(木) 23:16:42.97ID:eAiUCVhs
この言語まだ息してるのか?
2024/09/27(金) 00:41:23.43ID:ppX7mFe8
おまいらは圏論はちゃんとマスターしたか?
最近圏論のお勉強流行ってないみたいだが
2024/09/28(土) 08:56:06.97ID:boijaUwp
そもそもHaskellに圏論必要ないよ
2024/09/28(土) 11:20:55.86ID:szplrxFB
背景の理論を理解してないとbrainf*ckと同列のクソパズル言語にしか見えない
2024/09/28(土) 11:30:45.96ID:D4fCa7Ze
米田の何ちゃらの辺りで心が折れて終了
2024/09/28(土) 11:48:20.49ID:M6f6jLKS
>>363
> brainf*ckと同列のクソパズル言語

話がそれるけどbrainf*ckがパズル言語なのは100%その通りだよ

しかし構文パーサー、インタープリターやトランスレーター、JITエンジンの実践入門として
丁度良いからこれだけ根強い人気なんだぜ
366デフォルトの名無しさん
垢版 |
2024/09/28(土) 20:40:40.54ID:SDDTPU1M
>>361
流行ってないのか…。
個人的にはHaskellよりも圏論の方に関心が移ってるのに…。

んでも、圏論はHaskellでなくても、全てのプログラミング言語の裏側でも動いてるし、それこそ算数の裏側でも動いてる。

モナドが表に出てきてるからHaskellには圏論が必要って思うかもだけど、モナドって言わないで do形式だけ教えて知れっとしてても良いし、「こういう動きの演算子」としてモナドを紹介するだけでも良い。

受験数学とちゃんと向き合う数学みたいなものだけど、変にモナドを理解しようとすると深みにはまる。
(それはそれで楽しいけど、楽しめる人だけだよね…)
2024/09/29(日) 07:33:19.55ID:bBvJfaeS
ラムダと束縛変数をマスターしなければdo記法もマスターできないのを
すっかり忘れるぐらいポイントフリーが普及してるでしょ
2024/09/29(日) 08:45:10.72ID:3/NLN/+f
コーダーが数学の学習に使える時間なんて限られている
時間や基礎知識が足らないので、難解な数学を攻略するのはほぼ不可能
大学生時CSや数学の講義で身に付けておくしかない
2024/09/29(日) 09:32:49.44ID:twIz68VA
難解な数学を攻略できるなら
日本ではコーダーにはならないよな
2024/09/29(日) 10:15:01.09ID:AteoOTMZ
業界入るのに難解数学不要
プログラミングにも不要
数学分からんのでgoogle入るのは無理だけど
2024/09/29(日) 11:01:25.51ID:bBvJfaeS
人工的なルールに依存するのがクソパズルだが
自然界でなおかつ野生のマウンティング的なルールにも依存しないことが数学の目的のひとつだね
2024/09/29(日) 20:36:16.00ID:JU2vTa1F
圏論が全てのプログラミング言語の裏で動いてるとか適当なこと書くなよ
373デフォルトの名無しさん
垢版 |
2024/09/30(月) 00:30:17.34ID:Kh4w53R0
>>368
高卒の自分でも理解できるんだから、難しいわけではないんだけど。
何度も出てる通り、必ずしもモナドを理解する必要はないし。

そもそも自分がプログラマーの頃だって、12-13時間働いた後も新しいプログラミング言語や数学勉強してたぞ。
(新しい仕事のために学びたくない言語に時間使う事も)

高卒が圏論みたいな大学数学学ぶには専門用語がそもそも分らんから、用語が分かるまで遡った。
(アーベル圏のアーベルが分からないレベルからのスタート)

自分に投資できないと淘汰されるぞ。
374デフォルトの名無しさん
垢版 |
2024/09/30(月) 00:59:39.85ID:Kh4w53R0
>>372
適当じゃない。
モナドは(主に)逐次処理に現れる構造なので、Haskellのような遅延評価で逐次処理自体を作らないといけない(逐次処理をエミュレートするためのモナド)言語でない限り、意識することすらない。
(だからC言語で言う i = 0; の「;」とか言われる)
2024/09/30(月) 03:08:44.15ID:g+sPZSfB
>>372
沈黙させる努力をするよりも(全ての)人の話を聞くのをサボる方が良い
努力は時間がかかる
一瞬で報われるものは努力ではない
2024/09/30(月) 12:40:29.07ID:+8KmLjt4
圏論の極々一部のモナドを主語をデカくして圏論ガーとか言ってる人は何も分かってないんだなと思うけどね
俺みたいに数学かじってた人からすると
圏論を勉強すると「あ、この概念はこの分野のこれのことか」ってわかるけど
そうじゃない人は何のことを言ってるのかわからんと思う
専門家でも自分の担当外の圏なんて知らないのに
圏論という括りで語ろうとする人はそういうのすら理解してない
2024/09/30(月) 13:52:28.73ID:CD9F70e/
やっと普通の人が出てきて安心した
2024/09/30(月) 13:59:18.70ID:pkON+G7q
>>376
数学者向けの圏論の教科書の応用、具体例は全て数学。
数学知らない人が読んでも分かるわけがない。
応用、具体例、演習をCSの分野から採った教科書が望まれるが、書くのが難しい上に面白くするのも困難。
大体CSすらちゃんと修めてないエンジニアはやはり読めない。
CS自体ベースに位相、代数、グラフ理論と数学使うし。
2024/09/30(月) 14:09:03.81ID:rwCIuc1C
趣味でやる人に良くいるんだよね。
応用各分野に囚われずに、圏論そのものを学習したい、一般圏論を研究したいって人。
これは数学で言うと、集合論と同じく数学基礎論の分野。
380デフォルトの名無しさん
垢版 |
2024/09/30(月) 19:05:45.94ID:8C0MP56i
操作的意味論とか表示的意味論でプログラムを数学の話にして、その数学を圏論で整理するって話
だからアーベル圏とか具体的な圏はあんま出てこない。
やるとすれば
デカルト閉圏:ランベックがλ計算のモデルになると発見して関数型プログラミング的に重要
クライスリ圏:Moggiが計算効果をカプセル化したときの根拠の圏
ローベア理論:代数的効果をちゃんと理解するときは必要らしい。操作的意味論と表示的意味論と同じようにモナドの理論と妥当性が成り立つようだ。
ぐらいじゃね。
2024/09/30(月) 21:09:21.28ID:CVtPTYpb
じゃあラムダ計算(のモデル)だけを考えよう
タプルや代数的データ型は使わない
それでもモナドの具体例を作れるのを知ってるのが専門バカ
知らないのが一般国民だ
382デフォルトの名無しさん
垢版 |
2024/09/30(月) 21:29:13.05ID:8C0MP56i
一般国民。
λ計算のモデルでモナド作ってなにかいいことあるの?計算効果結局表現できないんじゃ?
拡張してcomputational lambda calculusやるって話?
2024/09/30(月) 21:47:09.45ID:CVtPTYpb
ないんじゃないか
ただ「具体例を出せば、いいことがある」とは誰も言ってない
というファクトをチェックするのは悪いことではない
384デフォルトの名無しさん
垢版 |
2024/09/30(月) 21:53:56.34ID:8C0MP56i
いいこと(メリット)があるから具体例が作られると思うんだが。
それは単に具体例の適用が間違ってるって話じゃね?
なんとなく作れるから群構造作ってみましたとかとか目的不在で作ったらそら何がいいかわからんし。
モナドだったら、各計算効果を圏(クライスリ圏)の中に閉じ込めることに成功しました(カプセル化)。
計算効果は強モナドの構造を取っているようです(計算効果の研究のとっかかり)。
みたいないいことあるから流行るんでしょ。
2024/10/01(火) 04:04:03.18ID:PZ96E01/
別にそれ圏論を持ち出す必要ないよね
ハイおしまい
2024/10/01(火) 09:39:15.78ID:KbL1rq/V
>なんとなく作れるから群構造作ってみました
ルービックキューブのことか
2024/10/01(火) 09:46:07.52ID:y60InQ2q
数学屋さんもね
研究では圏を使うが
学生に教えるときは
圏を記述に使わず教えたりする
388デフォルトの名無しさん
垢版 |
2024/10/01(火) 19:23:20.12ID:7kn4RxVI
圏論の話題になったから振ったのに。まあいいよ。
圏論根拠で(ソフトウェア工学的にじゃなくて)数学的にカプセル化が実現されてるってすごい
ことだと思うけどね。

>ルービックキューブのことか
ルービックキューブ解くという目的あるんなら構築する意味あるんじゃない。
2024/10/01(火) 19:34:54.43ID:YZm15ve9
群持ち出したところで解けないよ
2024/10/01(火) 20:18:43.32ID:PZ96E01/
圏論がプログラミングの問題解決に寄与するわけないのにね
ただ当てはめてみたってだけのことを過大評価しすぎ
2024/10/01(火) 20:52:10.03ID:u1x9FxNe
雪田修一の「圏論入門 Haskellで計算する 具体例から」ってどうなん?
2024/10/01(火) 21:10:04.55ID:YpLGkLDy
板チ
目的と手段を混同したら予選敗退
393デフォルトの名無しさん
垢版 |
2024/10/01(火) 21:16:26.45ID:7kn4RxVI
どうなんって何を知るのに?出たときに立ち読みしただけだけど。
2024/10/01(火) 21:16:56.98ID:Ig6Tf0ue
>>391
青本と似てて定義の後に具体例を出すみたいな感じだけど
具体例が数学科の人じゃないとわからない内容ばかりなので
結局個別の分野をやらないと理解できないと思う
2024/10/01(火) 21:38:18.13ID:Ig6Tf0ue
圏論をやりたいならまず代数学をやるべき
それだけでだいぶ見通しが違う
396デフォルトの名無しさん
垢版 |
2024/10/01(火) 21:42:08.00ID:4kH314XL
>>390
モナドの効用で自分の把握してるのは

・数学やHaskellの様な遅延評価の場合、逐次処理を表現できる
(これは変数を使いまわさない場合は、関数合成で十分だが、変数を使いまわすときはモナドじゃないと使いまわせない)

・副作用のある関数を使っても参照透明性は保たれている

・モナドは入れ物前提の概念なので、空の状態を使って例外処理をまとめることができる

正直、普通のプログラミング言語にも役立ちそうな3つ目は実感はしてないけど、ネットで例外処理よりモナドの方が優秀っぽい記事を読んだ

2番目もマルチスレッドとか最適化には役に立ちそうではある
(マルチスレッドなら正格評価版HaskellのIdris2やRustだと思うが)
397デフォルトの名無しさん
垢版 |
2024/10/01(火) 22:05:17.67ID:4kH314XL
圏論全体だと…当たり前のことを構造として研究してるだけなので、圏論というよりはHaskellの型クラスとの合わせ技で関手(Functor)の方がfmap的なのを他の言語にも導入すれば役に立つかも

圏論の関手を一言で言えば(関数も含めた)型変換
(Hakellだと入れ物前提にすることで、関数ごと型変換を実現。本来はもっと柔軟)

自然変換は一言で言えば単位変換とか、大文字小文字の変換
398デフォルトの名無しさん
垢版 |
2024/10/01(火) 22:16:21.15ID:4kH314XL
モノイドは条件が結合法則だけなので、ほぼ結合法則そのものがモノイド
(その割には繰り返しとか数え上げに現れる構造)

そしてモナドも構造はそっくりなので、入れ物前提のモノイドとも考えられる
(モナドの再帰はループ処理でスタックを消費しないし、数え上げは逐次処理と考えられる)
2024/10/01(火) 23:08:20.75ID:KbL1rq/V
バグを無くすこと自体が目的になりがちなのが数学とプログラムなんだよね
真の目的のため、デバッグを二の次にするやつが正しいと言われても・・・
それって証明とかあるんですか
2024/10/01(火) 23:21:35.19ID:syLuNokt
>>397
大文字小文字の変換が自然変換の部分kwsk

>>399
目的と手段を区別したら、手段は二の次だと言うのは予選敗退者のポエム
2024/10/01(火) 23:25:15.70ID:syLuNokt
>>396
> 2番目もマルチスレッドとか最適化には役に立ちそうではある
それもう一人のsimonが取り組んだけどモナドは否定された
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)が作れる。
ほら、分かってみれば「なーんだ。そんなことか」でしょ?
404デフォルトの名無しさん
垢版 |
2024/10/02(水) 07:53:32.91ID:AFS53MaU
この場合、整数同士の足し算に対応する、文字同士の足し算が作れる。
(ただし、整数と文字列で集合の大きさを合わせる必要がある。0-25とか1-26とかで循環する集合)
405デフォルトの名無しさん
垢版 |
2024/10/02(水) 07:55:35.67ID:AFS53MaU
んで、プログラマーはいちいち集合を合わせないで、エラー処理だったり循環リスト作ったりで対応するわけだぬ。
2024/10/02(水) 08:30:24.33ID:VSz9kg2E
数学の圏論テキストではカリー化の操作は良く使うが、カリー化の名前を付けて引用することはまず無いね。
2024/10/02(水) 08:47:20.09ID:wonXK6QE
>>403
大文字小文字の変換が自然変換になる事を(Haskellの例で)証明して、と言う話

(自然変換が何かは分かっているで、直感的に違うと思ったから訊いた)
2024/10/02(水) 09:21:51.83ID:ZmuRtoMU
大文字の文字列の型から小文字の文字列の型への変換と考えると簡単
2024/10/02(水) 09:24:29.51ID:ZmuRtoMU
リスト関手から集合関手への自然変換も分かりやすい。
2024/10/02(水) 10:25:28.13ID:xCLOcr8o
すまん嘘を書いた
自然変換では無くリストの圏から集合の圏への関手だった
2024/10/02(水) 10:27:20.94ID:ZmuRtoMU
大文字列、小文字列も同様に間違い
2024/10/02(水) 16:24:48.26ID:H02uk4bf
>>402
ただの記号で表現したら「0の逆数」とかいう表現を禁止するのが難しい
ただの記号ではない方がベター
413デフォルトの名無しさん
垢版 |
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型を圏とみれば同じ。
可換にするのは面倒くさい上に効率悪いけど、そういう関手を作ろうと思えば作れる。
414デフォルトの名無しさん
垢版 |
2024/10/02(水) 20:45:45.19ID:AFS53MaU
可換図にすると

   Char(小文字)
  ⇗
Int  ⇑toL ⇓toU
  ⇘
   Char(大文字)

ここで、小文字→Int, 大文字→Intが作れればtoLower, toUpperを直接作らなくても、関手の合成で作れる。
2024/10/02(水) 20:53:28.38ID:4E8lSXKR
出番ですよ >>399
416デフォルトの名無しさん
垢版 |
2024/10/02(水) 21:03:02.82ID:AFS53MaU
圏論の地平線でも書かれていたけど、圏論は直接的に役に立つというより、発想の転換の源泉になるそうな。
(なので、別に圏論分かったから偉いとかない)
2024/10/02(水) 21:18:36.03ID:JUMm5MLB
数学の研究には有用かも知れないが
プログラミングで
直接役に立つようなことはまず無い
2024/10/02(水) 21:42:50.80ID:Xrjxo4NT
どっ白け
419デフォルトの名無しさん
垢版 |
2024/10/02(水) 21:51:30.73ID:OPLMo7z3
プログラミング言語もどんどん数学に寄せているし、上のカキコみたいにプログラムの記述を
そのまま数学的対象とみなせるように改造していってると思う。本来は別物と考えるべきだと思う。

数学の研究といってもプログラム意味論の研究で、プログラムを数学の世界に写像したら
どう表現できるかということを研究していると言えるんじゃないかと思う。
数学の世界には、式の評価途中に発生する副作用といった概念がないので、現実のプログラムを
そのまま数学の世界に移そうと思ってもできないことの方が多い。
計算効果を圏論的に表現できたというのは、そういうプログラミング言語の数学化の一端みたいな
もんだと思う。
2024/10/02(水) 22:00:14.12ID:YWEZQEUD
副作用ってどうでもよくね
Haskellとかだとそもそも副作用ないし
421デフォルトの名無しさん
垢版 |
2024/10/02(水) 22:12:34.31ID:OPLMo7z3
現実のプログラムだと式を評価する途中で発生する副作用というのは普通だけれど、
これを表示的意味論、操作的意味論で数学の世界に写そうと思うと途端に難しくなる。
数学で式の途中に文字列をディスプレイに映し出す、みたいな概念はないから。

それを整理して副作用と呼んでも差し支えない概念を提唱してHaskellに実装しているんだよ。
実際、IOモナドの圏論的定式みるとこれが副作用?という表式してる。
全部後回しにしてフラッシュするというアイディアみたい。副作用をプログラムの最終局面で
実行しているから、式の評価途中の参照透明性も壊さない。なるほど、って感じ。
2024/10/02(水) 22:20:07.75ID:sFAdPyYV
ID:OPLMo7z3 = ID:AFS53MaU 本人か同レベル

複おじってレベル
2024/10/02(水) 22:24:19.37ID:YWEZQEUD
途端に難しくなるか?
副作用のない計算に変換する手順が教科書に書いてあるはずだが?
424デフォルトの名無しさん
垢版 |
2024/10/02(水) 22:29:49.51ID:OPLMo7z3
>>422
別の人。自分ならプログラムの記述を一回数学の世界に写すし。

>>423
副作用のある数学的関数ってある?
プログラム→数学
に変換するんだぜ。
副作用のない計算に変換する手順が数学の本に書いてあんの?
2024/10/02(水) 22:43:26.42ID:+kVmY7U4
>>424
別人とのことなので便乗

ID:OPLMo7z3 は ID:AFS53MaU が
> 大文字小文字の変換が自然変換になる事を(Haskellの例で)証明して
と問われて

>>413,414 を出してきたのは数学的証明だと思ってるの?
2024/10/02(水) 22:46:45.28ID:+kVmY7U4
>>424
或いはもっと直接的に、>>424は「大文字小文字の変換が自然変換」の真偽をどう考えているの?
427デフォルトの名無しさん
垢版 |
2024/10/02(水) 22:51:00.95ID:OPLMo7z3
定義が何もないのに何も言えるわけないじゃん。
数学でこういうものを定義します、これをプログラムのこれこれと対応付けます。
てプロセスないじゃん。
2024/10/02(水) 22:52:03.28ID:YWEZQEUD
>>424
先に副作用のないプログラムに変換するって言ってるんですけど
Haskellなら最初から副作用がないからそのままでいいけど
プログラミング言語の理論の本ならどれにでも書いてないか?
2024/10/02(水) 22:55:13.15ID:+kVmY7U4
>>427
了解

>>422の指摘通りだと納得しました
430デフォルトの名無しさん
垢版 |
2024/10/02(水) 22:56:24.21ID:OPLMo7z3
いや。プログラム意味論の本結構探し回ったけど副作用の記述は漠然としてて
扱えないわけじゃないらしいけど、具体的な変換なんて見たことない。
ちょうど伝統的なプログラム意味論で副作用どう扱われているか調べているんだ。
なんて本に書いてありましたか?
2024/10/02(水) 23:02:49.62ID:YWEZQEUD
どれにでも書いてあるだろ、whileプログラムをラムダ計算に変換する手順とか書いてないなんてことがあるわけがない
432デフォルトの名無しさん
垢版 |
2024/10/02(水) 23:06:08.21ID:OPLMo7z3
なんだ。いや聞きたいのは入出力とかの副作用だよ。
2024/10/02(水) 23:17:44.98ID:YWEZQEUD
入出力なんて代入に比べたら自明だろ…
そんなのいちいち教科書に書くかよ
434デフォルトの名無しさん
垢版 |
2024/10/02(水) 23:26:30.50ID:OPLMo7z3
書いてないのは自明だからではなくて、研究の方向性がどう転ぶかわからないからだと思う。
表示的意味論も出た当時の文献では副作用について語ってることが多い。
現代的な本になるほどD∞モデルつくってはいおしまいで数学的にきれいなところしかやらない。
2024/10/02(水) 23:36:01.67ID:JUMm5MLB
プログラムの仕様とその証明を数学で記述する本にあるだろうね。
2024/10/02(水) 23:37:10.87ID:YWEZQEUD
どこが非自明なのかさっぱりわからん
代入と違って入出力は垂れ流しだし、入出力は代入の特別な場合だろ
437デフォルトの名無しさん
垢版 |
2024/10/02(水) 23:46:11.64ID:OPLMo7z3
>>435
ホーア論理とか公理的意味論か。いやそれはないな。あっても一般に適用できないし。

>>436
関数型プログラミングだとプログラムをλ式に対応させて、プログラムの実行をそのλ式の簡約に
対応させるというのが理想的なモデルとして想定されることが多いと思う。
でもλ式はλ項からλ項への対応でしかないから、λ項を値(value)と呼ぶとすると
value から valueへの数学的関数でしかない。これには入出力とかの副作用を表現する余地がない。

つまり、
入出力があるプログラム→value から valueへの数学的関数
という対応付けをすると、入出力という特徴が数学世界では失われてしまう。
という難問があった、けどモナドで一つ解答が出た。
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モナド使ったプログラムは、その現実のプログラムが持つ特徴を表現できるλ式がないので対応付けられない
って言ってんの。
2024/10/03(木) 00:21:32.37ID:omgk7HiD
入出力なんてただの値のリストだろ…
2024/10/03(木) 03:50:19.64ID:KCHr29fD
圏論持ち出して愚にもつかないことをグダグダと…
それで何か効率良くなるならいいんだけど,何のメリットもないんだよね
2024/10/03(木) 04:21:38.74ID:zyXzLypu
圏論なんかより、遅延評価ならIOがwhnfの先頭に出てきたら実行すればいいって人類が気づいたのが本質なんじゃねーの
2024/10/03(木) 08:29:58.17ID:LNI2TnSo
最近の人類はseqのメリットを直接的に利用するコツに気づいとるんか
順調に進化しとるな
2024/10/03(木) 14:31:37.97ID:1wv2Oz28
コンパクトな言語仕様だが表現力は強力
数学をプログラミングに取り入れるメリットってまぁこんなもんでしかないでしょ
一方で静的に性質を決定しようとするやり方は一般的な人間の能力を簡単に超えてしまう
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 を返す、という動作をする。
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 が返ってくるということは変わらない。
449デフォルトの名無しさん
垢版 |
2024/10/03(木) 19:57:34.71ID:B2Xmf+Xl
というわけで、入出力があるプログラムというのは、こういう返り値の部分というか評価の最終段階の部分に「入出力の予約情報と返り値の情報がまとめられたもの」だったんだ、と整理しよう。
ただ、こういう「入出力の予約情報と返り値の情報がまとめられたもの」と長い文で表すのはよろしくないので、何か名前を与えた方がいいということで
computationと呼ぶことにする。

そうすると、Haskellでいえば、
純粋関数は、valueからvalueへの数学的関数
に割り当てることができたけれど、
入出力付きのプログラムについては、valueからcomputationへの対応
に割り当てるということが数学的に正当化できそうだ、ということになるわけだ。
450デフォルトの名無しさん
垢版 |
2024/10/03(木) 20:00:39.07ID:B2Xmf+Xl
訂正
computationというか、今でいう「入出力の予約情報と返り値の情報がまとめられたもの」を
数学的にうまく正当化するということが達成することができるのであれば、
入出力つきのプログラムを、valueからcomputationへの対応
に割り当てるということが正当化できるはずだ、と考えられる。
2024/10/03(木) 20:23:28.46ID:zyXzLypu
何言ってるのか全然わからん
ぶっちゃけ入力は関数の引数にして、出力は返り値にするように変換するだけでいいだろ
読み出し位置のカーソル管理が必要なら代入を使えばできるじゃん
452デフォルトの名無しさん
垢版 |
2024/10/03(木) 20:39:38.40ID:B2Xmf+Xl
よくわかんないけど、そういう入出力プログラムがあったとする。
そしてそれを引数付きで実行することを考えると
$(prog n)
こうなる。ここで、引数の部分の n はプログラムの記述に属さないといけない。
なぜかというと現実世界の「入力」部分をそのまま引数のところには持ってこれないから。
引数部分を入力にするにしても、別途入力されたものをプログラムの変数に割り当てる概念
みたいなのが必要になるし、それは関数の引数だからということでは説明にならないと思う。
だから、少なくともprogの引数部分はvalueじゃないといけない。
2024/10/03(木) 20:45:47.19ID:zyXzLypu
ポエムすぎて意味わからん。値のリストはvalueじゃないと?
454デフォルトの名無しさん
垢版 |
2024/10/03(木) 20:59:58.72ID:B2Xmf+Xl
値のリスト自体をそのまま持ってくればvalueということになるんだろうけれど、
$(prog n)
の実行結果として出てくるもので、計算効果の説明になるものであって、返り値の型を包含するもの
であればcomputationと判断せざるを得ないとかそういうことしか言えないです。
2024/10/03(木) 21:11:15.46ID:zyXzLypu
判断するって何言ってるの?
computationって定義は何なの?
ラムダ項を書き換えていく手続きが計算じゃないの?
456デフォルトの名無しさん
垢版 |
2024/10/03(木) 21:22:37.64ID:B2Xmf+Xl
valueとcomputationの違いは微妙で$(prog n)の実行結果として出てくるかどうかとか
計算効果が発露しているかというところで見極めるしかない、と理解している。判断する
というのは専門用語としては使ってない。
computationの定義はまた微妙だけれど、$(prog n)の計算効果込みの実行結果みたいな概念。

最後は超個人的見解だけど、「λ項を書き換えていく行為」というのは、どういう方法で表現して
どういう方法で簡約していくか?というところが決まってない。λ計算じゃないけれど、
1+1=2
という計算を暗算でやるか、電卓でやるか、そろばんでやるかという違いを出しても計算することに
変わりない。
暗算でやると、脳内物質の分量が変わるし、電卓だと電位が変わる。そして、そろばんでやると
「ぱちぱち」という音が出る。
2024/10/03(木) 21:30:24.72ID:zyXzLypu
❌決まってない
⭕知らない
間違えるなよ
2024/10/03(木) 21:31:19.82ID:zyXzLypu
お前の脳内にしかないお花畑に巻き込むのやめてもらっていいですか?
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に値を返す形の)マシン語を返して、ハードウェアに実行してもらうと考えるアウトソーシング方式)
2024/10/04(金) 05:52:21.21ID:EogKDI3R
>>460
ようするに副作用はないってことじゃん
462デフォルトの名無しさん
垢版 |
2024/10/04(金) 05:57:16.46ID:vLDssEdm
>>461
Javaは変数をクラスの外で作れないから、グローバル変数は存在しない。
けど、事実上のグローバル変数は作れてしまう。

ってのと、同じ。
アクションの中に副作用があろうが、マシン語を返していると解釈しようが、事実として副作用はある。
ただ、重要なのは副作用を伴っても参照透明性が保たれているってこと。
2024/10/04(金) 06:07:02.79ID:4jD3Hbcp
副作用が隔離できていることが大切
スレの基地外の隔離スレのように
2024/10/04(金) 06:24:04.70ID:EogKDI3R
>>462
それは例えばwhileプログラムから副作用のない言語に変換したあとの形式と同じ状態にすでになってるってことで、計算のルール上はもう副作用はないでしょ
465デフォルトの名無しさん
垢版 |
2024/10/04(金) 07:22:19.19ID:vLDssEdm
>>464
そうなんだけど、結局普通のプログラミング言語を使ってる人にしてみれば屁理屈でしかない。
見た目そのままで伝えるなら、純粋関数型言語の定義のまんま、「副作用を伴っても参照透明性が保たれている」でいい。
2024/10/04(金) 07:38:19.23ID:EogKDI3R
>>465
まあそのほうがいいか
上の方にいた彼はなんか脳内にこだわりがあって、普通の型付きラムダ計算以上のことをやってると思ってるフシがあったね
467デフォルトの名無しさん
垢版 |
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型の返り値を返すとする。
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である感じがする(あんまわかってない)。
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
という特殊な返り値の型を持っているため単純な合成ができない。
471デフォルトの名無しさん
垢版 |
2024/10/04(金) 19:29:03.13ID:tixO3LDq
Moggiのアイディア1の段階でcomputationの概念というのは解消してしまう。
PlotokinとPowerはそこが不満なんだろうか?
2024/10/04(金) 20:18:31.78ID:WSIC8Xt5
だから、副作用を隠してラムダ計算に変換する手続きは、世界をステートにする変換をした時点で達成されてるわけで、そんなの太古の昔から分かってたことだろ
IO aの定義読んでから出直せよ
2024/10/04(金) 20:30:15.44ID:SclsbEZF
日を跨ぐつもりならコテハンでも付けてくれんか
追えん
474デフォルトの名無しさん
垢版 |
2024/10/04(金) 20:44:30.01ID:tixO3LDq
>>472
だからそれはわかっているって。評価途中では実際の入出力はせず指示書だか値のリストだけ作成して
参照透過性を保証して、参照透過性が要求されなくなったプログラムの最終段階でリストに従って
入出力を実行するような仕組みがあれば、参照透過性を保ったまま入出力はできるという話でしょ。
それを数学的にどう正当化するかという話を書いているんだって。

>>473
水曜日あたりからだからそんな分量ないよ。
2024/10/04(金) 20:49:17.68ID:WSIC8Xt5
>>474
どこが正当化されてないのか意味不明なんだけど
ていうか正当化って何?
476デフォルトの名無しさん
垢版 |
2024/10/04(金) 20:51:48.70ID:tixO3LDq
だから、入出力がある数学的関数なんてないじゃん。
入出力があるプログラムを数学的に表現しようと思っても詰むからどうしようって話。
2024/10/04(金) 20:57:28.69ID:6lZW+X9H
こんなところで長文書くのはやめてもろて
読む価値があるものならzennとかnoteに書けば?
関数型言語界隈の人たちがクソミソにレビューしてくれるよ
2024/10/04(金) 20:58:08.93ID:WSIC8Xt5
>>476
型付きラムダ計算の時点で数学的に表現されてるだろ…
意味不明すぎる
2024/10/04(金) 21:00:48.64ID:qBjLuAvO
メインの入力とメインの出力は数学にもある
主じゃないやつを副作用といってる
480デフォルトの名無しさん
垢版 |
2024/10/04(金) 21:11:30.04ID:tixO3LDq
>>478
なるほどそう考えていたのか。全部λ計算でアセンブルすりゃ数学的に還元できるだろうってわけね。
でもそうだとすると文字列を表示するハードウェアの部分はどう還元するの?

>>479
よくわかんない。具体的に言うとどういうのある?
481デフォルトの名無しさん
垢版 |
2024/10/04(金) 21:11:31.21ID:tixO3LDq
>>478
なるほどそう考えていたのか。全部λ計算でアセンブルすりゃ数学的に還元できるだろうってわけね。
でもそうだとすると文字列を表示するハードウェアの部分はどう還元するの?

>>479
よくわかんない。具体的に言うとどういうのある?
2024/10/04(金) 21:18:24.66ID:WSIC8Xt5
>>480
アセンブルって何?
後半も何言ってるのかちゃんと分かるように書いて
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論文の読書感想文。いまさらの。
匿名以外でいまさら突っ込んでくるわけないじゃん。
2024/10/04(金) 21:34:24.07ID:qBjLuAvO
関数の「型」を見ろ
入力が何で出力が何かが宣言されている
488デフォルトの名無しさん
垢版 |
2024/10/04(金) 21:39:26.17ID:tixO3LDq
>>484
ディスプレイに表示するまでの概念はよく考えたら既存の例でもなかったわ。
焦って変なこといったスマン。
ちょっと説明を考える。
2024/10/04(金) 21:39:59.29ID:WSIC8Xt5
>>484
意味不明すぎる
ラムダ計算は数学的に正当化されてるだろ
例えば合流性があるとか数学的に証明されてる
これのどこに非数学的要素があるんだって言ってるんだよ
すでに数学的な説明がされてるものに対して、数学的に正当化されてないとか言うのやめろよ
490デフォルトの名無しさん
垢版 |
2024/10/04(金) 21:48:55.49ID:tixO3LDq
λ計算が数学的に正当化されてないというような話はしてなくて、
現実のプログラムをλ計算に反映させようと思っても入出力とか非決定計算の部分は表現しきれない
そのλ計算からはみ出す部分をどう正当化させようかという話。
2024/10/04(金) 21:52:13.21ID:WSIC8Xt5
>>490
じゃあHaskellは純粋にただの型付きラムダ計算なんだから、数学的に正当化されてない部分などない
おしまい
492デフォルトの名無しさん
垢版 |
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
2024/10/04(金) 22:14:36.08ID:WSIC8Xt5
>>492
ラムダ計算も集合論上で展開されてるだろ
だから、Haskellも集合論の言葉で書かれてるじゃん
そんな誰もが分かってるけど、いちいち書いても何の得もないことを話したかったの?
495デフォルトの名無しさん
垢版 |
2024/10/04(金) 22:16:42.74ID:vLDssEdm
この場合、IOモナドを使って変数xを書き換えているのではなく、シャドーイングによって同じxという名前の変数を新しく作って、古い x に +1 した値を束縛しています。
496デフォルトの名無しさん
垢版 |
2024/10/04(金) 22:21:54.69ID:tixO3LDq
>>493
ごめんなさい。全然違う。入出力を題材にしているのはあくまで例で別に疑問はないです(実装をちゃんと知っているわけではないですが)。
モナドを導入する動機はMoggi論文読んだ読書感想文なので途中まで書いてますが、圏をなすかどうかです。
497デフォルトの名無しさん
垢版 |
2024/10/04(金) 22:27:08.92ID:vLDssEdm
無理やりハードウェアも数学と言い張るなら、ハードウェアもチューリングマシンという計算モデルなので数学が元と言えなくはない?

そういうこじつけは置いておいても、IOモナドをアウトソーシングと考えると、じゃあ外の世界はめちゃくちゃか?と考えて、そうではないと気付く。
ハードウェアも一定の秩序がある。
数学だけが全てではないのかもしれない。
何かしらの秩序というか、法則性を持った世界(数学、数学以外含む)どうしのやり取りにモナドが橋渡しとして働いているのでは?とか、考えたりする。
498デフォルトの名無しさん
垢版 |
2024/10/04(金) 22:28:17.05ID:tixO3LDq
>>494
モナドの原論文(Moggiの論文)の読書感想文を入出力の計算効果を題材に解説してみているんだって。
ブログに書いても今更突っ込むなんて恥ずかしいことができる人はいるわけないので、ここに書いている。
2024/10/04(金) 22:32:08.56ID:WSIC8Xt5
>>498
その人はHaskellは数学的に正当化されてないけしからんって言ってたの?
2024/10/04(金) 22:34:04.82ID:WSIC8Xt5
最低限、論文に書いてある正しいこととお前の妄想がはっきり区別できるように感想文を書けよ
501デフォルトの名無しさん
垢版 |
2024/10/04(金) 22:44:05.60ID:tixO3LDq
>>499
はっきりそうは言ってない。
プログラムをλ項に対応させて単純化させると、valueからvalueへの全域関数となるけれど、
そう考えると、非停止性とか非決定性、副作用といった現実のプログラムにある特徴が失われる(だからそれを何とかしようと読める)。

>>500
そんなことできるほど力量ないです。
502デフォルトの名無しさん
垢版 |
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のグラフを結ぶ関数(射)が人間って言うのも有かな?とか、考えます。
(圏論では同型と分かれば(証明できれば)よくて、射の中身には言及しない)
2024/10/04(金) 22:50:56.01ID:WSIC8Xt5
>>501
なんでラムダ項に対応させると全域関数になるわけ?ラムダ計算は停止しない計算も表現できるモデルでしょ
言ってることが意味不明なんだよ
504デフォルトの名無しさん
垢版 |
2024/10/04(金) 22:52:29.23ID:tixO3LDq
ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
505デフォルトの名無しさん
垢版 |
2024/10/04(金) 22:52:30.15ID:tixO3LDq
ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
2024/10/04(金) 22:54:07.35ID:WSIC8Xt5
そもそもラムダ項は関数ではないし、集合ではあるということはできるけど、それは自然数1は集合であるみたいな話でそれに意義なんてないよ
507デフォルトの名無しさん
垢版 |
2024/10/04(金) 23:02:32.42ID:vLDssEdm
>>504
>398 じゃ答えにならない?
2024/10/04(金) 23:02:43.19ID:6lZW+X9H
流石にこれじゃ関数型界隈の人達にボコボコにされて終わるね
やめといた方がいい
509デフォルトの名無しさん
垢版 |
2024/10/04(金) 23:04:12.66ID:tixO3LDq
βη簡約するとλ項が別の簡約されたλ項になる。この対応関係を数学的関数とみなせると言ってると解釈してる。
2024/10/04(金) 23:12:30.87ID:WSIC8Xt5
>>509
みなせるって何?
ようするにラムダ項は関数じゃないってことでしょ当たり前だけど
511デフォルトの名無しさん
垢版 |
2024/10/04(金) 23:14:09.18ID:tixO3LDq
全域関数となる理由はわからん。全域関数=数学的関数ということを言いたいんだろうと思ってたけどそこから詰めてなかった。
2024/10/04(金) 23:22:52.03ID:WSIC8Xt5
>>511
お前が言い出したんだろ
2024/10/04(金) 23:30:08.11ID:6lZW+X9H
これがワードサラダか
514デフォルトの名無しさん
垢版 |
2024/10/04(金) 23:41:03.02ID:tixO3LDq
すまんね。準備不足だったわ。詰めるところわかったし、
詰めるところ詰めることができたらひっそりどっかに書くことにするわ。
いろいろコメント参考になったわ。
2024/10/05(土) 00:27:27.96ID:aeHKoAMv
集合と写像の区別がついてないんだから、何を準備しようが時間の無駄
2024/10/05(土) 07:57:53.70ID:jwoAd9Km
ZFでは集合しか無いから。写像だろうが、自然数だろうが何でも集合。全てを集合で実装する世界。
517デフォルトの名無しさん
垢版 |
2024/10/05(土) 08:14:37.65ID:JByJwyk5
圏論は逆で、対象(集合で言う元)を恒等写像と同一視して全てを射(写像)として扱うね。
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)。
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, …は自己関手になって
その自己関手の集合がなんやかんやでモナドに相当するみたいなイメージ
2024/10/05(土) 11:23:42.68ID:KE+ltgGd
どうでもいいけど計算科学のside effect→副作用は誤訳だと思う
薬学のside effectは「随伴作用」(副作用)だけど計算科学のside effectは「側面作用」って感じ
2024/10/05(土) 11:40:17.86ID:gdCH0E84
圏論のコンコルド効果について。

Haskellのコーティングの質をあげようと、
一生懸命頑張って勉強したのに実はほとんど役に立たない…
「大量の時間と労力を学習したのに悔しい!」
そのことを認めることができず、懸命に圏論のプログラミングでの有用性を力説し、学習布教に努める。
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可能
2024/10/05(土) 13:51:21.32ID:2BBo/yBe
数日程度で成果を出す戦略を採用したにもかかわらず何年も戦争が続く
こういうのは圏論に限定されない現象だ

順序を入れかえたら結果が変わる
数日後の情報が今ここに伝わるならそれは時間軸とは言えないぞ
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)
にはならないよ
(>>=)は演算子
2024/10/05(土) 15:10:26.09ID:u1hwkRNd
圏論の話題出すなよ
Haskellで何か書くにあたって利益があるわけじゃないんだから
2024/10/05(土) 15:30:46.49ID:2BBo/yBe
利益は道徳よりも軽い
これも、未来予知ができなければ利益を計算できないことに原因がある
527デフォルトの名無しさん
垢版 |
2024/10/05(土) 17:25:54.13ID:JByJwyk5
>>521
役に立つなら、もっと色々入ってるかと…。

私はむしろHaskellより圏論そのものに興味の対象が移って、Haskellは圏論の概念を実際に動かしてみるための道具に成り下がってますね^^;

とはいえ、数学の知識不足なので群論やらトポロジーやらあっちこっち読み漁りながらなので、歩みは遅いですが…。
2024/10/05(土) 20:22:21.95ID:J2mQEu2j
>>527
面倒でも一般位相の基本、ホモロジーの初歩…と地道にやるのをおすすめします
2024/10/05(土) 20:30:18.78ID:aeHKoAMv
集合と写像の区別もついてないんだから、集合と位相からやらないとだめ
530デフォルトの名無しさん
垢版 |
2024/10/05(土) 22:07:16.25ID:JByJwyk5
>>528
ありがとうございます。
手探りだったので、助かります。
重点的に勉強してみます。
(高卒にどこまで理解できるか…)

>>529
一応、区別付いてるつもりなのですが…。
指摘していただければ調べてみます。
2024/10/05(土) 22:16:56.83ID:aeHKoAMv
>>530
あー上で暴れてた人とは別人だったのね
でも、集合と位相は何をやるにしても必要だから頑張ってね
2024/10/05(土) 23:30:55.73ID:bPGp2ASj
>>373=396=530 っぽいから言うと、(数学に関して)「分かった」「理解した」の自己基準が不安しかない

> ほら、分かってみれば「なーんだ。そんなことか」でしょ?
> なるほど、って感じ。
と自分に言い聞かせていても、ポピュラーサイエンス書感覚で読んだってダメ

他人との議論では、逆に「こいつ分かってないな」と思われるだけだからな
533デフォルトの名無しさん
垢版 |
2024/10/05(土) 23:50:06.63ID:JByJwyk5
>>532
独学ですしね^^;
こいつ分かってないなと思われても良いですよ?
それで指摘されたものも新しい知識になるので。

どうも定義を読むだけじゃイメージ湧かないので、ネット上や数学書の複数の例え話が全て真だと仮定して、共通の特徴からイメージを掴むパターンが多いんです。
2024/10/06(日) 01:53:03.98ID:6zQjUfx4
いま正常性バイアスを理解した
全て正常だと仮定する
なるほど
2024/10/06(日) 10:54:18.58ID:jCq2z3ec
本来Haskell使う上で必要のない数学の知識をかじらされるのかわいそう
こうやって無駄に間口狭めてなんの意味があるんだか
2024/10/06(日) 11:09:45.81ID:y6HCCYtz
>>530に関しては同情すんな
>>373前後で煽っておいて炎上勉強法してる
2024/10/06(日) 12:50:07.74ID:6zQjUfx4
>>535
だから、具体例をかじることなく一般圏論でやめておこうって言ってるじゃないか
バランスを考えて妥協するとはそういうことだ
2024/10/06(日) 13:58:19.62ID:jCq2z3ec
まず圏論が必要ないっての
2024/10/06(日) 14:19:17.49ID:6zQjUfx4
それは極論だがそれを許容する代わりに反対側の極論も許容してもらう
ダブルヘイターとは違うのだよ
2024/10/07(月) 16:51:22.87ID:89HfDe1C
>>539
君頭悪いなら無理に書き込まないほうがいいよ
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
2024/10/08(火) 19:35:49.07ID:i8KKt4Pq
>>542
反対向きは成り立たないよ
彼はラムダ項みたいなただの集合も関数だとか言ってたんだよ
545デフォルトの名無しさん
垢版 |
2024/10/08(火) 20:00:43.25ID:fXGz3G0z
>>544
なるほど。勉強になります。
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)
2024/10/08(火) 21:59:10.54ID:fIGAPb3c
CPL使ったことは一度もないが
関手圏よりもっとややこしい圏で、モナドより凡庸なものを定義するんでしょ
2024/10/08(火) 23:08:48.38ID:Fz/Eetv9
こんなんだけど

>通常では,自然数などのデータ型は,効率のためにシステムに組込んであるが,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!!
2024/10/12(土) 20:07:00.42ID:fyUcodga
初心者はStack、ガチムチはCabalで開発するんですか?
2024/10/15(火) 05:30:10.38ID:CzVFQLgH
みんなStackだよ
Cabalの依存関係解決はましになったとはいえプロジェクト構成の記述はStackのほうがよくできてるし
553デフォルトの名無しさん
垢版 |
2024/10/15(火) 22:34:15.38ID:2I09ehic
詳しい情報サンクス
CabalやめてStackに帰ります
GHCup tuiで選べるCabalやHLSやStackも全部recommendedに落とします
2024/10/16(水) 05:04:51.74ID:PvdZsye3
ああCabal辞めてStackに移行したらビルドし直しただけでTLSのハンドシェイクがTwitchでは大丈夫なのにツイキャスで失敗する謎の不具合が治りました
やっぱStackすわ
2024/10/18(金) 18:33:56.50ID:358zSdqs
別に不具合あったわけじゃないならよくね
みんなとか言い出したらそもそもみんなhaskellなんか使ってないが
556デフォルトの名無しさん
垢版 |
2024/10/25(金) 23:46:50.40ID:jl3K3ThU
Haskellを学んだみたいと思うんだけど、「すごいHaskell たのしく学ぼう」って書籍は今でも有用?
Haskellの良書として挙げることは多いと思うけど、出版から10年以上経ってるのが気になった
その間で言語に大きな変更があったとか、「今のHaskellだったらこう書くよね」みたいな注意が必要な点などあれば知りたい
あるいは最近の書籍でよりおすすめというものでも
2024/10/25(金) 23:58:48.00ID:ss1i659U
ちょっと古い情報だけど、
僕が「すごいH」を購入したのが2016.12だけど、数年後には章立ての変更まではなかったかもしれないけど、コードの記述など結構アップデートされてたような
いずれにしても、一冊でHaskellを、ってのはアレで、何冊かは読まないとと僕の場合
2024/10/26(土) 01:14:59.65ID:jaMDzNJq
>>556
ラムダノートのプログラミングHaskell第2版
これを読めばモナドの使い方がわかる
559デフォルトの名無しさん
垢版 |
2024/10/26(土) 13:33:26.33ID:qze4GRwI
モナドはCのポインタより概念が難しいのどうにかならんの
別のはないんですか
2024/10/26(土) 14:33:50.42ID:jaMDzNJq
ない
別に理論的な部分はすっ飛ばしていいよ
純粋関数型言語で手続き型言語のようなシーケンスをどうやったら書けるか?みたいなパズルを解く方法と思ってればいい
全ては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モナドな入力関数も引数が無いので、値を外部で代入する変数と捉え、シャドーイングで古い値は隠されると考えると、線形何たらの使い捨て副作用関数と同じことしてる。
562デフォルトの名無しさん
垢版 |
2024/10/28(月) 07:23:18.71ID:duvMwVsG
>>557 >>558
ありがとう
まずはラムダノートのプログラミングHaskellを買いました
すごいH本はもう一冊読もうと思って時に買います
2024/10/28(月) 11:18:21.59ID:ABlPDVd9
すごいエロい本か
2024/10/28(月) 16:01:27.57ID:3PX2guVI
>>563
それ面白いと思ってレスしてんの?
2024/10/28(月) 17:13:55.02ID:B1OBTGXf
10年前のtwitterでは鉄板ジョークでしたよ
すごいH
2024/10/28(月) 19:07:28.37ID:aKxYxFxQ
haskell知らない人はエロ本だと思うし
隠れた卑猥な意味が無ければ
隠語としての価値も無い
2024/10/28(月) 19:57:49.83ID:2RuMUG8y
ML族のRustが市民権を得た今haskellやる意味ないよ
その時間をRustに当てなさい
2024/10/28(月) 21:28:05.60ID:B1OBTGXf
平均的HaskellerはRustもやった上でLinearTypes拡張がどうなるか様子見しつつ両方使ってるのでは?
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
ほんそれ
2024/10/29(火) 11:58:27.10ID:IrbjK6II
Rustを関数型扱いするやつは
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
572デフォルトの名無しさん
垢版 |
2024/10/29(火) 12:22:05.93ID:dZcxKFDp
そう。世界がHaskellから孤立していく
世界はもっと危機感もった方が良いよ
2024/10/29(火) 15:30:57.70ID:+9FvEifI
実用プログラムに使った例はあるの?
2024/10/29(火) 16:00:48.67ID:FJXFYfo2
>>567
MLとは全然ちゃうがな
HM型推論せんやろ
575デフォルトの名無しさん
垢版 |
2024/10/29(火) 22:29:59.15ID:LPWWq4s4
>>573
自分も詳しくはないけど、クローズドな分野が多いんじゃない?
2024/10/29(火) 23:08:38.64ID:+9FvEifI
>>575
秘密ということ、それじゃわからんと同じことじゃないか
577デフォルトの名無しさん
垢版 |
2024/10/29(火) 23:25:09.95ID:6SLkDv7J
世界は頭悪すぎてHaskellを使いこなせていない
世界はもっと危機感を持った方が良い
2024/10/30(水) 02:10:51.19ID:p9nsrTZ/
急に主語が大きくなったぞωωω=2πf
2024/11/02(土) 09:15:14.82ID:KpOoS8wa
クローズドな部分なら使ったうちには入らないな
2024/11/02(土) 18:11:47.64ID:3NvQMTDb
金融工学で使ってるとこあるかもね
OCamlが定番らしいし
581デフォルトの名無しさん
垢版 |
2024/11/02(土) 19:19:33.26ID:Mufqfjtq
>>580
やはり実務ではフィンテックですか。

このスレで趣味教養的に
数理の応用実験や
アート作品生成プログラム記述用とかで
使ってる香具師いる?
582デフォルトの名無しさん
垢版 |
2024/11/02(土) 19:33:48.22ID:pIz290+w
>>580
みずほでOCamlしか聞いたことない
結局大規模障害出ちゃったけど
2024/11/02(土) 19:38:33.59ID:3NvQMTDb
>>582
金融商品の設計に使うんだよ
その手の障害とは全く関係ない
584デフォルトの名無しさん
垢版 |
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関数の適用で考えた方が分かり易いかも)
585デフォルトの名無しさん
垢版 |
2024/11/02(土) 20:16:43.59ID:pIz290+w
>>583
そうなんだ。
そういうライブラリ頼みっぽい事なら、MathmacticaとかPythonのが良さそうなのにね。
金融商品だったら統計に強いRだってあるし。
なぜわざわざOCamlだったのやら…。
2024/11/03(日) 11:40:35.68ID:kGU90lSm
>>584
本スレ誘導
https://mevius.5ch.net/test/read.cgi/tech/1710585705/
2024/11/03(日) 17:33:41.03ID:4RaSizfZ
その手のはかなり昔からの話だしその頃pythonはそんな一般的ではない
588デフォルトの名無しさん
垢版 |
2024/11/03(日) 18:58:10.27ID:W/WQS3jI
>>586
え…。
Haskellを何に使ってるか聞かれたから答えたのに、そりゃ無いよ。
2024/11/06(水) 18:53:34.69ID:s8sk505y
semigroupoidsのAltからFunctor抜いたやつないのかな
catsのSemigroupK相当のやつ
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)
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の中身自身がキャッシュするように改良されたのかも。
594デフォルトの名無しさん
垢版 |
2024/11/10(日) 16:05:22.18ID:AfmJKCJ3
これ数学的にどういうことなのか
かいつまんで教えてくらまいか
watch?v=dYj0rPQeRkA
2024/11/16(土) 10:08:07.70ID:9CYVpzbn
Category Theory Using Haskell
An Introduction with Moggi and Yoneda
Shuichi Yukita

という書籍が来月出るんですって?
2024/11/16(土) 14:32:48.68ID:Avgm411i
>>595
高いな

> Hardcover
> \36,125 Tax included
597596
垢版 |
2024/11/16(土) 14:36:30.07ID:Avgm411i
円記号がバックスラッシュになっていたので訂正
¥36,125

フォントによるわけだが
2024/11/16(土) 15:13:06.50ID:ZnREBqGy
買って損するだけの高額本の予感
2024/11/16(土) 15:27:44.60ID:x85mVkLf
なんだ雪田の本じゃねぇか
プラスアルファはあるかも知れんが
基本雪田の「圏論入門 Haskellで計算する具体例から」と大差無いと思うぞ
2024/11/16(土) 20:50:43.88ID:ZUJ+jDQV
結局Moggiのアイディアがなんなのか書いてなかったから、洋書でも同じでしょ。
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
2024/11/16(土) 21:18:48.47ID:ZUJ+jDQV
wikiのは肝心のvalueとcomputationについてちゃんと書いてない。
computationの訳を「計算された値」とするのは微妙。
2024/11/16(土) 21:28:16.06ID:ZUJ+jDQV
『圏論入門』の方にはvalueもcomputationも書いてなかったと思うから言わずもがな。
2024/11/16(土) 21:43:11.16ID:HNcchqjT
出たら人柱になって買って読んで下さい
2024/11/16(土) 22:29:43.38ID:MlIU4R6X
多分加筆してると思うよ
日本の出版社はなぜかページ数制限があることが多いんだけど
海外にそれはないし
2024/11/16(土) 22:41:34.37ID:ZUJ+jDQV
加筆してvalueとcomputationの説き起こしから始めて本当にMoggiのアイディア書くかなぁ?
米田の補題が工学応用できるとかいう主張と衝突する気がするんだけれど。
2024/11/17(日) 08:11:12.88ID:RK7ri1yG
レポよろ
2024/11/17(日) 09:07:13.97ID:zx90fdBd
ぷりぷりです
2024/11/17(日) 14:35:29.88ID:895B27h0
4万近く出してわざわざレポだけする奴なんているの?
圏論入門と同じでそれらしいキーワードだけ出して終わりの可能性高いのに。
2024/11/17(日) 19:34:30.56ID:A63wUj4E
まぁそもそもHaskellで圏論持ち出す必要ないしな
生産性上がらないよ
2024/11/17(日) 19:42:07.02ID:bAlb8WtH
Haskell、コーダー界隈で圏論勉強会が流行していた時期、あれは何だったのか?
2024/11/17(日) 20:00:10.23ID:895B27h0
圏がグラフの拡張みたいな概念だったから、グラフ理論みたいに有用なプログラミングにつかえるアルゴリズムがあるんじゃないかってことでやってたように見えた。
モナドも説明したかったようにみえたけど、結局圏論の勉強を踏まえた説明はでてこなかった。
2024/11/17(日) 21:17:15.64ID:U7PWp5lE
>>611
俺も行ってたわw
数学クラスターからの圏論マウントを喰らっていくのやめたがw
そういうやつ多いんじゃないか
2024/11/20(水) 04:56:53.37ID:vcDCbnyw
プログラムは合成できないといけないって当然のことを、いちいち圏である必要があるとか言い換えるオレ天才だわー
2024/11/20(水) 18:55:46.60ID:QVKMRnqI
https://dic.nicovideo.jp/a/%E9%A1%A7%E5%AE%A2%E3%81%8C%E6%9C%AC%E5%BD%93%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%A0%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE
2024/11/21(木) 00:16:43.88ID:r2/mXbdf
集合論と圏論の抽象度がもし同レベルならたしかに圏である必要はないな
必要ない情報は捨象されるべきだと言われれば何も反論できない

だから抽象化マウントは強いんだ
2024/11/21(木) 01:45:46.56ID:bAf4oZLa
抽象化すればプログラムしにくいと思うけど
2024/11/21(木) 19:02:52.56ID:fTdZV0pc
プログラムが圏になるためとかいうクソしょうもない理由がモナド導入の理由って本当か?
圏論っていうか圏じゃん。モノイド構造も米田の補題もなにも出てこないんだが
2024/11/21(木) 21:57:07.56ID:r2/mXbdf
型構築子を導入すれば関手もモナドも勝手についてくる
型を必要とするすべての言語で同じことが言える
これも抽象化
2024/11/28(木) 10:04:33.91ID:p2Q1UON9
haskellでスクレイピングがやりたいんだが
arch linuxのリポにはscalpelがない
別言語でやったほうがいいかな?
2024/12/04(水) 21:11:42.90ID:D3PBVzJs
ディストリで全部パッケージ化してくれてるとは思えん
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
2024/12/19(木) 15:03:02.64ID:NXRHTsH0
add (x,y) (a,b) = (x+a,y+b)
これをaddを定義せずにarrowで簡単にかく方法はありますか
2024/12/19(木) 16:15:15.91ID:hCGKCs/t
arrowてなんすか
2024/12/19(木) 19:27:09.72ID:gIJYmlNm
富士通のスマホ
626デフォルトの名無しさん
垢版 |
2024/12/20(金) 01:32:43.30ID:/9ZUXmih
スマホでHaskellを簡単に書く方法はないかな
2024/12/20(金) 02:01:04.72ID:I9azuXSK
>>626
今はキミの言うところの「簡単」ではない環境で書いてるってこと?
628デフォルトの名無しさん
垢版 |
2024/12/20(金) 02:04:07.41ID:/9ZUXmih
>>627
だまらっしゃい
俺がウザ絡みするのは良いけどアンタにレスつけてウザ絡みする権利はないんだよ
何故ならアンタは世界で一番価値のない存在だからね
2024/12/20(金) 15:54:59.07ID:IOWVZ3it
スマホでHaskell書く必要ある?
ないよね
630デフォルトの名無しさん
垢版 |
2024/12/20(金) 22:08:57.75ID:uE9QxZQG
>>626
iOSならRaskellってアプリあるけど、開発止まって大分経つので画面がずれたりする…。
ideoneとかpaiza.IOとかのクラウドサービスが今のところは一番手軽かもね。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況