関数型プログラミング言語Haskell Part34 (691レス)
上下前次1-新
133: デフォルトの名無しさん [sage] 2022/10/03(月) 18:02:59.08 ID:LGdcguEE(1) AAS
lisp系やocamlとか。
134: デフォルトの名無しさん [sage] 2022/10/04(火) 08:48:04.42 ID:S20URLlI(1) AAS
ルールがない状態からルールが守られている状態へ誘導するか
何もしてないのに持続するルールを拾い集めるかの違い
135: デフォルトの名無しさん [] 2022/10/07(金) 20:15:05.17 ID:xpYSJYo6(1) AAS
F#では。
136: デフォルトの名無しさん [] 2022/10/07(金) 20:28:34.11 ID:lAeL408c(1) AAS
Erlang
137: デフォルトの名無しさん [sage] 2022/10/14(金) 22:28:23.68 ID:GVf4qcGD(1) AAS
ラムダや <- や case で束縛される変数の値は二回以上計算されない
seqは計算のタイミングを変える効果しかない
難しいのは = で定義される名前だが
= の右辺で頑張ってseqを使っても報われない
138(2): デフォルトの名無しさん [sage] 2022/10/14(金) 23:54:06.57 ID:91YiMGAd(1) AAS
でもhaskell 2010 reportには評価順を変える方法はseqしか規定されていない
GHQなどの実際の処理系でそれ以外のタイミングでメモ化されたりするのはあくまで処理系の独自仕様でしかない
ある処理系でメモ化されて早かったプログラムが別の処理系で同じ速度で処理してくれる保証などどこにもない
139: デフォルトの名無しさん [sage] 2022/10/15(土) 08:05:01.19 ID:/BlEbfcm(1/3) AAS
>>138
もしかして、個人の感想のようなものを悪と思ってるのかね
そして客観的事実 (ようするに絶対正しい事実) と称するものが正義だと
個人の感想を排除するべきという思想はどこにも規定されてないでしょ
140: デフォルトの名無しさん [sage] 2022/10/15(土) 09:49:59.76 ID:fUoifk8c(1/2) AAS
メモ化に関しては俺も>>138と同じような感想持ってるな
141: デフォルトの名無しさん [sage] 2022/10/15(土) 10:11:19.74 ID:/BlEbfcm(2/3) AAS
ある人の感想が別の人の感想と同じになる保証はどこにもない
保証がなくても特に問題ないと判明したならそれでいい
142(1): デフォルトの名無しさん [sage] 2022/10/15(土) 10:19:45.48 ID:+yYiQ+MP(1) AAS
一番嫌なのはネットに転がってるすごいスッキリしたプログラムがあって「おお、すげぇ」と思っても結局それはGHCのメモ化の恩恵でしかなくHaskell本来のそれではないので別の処理系では通用しないものであったりする事
事実上GHCが標準なのでGHCで早ければ「早いプログラムが書けない事はない」のではあるけど、じゃあGHCはどんな時は気をきかせてメモ化してくれるのか、どんな時はその事を利用して早い、しかし短い、わかりやすいプログラムを書けるのかはHaskell 2010 reportではなくGHCの方の仕様書を読むか、実験してみるかしかない、しかし前者はそもそもGHCの仕様書そのものどこにあるかわからないんだけど見つけてもおそらくメモ化の理論は相当に難しい論文レベルの話、さりとて実験で詰めていくのはデバッグと同じレベルのかなり苦痛な作業で、しかも完成したものは大概速さのために可読性をかなり犠牲にしないといけないものになる、当然可搬性も落ちてる
GHCがやってくれてる事全てでなくてもいいけどネットによく転がってるフィボナッチ数列とか素数生成とかのGHCの良きに計らってくれる機能を利用したスッキリした、けど早いプログラムくらいまでは標準化して全ての処理系で動くようにしてほしいけどね
143: デフォルトの名無しさん [sage] 2022/10/15(土) 11:46:05.26 ID:fUoifk8c(2/2) AAS
まあ実際のところメモ化を考え出したら
Lispと同じように可読性を犠牲にした速度重視のコードしか生まれないので・・
メモ化は考えないのが筋だけどそうすると実用性は皆無であってつまり
144: デフォルトの名無しさん [sage] 2022/10/15(土) 15:59:55.52 ID:/BlEbfcm(3/3) AAS
LispとHaskellの違いで重要なのは
モジュールの定義をインタラクティブにやらないこと
ghci起動時に全てのモジュールが定義され最後に
mainや他の式を評価・実行するところだけがインタラクティブ
そもそもmodule Main whereとかいうのは式ではない
式ではないから評価順序という考え方がそこでは通用しない
145: デフォルトの名無しさん [sage] 2022/11/03(木) 00:12:52.63 ID:A4mGU1Ql(1/2) AAS
GHCがデファクトだしこだわりがなければ他のコンパイラを使うこともないでしょ
とはいえ関数型言語って速度を重視するタスクには向かないでしょ
速さを求めるのが間違い
146: デフォルトの名無しさん [sage] 2022/11/03(木) 01:14:31.73 ID:+2fbLBnA(1) AAS
Symbolicsが失敗した事例を思い出す
あれも理想を追求したはいいけど何をやってもひたすら遅く
他社はそれより早く安い機材を次々と繰り出していた
当然惨敗は必然だった
147: デフォルトの名無しさん [sage] 2022/11/03(木) 06:02:33.84 ID:A4mGU1Ql(2/2) AAS
静的な型付けによる頑健性だとrustがあるしなぁ
148: デフォルトの名無しさん [sage] 2022/11/03(木) 11:53:42.15 ID:k32TY8HF(1) AAS
結局のところHaskellの言語策定をしてるコミュニティは学者さんのコミュニティで実用的な性能を向上させる事にそもそも興味ないから実務面での有用性を期待するのは無理やね
149: デフォルトの名無しさん [sage] 2022/11/04(金) 01:33:00.25 ID:ggdePY4U(1) AAS
まあそうだろうな
150: デフォルトの名無しさん [sage] 2022/11/05(土) 10:09:23.49 ID:nyx0vuE5(1) AAS
>>142 の指摘って他の言語のGCにもそのまま当てはまると思う。
151(1): デフォルトの名無しさん [] 2022/11/06(日) 14:53:18.67 ID:p6fV7yyc(1/2) AAS
Haskellで開発している会社ってどこがあるの?
検索するとHERPやTuruCapitalしか出てこない…
152: デフォルトの名無しさん [] 2022/11/06(日) 16:00:47.05 ID:8Hp8Ymz2(1) AAS
GHC9.4.3 リリース
153: デフォルトの名無しさん [sage] 2022/11/06(日) 16:35:55.22 ID:MgGeIf3l(1) AAS
Haskell wikiに載ってるやつ見るに、部分的にHaskellを使うって感じかなぁ
154: デフォルトの名無しさん [sage] 2022/11/06(日) 18:08:25.72 ID:SOHxH3HV(1) AAS
>>151
一時期富士通が募集してたことがあったような
もうないからやめたのだろうけど
155: デフォルトの名無しさん [] 2022/11/06(日) 19:47:21.37 ID:p6fV7yyc(2/2) AAS
あと朝日ネットの募集要項はHaskellがありました
朝日ネットに応募してみようかなぁ。
HERPはリファレンスチェックが面倒…(上司とかと会話したくない)
156: デフォルトの名無しさん [sage] 2022/11/07(月) 00:00:47.60 ID:35GjxAYG(1) AAS
facebookも使ってた気がする。
157(1): デフォルトの名無しさん [] 2022/11/07(月) 00:41:59.56 ID:aVSF4vDw(1) AAS
Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
あえてHaskellを使う意味がない、みたいな…
158: デフォルトの名無しさん [sage] 2022/11/07(月) 11:14:09.19 ID:uMWKgAVp(1) AAS
オーバーヘッドを気にせず頑健性を取りたいとき
うーん、具体例が出てこない
159: デフォルトの名無しさん [sage] 2022/11/07(月) 12:17:58.82 ID:y2qdzeiV(1/2) AAS
>>157
> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか
160: デフォルトの名無しさん [sage] 2022/11/07(月) 12:18:26.38 ID:y2qdzeiV(2/2) AAS
誤操作スマソ
161: デフォルトの名無しさん [sage] 2022/11/08(火) 09:36:33.50 ID:VjMrXhSs(1) AAS
消費者目線ではGHCはフリーソフトだからコストが高いとは言えない
コストという物差しが万能ではない具体例がいま出た
162: デフォルトの名無しさん [sage] 2022/11/09(水) 01:51:03.18 ID:3Bh922De(1) AAS
まあ学者さんたちのお遊びだからね・・
163: デフォルトの名無しさん [sage] 2022/11/09(水) 10:38:48.12 ID:wL144bz5(1) AAS
どういう結果になるのか契約とか誓約しないのがオープンソース
お遊びにしかならないという保証もしてない
164: デフォルトの名無しさん [sage] 2022/12/02(金) 14:29:56.51 ID:fOU9+Fqp(1) AAS
Haskellまだイキテル?
165: デフォルトの名無しさん [sage] 2022/12/03(土) 12:50:06.92 ID:HJhX36nM(1) AAS
無生物であることは保証する
何も実験してないのに保証することを数学的と言えないこともない
166(1): デフォルトの名無しさん [] 2022/12/12(月) 16:34:32.76 ID:Yq3RU8vo(1) AAS
Unreal Verse
https://simon.peytonjones.org/assets/pdfs/haskell-exchange-22.pdf
サイモンさんが関わってるからHaskellの弟分なのかな?
unreal engineに採用なら関数型プログラミングでは
一番使われることになるんだろうか
167: デフォルトの名無しさん [sage] 2022/12/13(火) 21:33:17.94 ID:s5AI7uvQ(1) AAS
ちょっとやってみるかと思ったら
今はHIEじゃなくてHLS使えみたいなのがぼちぼち出てくるが
じゃあHLSをemacsからどう利用すりゃいいのってなると情報なし
どうなってんのよ
haskell-modeなんて2016で止まってるし
168: デフォルトの名無しさん [] 2022/12/15(木) 08:50:05.16 ID:hYy+q+Gy(1) AAS
>>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.01 ID:3Q63kYiw(1) AAS
いや15年越し
https://game.watch.impress.co.jp/docs/20080911/epic.htm
>Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
170(1): デフォルトの名無しさん [] 2022/12/17(土) 23:16:08.75 ID:7V76W+iX(1) AAS
HaskellでWebシステムのバックエンドを開発したときのメモリ使用量は
GoやPythonと比較してどの程度でしょうか?多いですか?少ないですか?
171(1): デフォルトの名無しさん [sage] 2022/12/23(金) 15:37:27.80 ID:Rf1vHPUu(1) AAS
サーバとクライアントのサンプルプログラムを練習で書いたのだけど
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?
172: デフォルトの名無しさん [sage] 2022/12/23(金) 20:44:32.65 ID:Gou4DLut(1) AAS
>>171
明示的に変換しなきゃいけないのは事実だがその原因はC言語じゃない
言語と無関係だからこそHaskell2010でもC言語でも同じデータ構造が使える
>>170
データだけ見ればメモリ使用量を同じにすることは可能
173: デフォルトの名無しさん [sage] 2022/12/29(木) 17:00:27.04 ID:ZBF5EoRT(1) AAS
モノイド、関手は習得できたけど
自然変換で躓いてる
174: デフォルトの名無しさん [sage] 2022/12/29(木) 23:24:37.93 ID:pM4wQIt0(1) AAS
今haskellでguiを作るなら何がいい?
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい
175: デフォルトの名無しさん [sage] 2022/12/30(金) 12:18:58.51 ID:/hxsvxNk(1) AAS
ところでwxHaskellが流行らないのはなぜ?
wxが流行ってないからかな?
176: デフォルトの名無しさん [sage] 2022/12/30(金) 13:53:40.82 ID:FXsz7+hW(1) AAS
本当に必要なのはドリルの大量生産ではなくドリルでもなく穴だからかな
177(1): デフォルトの名無しさん [sage] 2022/12/30(金) 19:21:21.60 ID:dTZ5gB6H(1) AAS
Haskellはすでに見放されてる感ある
178: デフォルトの名無しさん [] 2023/01/02(月) 01:15:52.75 ID:jETc9FsM(1) AAS
>>177
そうなの?それは実務的な意味で?
179: デフォルトの名無しさん [] 2023/01/02(月) 03:01:15.30 ID:/m9PT5PE(1/2) AAS
ステマが酷すぎた。
180: デフォルトの名無しさん [] 2023/01/02(月) 03:01:59.29 ID:/m9PT5PE(2/2) AAS
言いなおそう。
某出版社のステマが酷すぎた。
181: デフォルトの名無しさん [] 2023/01/03(火) 00:10:20.46 ID:7mh2KVDC(1) AAS
見放されるようになったのは、
モナドってなに?というミステリアスで興味深い問いがいつのまにか
白けた話になったからじゃないか。もうどうでもいいというか。
182: デフォルトの名無しさん [] 2023/01/03(火) 04:29:29.65 ID:yYGSV1g6(1) AAS
技術評論社のせいでは?
183: デフォルトの名無しさん [sage] 2023/01/04(水) 05:08:58.65 ID:peYJ5uzH(1) AAS
メンテナーが次々と逃げ出してるのが象徴的・・
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる
遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい
184: デフォルトの名無しさん [] 2023/01/04(水) 18:10:50.86 ID:HUTbVNXS(1) AAS
PureScriptに移行しようぜ
正格評価で使いやすいし
185: デフォルトの名無しさん [sage] 2023/01/05(木) 03:59:19.12 ID:PBBtO4Nd(1/2) AAS
しかし無限数列とか表現できなくなるのがなぁ
186: デフォルトの名無しさん [sage] 2023/01/05(木) 12:24:48.41 ID:dQdtWkz5(1/2) AAS
あんなもの現実には扱えないからな
適当な数値を上限にしとけばいいだけ
187: デフォルトの名無しさん [sage] 2023/01/05(木) 13:19:36.00 ID:PBBtO4Nd(2/2) AAS
イヤ、“表現できる”ってとこに意味があるんだよ
188: デフォルトの名無しさん [sage] 2023/01/05(木) 14:40:58.83 ID:dQdtWkz5(2/2) AAS
その割にデメリットの方が大きすぎる
やはりいらないよ
189: デフォルトの名無しさん [] 2023/01/14(土) 23:43:44.49 ID:vLwyb8f9(1) AAS
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)
190: デフォルトの名無しさん [sage] 2023/01/17(火) 00:55:50.42 ID:zIKNxshB(1/2) AAS
無限の長さの [a] を仮に廃止して他の言語と同じような方式に変えたら IO a のような型になる
生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある
191: デフォルトの名無しさん [sage] 2023/01/17(火) 01:31:37.81 ID:PP1OxyD+(1) AAS
生物学関係ないな
192: デフォルトの名無しさん [sage] 2023/01/17(火) 03:13:49.00 ID:zIKNxshB(2/2) AAS
言語は死なないとか復活させればいいだけとか思うならもう生物学関係ない
そう思わないなら関係ありそう
193: デフォルトの名無しさん [sage] 2023/01/17(火) 08:07:29.90 ID:Inpyi8aQ(1) AAS
無意味な比喩表現
194: デフォルトの名無しさん [sage] 2023/01/19(木) 01:20:46.84 ID:cE+DUb2P(1) AAS
クラウドは中に人がいるのか無人なのか調べられないので
人間と機械を混同したのではなく不確実にした
195: デフォルトの名無しさん [sage] 2023/01/19(木) 07:47:39.45 ID:7wHhBGeN(1) AAS
意味不明
もう少し文章を書く練習をしろ
196: デフォルトの名無しさん [sage] 2023/01/19(木) 17:42:25.26 ID:ugYwIpAQ(1/2) AAS
嘘を書くのをやめろって言われない努力はしてる
現に、嘘だと言われない
197: デフォルトの名無しさん [sage] 2023/01/19(木) 20:45:58.03 ID:LuniV29G(1/2) AAS
間違ってさえいない文章
真偽以前に中身がない
198: デフォルトの名無しさん [sage] 2023/01/19(木) 20:49:17.03 ID:LuniV29G(2/2) AAS
それっぽいだけで少し読めば大したことすら書かれてないのがわかる
199(1): デフォルトの名無しさん [sage] 2023/01/19(木) 21:18:32.97 ID:ugYwIpAQ(2/2) AAS
「わかる」と「意味不明」は矛盾しそう
どっちかが嘘ついるのでは
200: デフォルトの名無しさん [sage] 2023/01/19(木) 21:33:25.41 ID:QROh3L3M(1) AAS
>>199
お前読解力もないのか
もうこのスレ来るなよ
201: デフォルトの名無しさん [sage] 2023/01/19(木) 21:38:24.06 ID:CHvJHSS4(1) AAS
お前も反応すんなよ
202: デフォルトの名無しさん [sage] 2023/01/20(金) 01:52:23.49 ID:jpIFaaML(1) AAS
いくら話題がないからって
203: デフォルトの名無しさん [sage] 2023/01/21(土) 13:30:02.33 ID:ms4pFp6J(1) AAS
職業倫理が苦手です
204: デフォルトの名無しさん [sage] 2023/01/21(土) 16:31:20.60 ID:c9rqNig0(1) AAS
スレチ
205(1): デフォルトの名無しさん [sage] 2023/01/29(日) 20:58:33.14 ID:3238s/rq(1) AAS
教科書の通りなのになんでエラーになるんだろう?
code:
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = fork (f h, g h)
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
Error occurred
ERROR line 2 - Type error in explicitly typed binding
*** Term : fork
*** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d)
*** Does not match : (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d)
206(1): デフォルトの名無しさん [sage] 2023/01/30(月) 02:11:06.80 ID:jVdK8GQm(1) AAS
>>205
fork (f, g) h = (f h, g h)
では?
207: デフォルトの名無しさん [sage] 2023/01/30(月) 04:31:24.57 ID:KsiNNj/4(1) AAS
>>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
208(1): デフォルトの名無しさん [sage] 2023/02/01(水) 14:35:45.13 ID:RAEJFXsc(1) AAS
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)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?
209: デフォルトの名無しさん [sage] 2023/02/17(金) 00:17:58.82 ID:x2uQcODA(1) AAS
ChatGPTにいろんなサンプル書かせて勉強させてもらってるわ
210: デフォルトの名無しさん [sage] 2023/02/18(土) 07:53:47.68 ID:pwjCq/Fb(1) AAS
>>208ですがスレチですかね
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)
211(1): デフォルトの名無しさん [] 2023/02/23(木) 22:53:40.11 ID:3VcdShfb(1) AAS
すみません
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが
具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。
v1 :: Maybe a
v1 = Nothing
v2 :: [a]
v2 = []
型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。
また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)
212(1): デフォルトの名無しさん [sage] 2023/02/24(金) 02:14:24.44 ID:PIH/rCf2(1) AAS
>>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に対して等値性を定義するための仕組みです。
213: デフォルトの名無しさん [sage] 2023/02/25(土) 11:21:45.77 ID:h/PI1ikt(1) AAS
>>212
ありがとうございます。
凄いHを楽しく学ぶ本にも
Tree型があったので試してみました。
具体的な中身が「無い」事を現す値の場合
型引数で定義できるみたいです。
data Tree a = EmptyTree | Node a (Tree a) (Tree a)
deriving (Show)
v3 :: Tree a
v3 = EmptyTree
214(2): デフォルトの名無しさん [] 2023/04/29(土) 14:07:24.45 ID:AoTbqg9O(1) AAS
マルチポストだが教えてくれ
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
215: デフォルトの名無しさん [sage] 2023/05/01(月) 00:30:45.06 ID:PDTetkfq(1) AAS
>>214
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician
216: デフォルトの名無しさん [sage] 2023/05/03(水) 20:58:10.10 ID:ioA1phJ7(1/2) AAS
>>214
英語で調べてもそんな話出てきたことはないな。
217: デフォルトの名無しさん [sage] 2023/05/03(水) 21:14:18.69 ID:ioA1phJ7(2/2) AAS
これにもそんなストーリー書いてない
https://pdfs.semanticscholar.org/59d7/a0f5c341ab450e2893eb73384895524bbebd.pdf
218: デフォルトの名無しさん [sage] 2023/06/09(金) 14:58:05.85 ID:GYy2ex4t(1) AAS
lispやらカリー=ハワード同型やらの関連性は
数学的な意味では遥か前だし実装上の話かな
https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics
219: デフォルトの名無しさん [sage] 2023/06/20(火) 00:30:03.89 ID:qm9+2t5E(1) AAS
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が展開されてる回数を確かめる方法はありますか?
よろしくお願い致します
220: デフォルトの名無しさん [sage] 2023/06/25(日) 14:24:09.04 ID:H+Ij4nqZ(1/3) AAS
質問にさせていただきます
違う標数での有限体での計算を必要とするコードを考えてます
ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して
x = F3 $ 1+2
y = F5 $ 2-5
のような記述ができればいいなと思ってます
そのためには
data FiniteFieldCh3 = F3 Int
instance Num F3 where...
のようにF3,F5両方にNumを定義しないといけません
面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( char x )
221: デフォルトの名無しさん [sage] 2023/06/25(日) 14:24:14.71 ID:H+Ij4nqZ(2/3) AAS
以下のような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です
よろしくお願い致します
222: デフォルトの名無しさん [sage] 2023/06/25(日) 14:43:47.12 ID:H+Ij4nqZ(3/3) AAS
すいません、最後の行間違って修正前のやつコピペしました
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( modulus x )
です
よろしくお願い致します
223: デフォルトの名無しさん [sage] 2023/06/25(日) 15:08:12.64 ID:CDxt6lPg(1/2) AAS
型クラスの単相性制限とか、関数従属性とか、とか。。。
的外れなこと言ってたらごめん。
224: デフォルトの名無しさん [sage] 2023/06/25(日) 15:23:50.61 ID:CDxt6lPg(2/2) AAS
なんか Bard とかにつっこんでも情報得られるかも
225: デフォルトの名無しさん [sage] 2023/06/25(日) 17:33:31.79 ID:OvK+yilq(1) AAS
ありがとうございます
現在まだ調べてる最中なんですけど
https://stackoverflow.com/questions/7198907/haskell-constraint-is-no-smaller-than-the-instance-head
によるとどうもclass制約の解決をloopさせないための制約くさいです
つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言
class ( C a ) => D a where ...
class ( D a ) => C a where ...
のような宣言があるとまずいようです
なので=>の左側の型は右側の型より“短い”事が要求されるそうです
例えばtoDみたいな型生成子を作っておいて
class ( C a ) => ( D ( toD a ) ) where ...
などとしないといけないらしいです
でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら
226(1): デフォルトの名無しさん [sage] 2023/07/03(月) 23:45:49.20 ID:QPaqlNti(1) AAS
値とmoduleどっちも含んだdata作ればいいのでは
227: デフォルトの名無しさん [sage] 2023/07/04(火) 00:24:50.19 ID:+0TfLuMN(1) AAS
>>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一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと
228: デフォルトの名無しさん [sage] 2023/07/04(火) 11:11:04.93 ID:rN492ZrW(1) AAS
この記事では剰余環を作っているみたいだけど、参考にならないかな
https://qiita.com/gummycandy/items/9abca700eea7f46626e4
229: デフォルトの名無しさん [sage] 2023/07/06(木) 01:04:07.84 ID:sds/6LG1(1) AAS
みなさん情報ありがとうございます
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
https://ideone.com/3Lhc4z
230: デフォルトの名無しさん [] 2023/08/05(土) 13:07:07.29 ID:1IOAcn45(1) AAS
hage
231: デフォルトの名無しさん [sage] 2023/09/04(月) 14:41:20.09 ID:FcZAE9nJ(1) AAS
haskellは廃れてきてるな、悲しい
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの
232: デフォルトの名無しさん [] 2023/09/16(土) 21:21:50.35 ID:6682wM15(1/3) AAS
数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利)
なぜ多くの言語では集合に順番がないのでしょうか?
上下前次1-新書関写板覧索設栞歴
あと 459 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.023s