関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part33
https://mevius.5ch.net/test/read.cgi/tech/1581326256/
探検
関数型プログラミング言語Haskell Part34
1デフォルトの名無しさん
2021/12/17(金) 12:57:26.37ID:NPioGyUL158デフォルトの名無しさん
2022/11/07(月) 11:14:09.19ID:uMWKgAVp オーバーヘッドを気にせず頑健性を取りたいとき
うーん、具体例が出てこない
うーん、具体例が出てこない
159デフォルトの名無しさん
2022/11/07(月) 12:17:58.82ID:y2qdzeiV >>157
> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか
> Haskellの求人、あまり見つからないんですが、言語として微妙な感じなんでしょうか…?
> HaskellでできることはPython、Java、Go、Scalaでできる、みたいな…
> あえてHaskellを使う意味がない、みたいな…
かきか
160デフォルトの名無しさん
2022/11/07(月) 12:18:26.38ID:y2qdzeiV 誤操作スマソ
161デフォルトの名無しさん
2022/11/08(火) 09:36:33.50ID:VjMrXhSs 消費者目線ではGHCはフリーソフトだからコストが高いとは言えない
コストという物差しが万能ではない具体例がいま出た
コストという物差しが万能ではない具体例がいま出た
162デフォルトの名無しさん
2022/11/09(水) 01:51:03.18ID:3Bh922De まあ学者さんたちのお遊びだからね・・
163デフォルトの名無しさん
2022/11/09(水) 10:38:48.12ID:wL144bz5 どういう結果になるのか契約とか誓約しないのがオープンソース
お遊びにしかならないという保証もしてない
お遊びにしかならないという保証もしてない
164デフォルトの名無しさん
2022/12/02(金) 14:29:56.51ID:fOU9+Fqp Haskellまだイキテル?
165デフォルトの名無しさん
2022/12/03(土) 12:50:06.92ID:HJhX36nM 無生物であることは保証する
何も実験してないのに保証することを数学的と言えないこともない
何も実験してないのに保証することを数学的と言えないこともない
166デフォルトの名無しさん
2022/12/12(月) 16:34:32.76ID:Yq3RU8vo Unreal Verse
https://simon.peytonjones.org/assets/pdfs/haskell-exchange-22.pdf
サイモンさんが関わってるからHaskellの弟分なのかな?
unreal engineに採用なら関数型プログラミングでは
一番使われることになるんだろうか
https://simon.peytonjones.org/assets/pdfs/haskell-exchange-22.pdf
サイモンさんが関わってるからHaskellの弟分なのかな?
unreal engineに採用なら関数型プログラミングでは
一番使われることになるんだろうか
167デフォルトの名無しさん
2022/12/13(火) 21:33:17.94ID:s5AI7uvQ ちょっとやってみるかと思ったら
今はHIEじゃなくてHLS使えみたいなのがぼちぼち出てくるが
じゃあHLSをemacsからどう利用すりゃいいのってなると情報なし
どうなってんのよ
haskell-modeなんて2016で止まってるし
今はHIEじゃなくてHLS使えみたいなのがぼちぼち出てくるが
じゃあHLSをemacsからどう利用すりゃいいのってなると情報なし
どうなってんのよ
haskell-modeなんて2016で止まってるし
168デフォルトの名無しさん
2022/12/15(木) 08:50:05.16ID:hYy+q+Gy >>166
10年越しのビジョン実現で胸熱
https://pc.watch.impress.co.jp/docs/column/kaigai/555239.html
>プレゼンテーションを見ると、Sweeney氏はゲームコードを走らせるプラットフォームが超並列化して行くことを予見し、Unrealの場合は80%のCPUユーセージを並列化が可能だと語っている。また、(ソフトウェア)トランザクショナルメモリや、プログラミングには関数型言語(例としてHaskellを挙げていたが、同時にHaskellに好ましくない点もあると説明している)がフィットすることなどを語っている。
それにしてもSPJを引き抜くなんてゲーム業界はすごい
10年越しのビジョン実現で胸熱
https://pc.watch.impress.co.jp/docs/column/kaigai/555239.html
>プレゼンテーションを見ると、Sweeney氏はゲームコードを走らせるプラットフォームが超並列化して行くことを予見し、Unrealの場合は80%のCPUユーセージを並列化が可能だと語っている。また、(ソフトウェア)トランザクショナルメモリや、プログラミングには関数型言語(例としてHaskellを挙げていたが、同時にHaskellに好ましくない点もあると説明している)がフィットすることなどを語っている。
それにしてもSPJを引き抜くなんてゲーム業界はすごい
169デフォルトの名無しさん
2022/12/15(木) 11:15:36.01ID:3Q63kYiw いや15年越し
https://game.watch.impress.co.jp/docs/20080911/epic.htm
>Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
https://game.watch.impress.co.jp/docs/20080911/epic.htm
>Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。
170デフォルトの名無しさん
2022/12/17(土) 23:16:08.75ID:7V76W+iX HaskellでWebシステムのバックエンドを開発したときのメモリ使用量は
GoやPythonと比較してどの程度でしょうか?多いですか?少ないですか?
GoやPythonと比較してどの程度でしょうか?多いですか?少ないですか?
171デフォルトの名無しさん
2022/12/23(金) 15:37:27.80ID:Rf1vHPUu サーバとクライアントのサンプルプログラムを練習で書いたのだけど
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?
toSend <- T.getLine
sendAll sock (E.encodeUtf8 toSend)
日本語文字列を出力するのにByteStringを経由しなきゃいけない
もしかして任意の型でやりとりがしたいとき
自分でByteStringにパック&アンパックしなきゃいけない?
多分、C言語のFFIがベースになってるからこんな風になってるんだよね?
172デフォルトの名無しさん
2022/12/23(金) 20:44:32.65ID:Gou4DLut173デフォルトの名無しさん
2022/12/29(木) 17:00:27.04ID:ZBF5EoRT モノイド、関手は習得できたけど
自然変換で躓いてる
自然変換で躓いてる
174デフォルトの名無しさん
2022/12/29(木) 23:24:37.93ID:pM4wQIt0 今haskellでguiを作るなら何がいい?
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい
できれば低レベル層のライブラリは使いたくないけど
wxはもうめんてされてない
fugets?threepenny?webviewhs?どれもarchのパッケージにない
実用言語としてhaskellを使いたいのに使えないのばかりで悲しい
175デフォルトの名無しさん
2022/12/30(金) 12:18:58.51ID:/hxsvxNk ところでwxHaskellが流行らないのはなぜ?
wxが流行ってないからかな?
wxが流行ってないからかな?
176デフォルトの名無しさん
2022/12/30(金) 13:53:40.82ID:FXsz7+hW 本当に必要なのはドリルの大量生産ではなくドリルでもなく穴だからかな
177デフォルトの名無しさん
2022/12/30(金) 19:21:21.60ID:dTZ5gB6H Haskellはすでに見放されてる感ある
178デフォルトの名無しさん
2023/01/02(月) 01:15:52.75ID:jETc9FsM >>177
そうなの?それは実務的な意味で?
そうなの?それは実務的な意味で?
179デフォルトの名無しさん
2023/01/02(月) 03:01:15.30ID:/m9PT5PE ステマが酷すぎた。
180デフォルトの名無しさん
2023/01/02(月) 03:01:59.29ID:/m9PT5PE 言いなおそう。
某出版社のステマが酷すぎた。
某出版社のステマが酷すぎた。
181デフォルトの名無しさん
2023/01/03(火) 00:10:20.46ID:7mh2KVDC 見放されるようになったのは、
モナドってなに?というミステリアスで興味深い問いがいつのまにか
白けた話になったからじゃないか。もうどうでもいいというか。
モナドってなに?というミステリアスで興味深い問いがいつのまにか
白けた話になったからじゃないか。もうどうでもいいというか。
182デフォルトの名無しさん
2023/01/03(火) 04:29:29.65ID:yYGSV1g6 技術評論社のせいでは?
183デフォルトの名無しさん
2023/01/04(水) 05:08:58.65ID:peYJ5uzH メンテナーが次々と逃げ出してるのが象徴的・・
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる
遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい
わかりやすいコードを書くとすこぶるパフォーマンス悪いし
だからといって頑張ると一体これは何をしたいのだってなる
遅延評価がデフォルトなのも非常にまずいし
正格評価と切り分けて結局は書かなければならずまだまだ発展途上だと感じる
いっそのこと正格評価はなしとした方がいっそ清々しい
184デフォルトの名無しさん
2023/01/04(水) 18:10:50.86ID:HUTbVNXS PureScriptに移行しようぜ
正格評価で使いやすいし
正格評価で使いやすいし
185デフォルトの名無しさん
2023/01/05(木) 03:59:19.12ID:PBBtO4Nd しかし無限数列とか表現できなくなるのがなぁ
186デフォルトの名無しさん
2023/01/05(木) 12:24:48.41ID:dQdtWkz5 あんなもの現実には扱えないからな
適当な数値を上限にしとけばいいだけ
適当な数値を上限にしとけばいいだけ
187デフォルトの名無しさん
2023/01/05(木) 13:19:36.00ID:PBBtO4Nd イヤ、“表現できる”ってとこに意味があるんだよ
188デフォルトの名無しさん
2023/01/05(木) 14:40:58.83ID:dQdtWkz5 その割にデメリットの方が大きすぎる
やはりいらないよ
やはりいらないよ
189デフォルトの名無しさん
2023/01/14(土) 23:43:44.49ID:vLwyb8f9 PureScriptと被ってるかな?
[GHC 9.6.1-alpha1 is now available - Announcements - Haskell Community](https://discourse.haskell.org/t/ghc-9-6-1-alpha1-is-now-available/5585)
[GHC 9.6.1-alpha1 is now available - Announcements - Haskell Community](https://discourse.haskell.org/t/ghc-9-6-1-alpha1-is-now-available/5585)
190デフォルトの名無しさん
2023/01/17(火) 00:55:50.42ID:zIKNxshB 無限の長さの [a] を仮に廃止して他の言語と同じような方式に変えたら IO a のような型になる
生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある
生物学とか好きそうな人達は [a] と IO a の差が致命的 (つまり一方は死ぬが他方は生き残る)
と決めつける傾向がある
191デフォルトの名無しさん
2023/01/17(火) 01:31:37.81ID:PP1OxyD+ 生物学関係ないな
192デフォルトの名無しさん
2023/01/17(火) 03:13:49.00ID:zIKNxshB 言語は死なないとか復活させればいいだけとか思うならもう生物学関係ない
そう思わないなら関係ありそう
そう思わないなら関係ありそう
193デフォルトの名無しさん
2023/01/17(火) 08:07:29.90ID:Inpyi8aQ 無意味な比喩表現
194デフォルトの名無しさん
2023/01/19(木) 01:20:46.84ID:cE+DUb2P クラウドは中に人がいるのか無人なのか調べられないので
人間と機械を混同したのではなく不確実にした
人間と機械を混同したのではなく不確実にした
195デフォルトの名無しさん
2023/01/19(木) 07:47:39.45ID:7wHhBGeN 意味不明
もう少し文章を書く練習をしろ
もう少し文章を書く練習をしろ
196デフォルトの名無しさん
2023/01/19(木) 17:42:25.26ID:ugYwIpAQ 嘘を書くのをやめろって言われない努力はしてる
現に、嘘だと言われない
現に、嘘だと言われない
197デフォルトの名無しさん
2023/01/19(木) 20:45:58.03ID:LuniV29G 間違ってさえいない文章
真偽以前に中身がない
真偽以前に中身がない
198デフォルトの名無しさん
2023/01/19(木) 20:49:17.03ID:LuniV29G それっぽいだけで少し読めば大したことすら書かれてないのがわかる
199デフォルトの名無しさん
2023/01/19(木) 21:18:32.97ID:ugYwIpAQ 「わかる」と「意味不明」は矛盾しそう
どっちかが嘘ついるのでは
どっちかが嘘ついるのでは
200デフォルトの名無しさん
2023/01/19(木) 21:33:25.41ID:QROh3L3M201デフォルトの名無しさん
2023/01/19(木) 21:38:24.06ID:CHvJHSS4 お前も反応すんなよ
202デフォルトの名無しさん
2023/01/20(金) 01:52:23.49ID:jpIFaaML いくら話題がないからって
203デフォルトの名無しさん
2023/01/21(土) 13:30:02.33ID:ms4pFp6J 職業倫理が苦手です
204デフォルトの名無しさん
2023/01/21(土) 16:31:20.60ID:c9rqNig0 スレチ
205デフォルトの名無しさん
2023/01/29(日) 20:58:33.14ID:3238s/rq 教科書の通りなのになんでエラーになるんだろう?
code:
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = fork (f h, g h)
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
Error occurred
ERROR line 2 - Type error in explicitly typed binding
*** Term : fork
*** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d)
*** Does not match : (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d)
code:
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = fork (f h, g h)
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
Error occurred
ERROR line 2 - Type error in explicitly typed binding
*** Term : fork
*** Type : (a -> b -> c,a -> b -> d) -> a -> b -> (c,d)
*** Does not match : (a -> b -> c,a -> b -> d) -> a -> (b -> c,b -> d)
206デフォルトの名無しさん
2023/01/30(月) 02:11:06.80ID:jVdK8GQm207デフォルトの名無しさん
2023/01/30(月) 04:31:24.57ID:KsiNNj/4 >>206
ありがとうございます。その通りでした。
code:
pair :: (a->b, a->c) -> a -> (b, c)
pair (f, g) x = (f x, g x)
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = pair (f, g) h
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
-- ([0,1,2,3,4],"hallo")
これで上手く動いたので報告しておこうと思ったら、同じことを2時間以上も前に... oTL
ありがとうございます。その通りでした。
code:
pair :: (a->b, a->c) -> a -> (b, c)
pair (f, g) x = (f x, g x)
fork :: (a->b, a->c) -> a -> (b, c)
fork (f, g) h = pair (f, g) h
main :: IO ()
main = do
print $ fork (map fst, map snd) (zip [0 .. 4] "hallo")
Output:
-- ([0,1,2,3,4],"hallo")
これで上手く動いたので報告しておこうと思ったら、同じことを2時間以上も前に... oTL
208デフォルトの名無しさん
2023/02/01(水) 14:35:45.13ID:RAEJFXsc Haskell使い(でLinux使い)の皆さんってxmonad使ってますか?
ウィンドウフォーカスを切り替えるときにfloatingウィンドウは無視するようにしたいです。
オリジナルのfocusUp'関数は
focusUp' :: Stack a -> a
focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs)
focusUp' (Stack t [] rs) = Stack x xs []
where (x :| xs) = NE.reverse (t :| rs)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?
ウィンドウフォーカスを切り替えるときにfloatingウィンドウは無視するようにしたいです。
オリジナルのfocusUp'関数は
focusUp' :: Stack a -> a
focusUp' (Stack t (l:ls) rs) = Stack l ls (t:rs)
focusUp' (Stack t [] rs) = Stack x xs []
where (x :| xs) = NE.reverse (t :| rs)
と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか?
209デフォルトの名無しさん
2023/02/17(金) 00:17:58.82ID:x2uQcODA ChatGPTにいろんなサンプル書かせて勉強させてもらってるわ
210デフォルトの名無しさん
2023/02/18(土) 07:53:47.68ID:pwjCq/Fb >>208ですがスレチですかね
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)
Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……)
211デフォルトの名無しさん
2023/02/23(木) 22:53:40.11ID:3VcdShfb すみません
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが
具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。
v1 :: Maybe a
v1 = Nothing
v2 :: [a]
v2 = []
型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。
また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)
凄いHを楽しく学ぶ本を復習していて
疑問に思って試してみたのですが
具体的な型が決まらない値(単独変数で)は
下記の(Maybeや配列)の他にどんなのがありますでしょうか。
v1 :: Maybe a
v1 = Nothing
v2 :: [a]
v2 = []
型拘束を使わない型変数を使って
ある単独変数の型を定義できない物かと思いました。
また関数でも具体的な型が決まらない値を返す
関数はありますでしょうか。
(Nothingや空リスト以外で)
212デフォルトの名無しさん
2023/02/24(金) 02:14:24.44ID:PIH/rCf2 >>211
Bing チャットに聞いたらこんなのが返ってきた。参考になるかな。
型変数を含むデータ型の例としては、関数型、代数的データ型、型クラスなどがあります。
例: data Tree a = Leaf a | Node (Tree a) (Tree a)
この代数的データ型Treeは任意の型aを要素とする二分木を表します。
例: class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
この型クラスEqは任意の型aに対して等値性を定義するための仕組みです。
Bing チャットに聞いたらこんなのが返ってきた。参考になるかな。
型変数を含むデータ型の例としては、関数型、代数的データ型、型クラスなどがあります。
例: data Tree a = Leaf a | Node (Tree a) (Tree a)
この代数的データ型Treeは任意の型aを要素とする二分木を表します。
例: class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
この型クラスEqは任意の型aに対して等値性を定義するための仕組みです。
213デフォルトの名無しさん
2023/02/25(土) 11:21:45.77ID:h/PI1ikt >>212
ありがとうございます。
凄いHを楽しく学ぶ本にも
Tree型があったので試してみました。
具体的な中身が「無い」事を現す値の場合
型引数で定義できるみたいです。
data Tree a = EmptyTree | Node a (Tree a) (Tree a)
deriving (Show)
v3 :: Tree a
v3 = EmptyTree
ありがとうございます。
凄いHを楽しく学ぶ本にも
Tree型があったので試してみました。
具体的な中身が「無い」事を現す値の場合
型引数で定義できるみたいです。
data Tree a = EmptyTree | Node a (Tree a) (Tree a)
deriving (Show)
v3 :: Tree a
v3 = EmptyTree
214デフォルトの名無しさん
2023/04/29(土) 14:07:24.45ID:AoTbqg9O マルチポストだが教えてくれ
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
215デフォルトの名無しさん
2023/05/01(月) 00:30:45.06ID:PDTetkfq >>214
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician
よく分からんけど「モナドが発明された経緯」ではないな
1971年の本ですでにモナドについて書かれてるようだし
en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician
216デフォルトの名無しさん
2023/05/03(水) 20:58:10.10ID:ioA1phJ7 >>214
英語で調べてもそんな話出てきたことはないな。
英語で調べてもそんな話出てきたことはないな。
217デフォルトの名無しさん
2023/05/03(水) 21:14:18.69ID:ioA1phJ7218デフォルトの名無しさん
2023/06/09(金) 14:58:05.85ID:GYy2ex4t lispやらカリー=ハワード同型やらの関連性は
数学的な意味では遥か前だし実装上の話かな
https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics
数学的な意味では遥か前だし実装上の話かな
https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics
219デフォルトの名無しさん
2023/06/20(火) 00:30:03.89ID:qm9+2t5E do 記法でのメモ化について質問です
例えば
do
let x <- someComplexExpression
print $ f x
print $ g x
のようなコードがあったとしてxの値はf xの評価の時点とg xの評価の時点で2回別々にされますか?
少なくともHaskell2010 Lang. Rep. (以下HLR2010)ではこのような場合メモ化されて2回展開されることはないという記述を見つけることはできませんでした
なので公式にはこのような記述だと2回展開されると思わなければいけないのだと思います
ではsomeComplexExpressionを先に展開してから、展開したものをxにbindするにはどうすれば良いのでしょうか?
HLR2010ではswqを使えば良いとあるのですがこの場合
x <- seq someComplexExpression someComplexExpression
とかでうまく行くんでしょうか?
またそれでうまくいってるのかどうか確かめる方法はありますか?
つまり実際何回 someComplexExpressionが展開されてる回数を確かめる方法はありますか?
よろしくお願い致します
例えば
do
let x <- someComplexExpression
print $ f x
print $ g x
のようなコードがあったとしてxの値はf xの評価の時点とg xの評価の時点で2回別々にされますか?
少なくともHaskell2010 Lang. Rep. (以下HLR2010)ではこのような場合メモ化されて2回展開されることはないという記述を見つけることはできませんでした
なので公式にはこのような記述だと2回展開されると思わなければいけないのだと思います
ではsomeComplexExpressionを先に展開してから、展開したものをxにbindするにはどうすれば良いのでしょうか?
HLR2010ではswqを使えば良いとあるのですがこの場合
x <- seq someComplexExpression someComplexExpression
とかでうまく行くんでしょうか?
またそれでうまくいってるのかどうか確かめる方法はありますか?
つまり実際何回 someComplexExpressionが展開されてる回数を確かめる方法はありますか?
よろしくお願い致します
220デフォルトの名無しさん
2023/06/25(日) 14:24:09.04ID:H+Ij4nqZ 質問にさせていただきます
違う標数での有限体での計算を必要とするコードを考えてます
ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して
x = F3 $ 1+2
y = F5 $ 2-5
のような記述ができればいいなと思ってます
そのためには
data FiniteFieldCh3 = F3 Int
instance Num F3 where...
のようにF3,F5両方にNumを定義しないといけません
面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( char x )
違う標数での有限体での計算を必要とするコードを考えてます
ある変数に𝔽₃や𝔽₅の値を混在して代入することはないので𝔽₃の元を生成するconstructor F3や𝔽₅の元を生成すconstructor F5を定義して
x = F3 $ 1+2
y = F5 $ 2-5
のような記述ができればいいなと思ってます
そのためには
data FiniteFieldCh3 = F3 Int
instance Num F3 where...
のようにF3,F5両方にNumを定義しないといけません
面倒なのでFiniteFieldと言うクラスを作って以下のようにできないかやってみたところ
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( char x )
221デフォルトの名無しさん
2023/06/25(日) 14:24:14.71ID:H+Ij4nqZ 以下のようなerror が出てきます
prog.hs:22:10: error:
• The constraint ‘FiniteField a’
is no smaller than the instance head
(Use UndecidableInstances to permit this)
• In the instance declaration for ‘(Num a)’
|
22 | instance ( FiniteField a ) => ( Num a ) where
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
コレはなんですか?
ちなみにFlexibleInstancesというのが必要かとの事なので冒頭に
{-# LANGUAGE FlexibleInstances #-}
を入れています
コンパイラはghc8.4.4です
よろしくお願い致します
prog.hs:22:10: error:
• The constraint ‘FiniteField a’
is no smaller than the instance head
(Use UndecidableInstances to permit this)
• In the instance declaration for ‘(Num a)’
|
22 | instance ( FiniteField a ) => ( Num a ) where
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
コレはなんですか?
ちなみにFlexibleInstancesというのが必要かとの事なので冒頭に
{-# LANGUAGE FlexibleInstances #-}
を入れています
コンパイラはghc8.4.4です
よろしくお願い致します
222デフォルトの名無しさん
2023/06/25(日) 14:43:47.12ID:H+Ij4nqZ すいません、最後の行間違って修正前のやつコピペしました
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( modulus x )
です
よろしくお願い致します
class FiniteField t where
modulus :: t -> Int
toInt :: t -> Int
fromInt :: Int -> t
instance ( FiniteField a ) => ( Num a ) where
x + y = fromInt
$ mod ( toInt x ) + ( toInt y ) ) ( modulus x )
です
よろしくお願い致します
223デフォルトの名無しさん
2023/06/25(日) 15:08:12.64ID:CDxt6lPg 型クラスの単相性制限とか、関数従属性とか、とか。。。
的外れなこと言ってたらごめん。
的外れなこと言ってたらごめん。
224デフォルトの名無しさん
2023/06/25(日) 15:23:50.61ID:CDxt6lPg なんか Bard とかにつっこんでも情報得られるかも
225デフォルトの名無しさん
2023/06/25(日) 17:33:31.79ID:OvK+yilq ありがとうございます
現在まだ調べてる最中なんですけど
https://stackoverflow.com/questions/7198907/haskell-constraint-is-no-smaller-than-the-instance-head
によるとどうもclass制約の解決をloopさせないための制約くさいです
つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言
class ( C a ) => D a where ...
class ( D a ) => C a where ...
のような宣言があるとまずいようです
なので=>の左側の型は右側の型より“短い”事が要求されるそうです
例えばtoDみたいな型生成子を作っておいて
class ( C a ) => ( D ( toD a ) ) where ...
などとしないといけないらしいです
でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら
現在まだ調べてる最中なんですけど
https://stackoverflow.com/questions/7198907/haskell-constraint-is-no-smaller-than-the-instance-head
によるとどうもclass制約の解決をloopさせないための制約くさいです
つまり「aがclasd Cのときclass Dにも入れる事ができる」、「aがclass Dのときclass Cにも入れる事ができる」の宣言
class ( C a ) => D a where ...
class ( D a ) => C a where ...
のような宣言があるとまずいようです
なので=>の左側の型は右側の型より“短い”事が要求されるそうです
例えばtoDみたいな型生成子を作っておいて
class ( C a ) => ( D ( toD a ) ) where ...
などとしないといけないらしいです
でその後newtypeを使うとどうやらこうやら書いてあるんですけどなんのことやら
226デフォルトの名無しさん
2023/07/03(月) 23:45:49.20ID:QPaqlNti 値とmoduleどっちも含んだdata作ればいいのでは
227デフォルトの名無しさん
2023/07/04(火) 00:24:50.19ID:+0TfLuMN >>226
こういうやつですね
data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq)
instance Num FiniteField where
x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x )
x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x )
fromInteger x = FF x 1
でもコレだと例えば
x = FF 2 7
y = FF 4 7
x + y
のような場合実行時にプログラムは値に格納されてるmodulusを読みに行ってから割り算行うという手間がかかります
しかし私のやりたいプログラムではそもそも各変数のmodulusは確定していてそもそも読みに行くのはバカバカしい感じがします
実行時にxもyも𝔽₇の元と決まりきっててmod の第二引数はコンパイル時点で7と決まっているのにその7を読みに行く作業が無駄に思えるんです
しかもコレは型ではなく値なので型チェックの恩恵も受けることができません
プログラム中に出てくるmodilus事に全部F2型、F3型、F5型‥と全部作って全部のNum instance一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと
こういうやつですね
data FiniteField = FF { val :: Int, modulus :: Int } deriving ( Show, Eq)
instance Num FiniteField where
x + y = FF ( mod ( ( val x ) + ( val y ) ) ( modulus x ) )( modulus x )
x * y = FF ( mod ( ( val x ) * ( val y ) ) ( modulus x ) )( modulus x )
fromInteger x = FF x 1
でもコレだと例えば
x = FF 2 7
y = FF 4 7
x + y
のような場合実行時にプログラムは値に格納されてるmodulusを読みに行ってから割り算行うという手間がかかります
しかし私のやりたいプログラムではそもそも各変数のmodulusは確定していてそもそも読みに行くのはバカバカしい感じがします
実行時にxもyも𝔽₇の元と決まりきっててmod の第二引数はコンパイル時点で7と決まっているのにその7を読みに行く作業が無駄に思えるんです
しかもコレは型ではなく値なので型チェックの恩恵も受けることができません
プログラム中に出てくるmodilus事に全部F2型、F3型、F5型‥と全部作って全部のNum instance一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと
228デフォルトの名無しさん
2023/07/04(火) 11:11:04.93ID:rN492ZrW229デフォルトの名無しさん
2023/07/06(木) 01:04:07.84ID:sds/6LG1 みなさん情報ありがとうございます
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
https://ideone.com/3Lhc4z
色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました
こんな感じになりました
https://ideone.com/3Lhc4z
230デフォルトの名無しさん
2023/08/05(土) 13:07:07.29ID:1IOAcn45 hage
231デフォルトの名無しさん
2023/09/04(月) 14:41:20.09ID:FcZAE9nJ haskellは廃れてきてるな、悲しい
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの
スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか
実用的な言語じゃないなって思う
xmonadなんかはほとんどBangPatternだよね
そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの
232デフォルトの名無しさん
2023/09/16(土) 21:21:50.35ID:6682wM15 数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利)
なぜ多くの言語では集合に順番がないのでしょうか?
なぜ多くの言語では集合に順番がないのでしょうか?
233デフォルトの名無しさん
2023/09/16(土) 21:25:49.38ID:6682wM15 等価判定演算子では順番を問わないが、
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが
一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが
一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?
234デフォルトの名無しさん
2023/09/16(土) 23:06:28.20ID:XG1/1lYn 順番がないやつと順番があるやつは
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?
逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?
逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?
235デフォルトの名無しさん
2023/09/16(土) 23:13:33.62ID:6682wM15 数学的概念として等価だったりどちらが特殊とか言えないのは納得しています
ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です
ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です
236デフォルトの名無しさん
2023/09/17(日) 02:24:17.53ID:yNwKlKA6 データ型としての起源としては
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様
237デフォルトの名無しさん
2023/09/17(日) 02:39:39.55ID:XqeO/FaW 組み込み型とユーザー定義型の区別をなくす思想はある
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる
238デフォルトの名無しさん
2023/09/17(日) 23:47:13.96ID:70jB6wMR 初心者は++を使うけどなれたら<>を使ってる人が多い気がする
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな
239デフォルトの名無しさん
2023/09/18(月) 10:00:00.93ID:E5yF50jH 俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません
俗説が正解だった時代などない
俗説が正解だった時代などない
240デフォルトの名無しさん
2023/09/19(火) 19:53:05.75ID:QCYT99dv unixのtouchを実現したいのですが
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
241デフォルトの名無しさん
2023/09/19(火) 19:54:00.31ID:QCYT99dv unixのtouchを実現したいのですが
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
{-# LANGUAGE OverloadedStrings #-}
import System.Posix.Files.ByteString
main = do
touchFile "hoge.txt"
touch.hs: hoge.txt: touchFile: does not exist (No such file or directory)
というエラーがでます
ないのは当たり前でtouchで作ろうとしてるのですがバグがあるのでしょうか?
242デフォルトの名無しさん
2023/09/19(火) 19:58:16.28ID:QCYT99dv すみません、書き込むボタンの反応がなかったので連投になってしまいました
243デフォルトの名無しさん
2023/09/19(火) 20:14:24.31ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
244デフォルトの名無しさん
2023/09/19(火) 20:14:45.64ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
245デフォルトの名無しさん
2023/09/19(火) 20:18:27.88ID:a563RtWW ありゃ俺も連投しちまったすまん
なんか5ch重いっぽいね
なんか5ch重いっぽいね
246デフォルトの名無しさん
2023/09/20(水) 08:38:40.03ID:I55f6i4N for i in * ; do touch anotherdir/$i ; done
247デフォルトの名無しさん
2023/09/20(水) 08:53:25.46ID:I55f6i4N248デフォルトの名無しさん
2023/09/22(金) 12:15:07.45ID:NjV4q9P3 数値のリストl=[1,10,3]みたいなのを
1 10 3と出力したい。末尾には空白はあってはならないとする
最初
putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l
こんなのを考えたのだが10も1 0と分解されてしまった
しかたなく泥臭いこんなコードを書いたのだがもっといい方法はないだろうか
mp [] = return ()
mp [x] = putStrLn $ show x
mp (x:xs) = do
putStr $ show x ++ " "
mp xs
1 10 3と出力したい。末尾には空白はあってはならないとする
最初
putStrLn $ intersperse ' ' $ foldl' (\acc x -> acc ++ show x) [] l
こんなのを考えたのだが10も1 0と分解されてしまった
しかたなく泥臭いこんなコードを書いたのだがもっといい方法はないだろうか
mp [] = return ()
mp [x] = putStrLn $ show x
mp (x:xs) = do
putStr $ show x ++ " "
mp xs
249デフォルトの名無しさん
2023/09/22(金) 13:06:36.18ID:8SLDLfd5250デフォルトの名無しさん
2023/09/22(金) 14:01:02.50ID:NjV4q9P3 putStrLn $ intercalate " " $ map show l
これでいけました
これでいけました
251デフォルトの名無しさん
2023/09/22(金) 14:01:12.58ID:W8j4O+ex 泥臭いだけで罪があるかのように日常的に刷りこまれてるから
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな
252デフォルトの名無しさん
2023/09/27(水) 15:30:51.70ID:9Ywamwi5 {-# LANGUAGE BinaryLiterals #-}
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ
253デフォルトの名無しさん
2023/09/27(水) 17:59:16.99ID:k7PwLxD8 readが定義されたモジュールは別のLANGUAGEってこと?
254デフォルトの名無しさん
2023/10/11(水) 15:16:15.28ID:1pnnvG+R groupBy (\a b -> snd a == snd b)
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした
255デフォルトの名無しさん
2023/10/11(水) 17:39:54.48ID:Fikp0OWy256デフォルトの名無しさん
2023/10/11(水) 22:05:36.63ID:1pnnvG+R 括弧を使わずにじゃなくてラムダを使わずにでした
まさに欲しかったのそれです
ありがとうございました!!
まさに欲しかったのそれです
ありがとうございました!!
257デフォルトの名無しさん
2023/10/18(水) 05:38:40.90ID:vCrdR6l9 QuickCheckを勉強しているんですが
Runtime Errorを検出したくて次のように書きました
anの要素は2以上n以下で複数回出現します
testcaseがほとんどdiscardされるのですがリストをchoose (2,n)とかで生成するには
どうしたら良いのでしょうか
verboseCheckを指定してみるとskippedだらけなのですが
スキップしたやつは表示しないで欲しい
prop :: Positive Int -> [Int] -> Property
prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO $ do
a' <- run (solve n an)
assert True
Runtime Errorを検出したくて次のように書きました
anの要素は2以上n以下で複数回出現します
testcaseがほとんどdiscardされるのですがリストをchoose (2,n)とかで生成するには
どうしたら良いのでしょうか
verboseCheckを指定してみるとskippedだらけなのですが
スキップしたやつは表示しないで欲しい
prop :: Positive Int -> [Int] -> Property
prop (Positive n) an = all (>=2) an && length an == n ==> monadicIO $ do
a' <- run (solve n an)
assert True
レスを投稿する
ニュース
- 自民 国会議員の歳費 月額5万円引き上げ 今国会での成立目指す [どどん★]
- 志らく、高市首相を批判する人々は「日本人じゃないの?」SNSで賛否 野党議員が一斉批判「差別発言」「非国民扱いするコメンテーター」 [muffin★]
- 【サッカー】2026年W杯組み合わせ抽選 。日本は初のポット2確定! 欧州PO4チームはポット4へ [阿弥陀ヶ峰★]
- 相次ぐ中国公演中止に、シンガーソングライターらが続々高市首相に怒り表明「隣国の仲間たちに対して申し訳ない」★3 [muffin★]
- 東京・足立区の盗難車死亡ひき逃げ事件 11人死傷のうち死亡した男女の身元を発表 80代の男性と20代フィリピン国籍の女性 警視庁 [どどん★]
- 【サッカー】UEFA-CL第5節 チェルシー×バルセロナ、マンC×レバークーゼン、アヤックス×ベンフィカなど [久太郎★]
- ネトウヨ・ウク信・和製シオニスト、イライラしても交通事故だけは起こすなよ [805596214]
- 🖐( -᷄ὢ)これから>>2の>>3なんで……
- 小田原城行ってみようかな
- るるさん
- 犯罪者は結果的に裁かれた方が得だと思う
- 【おじさんのワードセンス】マツコDXが『鉄道路線の愛称がダサすぎる』と嘆いた次の日、『新サービス』が発表 [454313373]
