関数型プログラミング言語Haskell Part34 (667レス)
関数型プログラミング言語Haskell Part34 http://mevius.5ch.net/test/read.cgi/tech/1639713446/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
222: デフォルトの名無しさん [sage] 2023/06/25(日) 14:43:47.12 ID: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 ) です よろしくお願い致します http://mevius.5ch.net/test/read.cgi/tech/1639713446/222
223: デフォルトの名無しさん [sage] 2023/06/25(日) 15:08:12.64 ID:CDxt6lPg 型クラスの単相性制限とか、関数従属性とか、とか。。。 的外れなこと言ってたらごめん。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/223
224: デフォルトの名無しさん [sage] 2023/06/25(日) 15:23:50.61 ID:CDxt6lPg なんか Bard とかにつっこんでも情報得られるかも http://mevius.5ch.net/test/read.cgi/tech/1639713446/224
225: デフォルトの名無しさん [sage] 2023/06/25(日) 17:33:31.79 ID: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を使うとどうやらこうやら書いてあるんですけどなんのことやら http://mevius.5ch.net/test/read.cgi/tech/1639713446/225
226: デフォルトの名無しさん [sage] 2023/07/03(月) 23:45:49.20 ID:QPaqlNti 値とmoduleどっちも含んだdata作ればいいのでは http://mevius.5ch.net/test/read.cgi/tech/1639713446/226
227: デフォルトの名無しさん [sage] 2023/07/04(火) 00:24:50.19 ID:+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一個ずつ定義してとやればできるんでしょうけど、何が上手い逃げ道はないものかと http://mevius.5ch.net/test/read.cgi/tech/1639713446/227
228: デフォルトの名無しさん [sage] 2023/07/04(火) 11:11:04.93 ID:rN492ZrW この記事では剰余環を作っているみたいだけど、参考にならないかな https://qiita.com/gummycandy/items/9abca700eea7f46626e4 http://mevius.5ch.net/test/read.cgi/tech/1639713446/228
229: デフォルトの名無しさん [sage] 2023/07/06(木) 01:04:07.84 ID:sds/6LG1 みなさん情報ありがとうございます 色々紹介していただいたソースとか自分で探してみた情報とかでまずは一区切りつける事にしました こんな感じになりました https://ideone.com/3Lhc4z http://mevius.5ch.net/test/read.cgi/tech/1639713446/229
230: デフォルトの名無しさん [] 2023/08/05(土) 13:07:07.29 ID:1IOAcn45 hage http://mevius.5ch.net/test/read.cgi/tech/1639713446/230
231: デフォルトの名無しさん [sage] 2023/09/04(月) 14:41:20.09 ID:FcZAE9nJ haskellは廃れてきてるな、悲しい スペースリーク対応は難しすぎるしライブラリ類も最新のghcだと使えなかったりしてなんか 実用的な言語じゃないなって思う xmonadなんかはほとんどBangPatternだよね そういえば自動でstrictにする拡張が2個ぐらいあったけど追ってないどうなの http://mevius.5ch.net/test/read.cgi/tech/1639713446/231
232: デフォルトの名無しさん [] 2023/09/16(土) 21:21:50.35 ID:6682wM15 数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利) なぜ多くの言語では集合に順番がないのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/232
233: デフォルトの名無しさん [] 2023/09/16(土) 21:25:49.38 ID:6682wM15 等価判定演算子では順番を問わないが、 記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが 一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/233
234: デフォルトの名無しさん [sage] 2023/09/16(土) 23:06:28.20 ID:XG1/1lYn 順番がないやつと順番があるやつは なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか? 逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/234
235: デフォルトの名無しさん [] 2023/09/16(土) 23:13:33.62 ID:6682wM15 数学的概念として等価だったりどちらが特殊とか言えないのは納得しています ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、 多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です http://mevius.5ch.net/test/read.cgi/tech/1639713446/235
236: デフォルトの名無しさん [sage] 2023/09/17(日) 02:24:17.53 ID:yNwKlKA6 データ型としての起源としては 素集合データ構造から始まっているようなので 素である(disjoint)ことがまず要求されて 他に集合という名前が使われていないことから 素で非順序的なデータ型のことを集合型と呼ぶことになった模様 http://mevius.5ch.net/test/read.cgi/tech/1639713446/236
237: デフォルトの名無しさん [sage] 2023/09/17(日) 02:39:39.55 ID:XqeO/FaW 組み込み型とユーザー定義型の区別をなくす思想はある 最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる http://mevius.5ch.net/test/read.cgi/tech/1639713446/237
238: デフォルトの名無しさん [sage] 2023/09/17(日) 23:47:13.96 ID:70jB6wMR 初心者は++を使うけどなれたら<>を使ってる人が多い気がする SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな http://mevius.5ch.net/test/read.cgi/tech/1639713446/238
239: デフォルトの名無しさん [sage] 2023/09/18(月) 10:00:00.93 ID:E5yF50jH 俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません 俗説が正解だった時代などない http://mevius.5ch.net/test/read.cgi/tech/1639713446/239
240: デフォルトの名無しさん [sage] 2023/09/19(火) 19:53:05.75 ID: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で作ろうとしてるのですがバグがあるのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/240
241: デフォルトの名無しさん [sage] 2023/09/19(火) 19:54:00.31 ID: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で作ろうとしてるのですがバグがあるのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/241
242: デフォルトの名無しさん [sage] 2023/09/19(火) 19:58:16.28 ID:QCYT99dv すみません、書き込むボタンの反応がなかったので連投になってしまいました http://mevius.5ch.net/test/read.cgi/tech/1639713446/242
243: デフォルトの名無しさん [sage] 2023/09/19(火) 20:14:24.31 ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ http://mevius.5ch.net/test/read.cgi/tech/1639713446/243
244: デフォルトの名無しさん [sage] 2023/09/19(火) 20:14:45.64 ID:a563RtWW touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ http://mevius.5ch.net/test/read.cgi/tech/1639713446/244
245: デフォルトの名無しさん [sage] 2023/09/19(火) 20:18:27.88 ID:a563RtWW ありゃ俺も連投しちまったすまん なんか5ch重いっぽいね http://mevius.5ch.net/test/read.cgi/tech/1639713446/245
246: デフォルトの名無しさん [sage] 2023/09/20(水) 08:38:40.03 ID:I55f6i4N for i in * ; do touch anotherdir/$i ; done http://mevius.5ch.net/test/read.cgi/tech/1639713446/246
247: デフォルトの名無しさん [] 2023/09/20(水) 08:53:25.46 ID:I55f6i4N >>246(bash)でお茶を濁した perlが明日消えてなくなるらしいのでHaskellをPerlの代わりに使おうと思う 正規表現とグロブ、ファイル入出力はできた 他に何かあるかな http://mevius.5ch.net/test/read.cgi/tech/1639713446/247
248: デフォルトの名無しさん [sage] 2023/09/22(金) 12:15:07.45 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1639713446/248
249: デフォルトの名無しさん [sage] 2023/09/22(金) 13:06:36.18 ID:8SLDLfd5 https://jutememo.blogspot.com/2008/06/haskell-join-listdata-intersperse.html http://mevius.5ch.net/test/read.cgi/tech/1639713446/249
250: デフォルトの名無しさん [sage] 2023/09/22(金) 14:01:02.50 ID:NjV4q9P3 putStrLn $ intercalate " " $ map show l これでいけました http://mevius.5ch.net/test/read.cgi/tech/1639713446/250
251: デフォルトの名無しさん [sage] 2023/09/22(金) 14:01:12.58 ID:W8j4O+ex 泥臭いだけで罪があるかのように日常的に刷りこまれてるから 本当の有罪確定したやつは絶対許してもらえないよな そりゃそうだよな http://mevius.5ch.net/test/read.cgi/tech/1639713446/251
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 416 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s