関数型プログラミング言語Haskell Part34 (667レス)
関数型プログラミング言語Haskell Part34 http://mevius.5ch.net/test/read.cgi/tech/1639713446/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
201: デフォルトの名無しさん [sage] 2023/01/19(木) 21:38:24.06 ID:CHvJHSS4 お前も反応すんなよ http://mevius.5ch.net/test/read.cgi/tech/1639713446/201
202: デフォルトの名無しさん [sage] 2023/01/20(金) 01:52:23.49 ID:jpIFaaML いくら話題がないからって http://mevius.5ch.net/test/read.cgi/tech/1639713446/202
203: デフォルトの名無しさん [sage] 2023/01/21(土) 13:30:02.33 ID:ms4pFp6J 職業倫理が苦手です http://mevius.5ch.net/test/read.cgi/tech/1639713446/203
204: デフォルトの名無しさん [sage] 2023/01/21(土) 16:31:20.60 ID:c9rqNig0 スレチ http://mevius.5ch.net/test/read.cgi/tech/1639713446/204
205: デフォルトの名無しさん [sage] 2023/01/29(日) 20:58:33.14 ID: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) http://mevius.5ch.net/test/read.cgi/tech/1639713446/205
206: デフォルトの名無しさん [sage] 2023/01/30(月) 02:11:06.80 ID:jVdK8GQm >>205 fork (f, g) h = (f h, g h) では? http://mevius.5ch.net/test/read.cgi/tech/1639713446/206
207: デフォルトの名無しさん [sage] 2023/01/30(月) 04:31:24.57 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1639713446/207
208: デフォルトの名無しさん [sage] 2023/02/01(水) 14:35:45.13 ID: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) と大変記述量の少ない作りになってるのですが、これに最小の変更を加えて目的を実現するとしたらどうするべきでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/208
209: デフォルトの名無しさん [sage] 2023/02/17(金) 00:17:58.82 ID:x2uQcODA ChatGPTにいろんなサンプル書かせて勉強させてもらってるわ http://mevius.5ch.net/test/read.cgi/tech/1639713446/209
210: デフォルトの名無しさん [sage] 2023/02/18(土) 07:53:47.68 ID:pwjCq/Fb >>208ですがスレチですかね Linux板のタイル型WMスレに移動させていただきます (全く動いてないスレなのでダメ元ですが……) http://mevius.5ch.net/test/read.cgi/tech/1639713446/210
211: デフォルトの名無しさん [] 2023/02/23(木) 22:53:40.11 ID:3VcdShfb すみません 凄いHを楽しく学ぶ本を復習していて 疑問に思って試してみたのですが 具体的な型が決まらない値(単独変数で)は 下記の(Maybeや配列)の他にどんなのがありますでしょうか。 v1 :: Maybe a v1 = Nothing v2 :: [a] v2 = [] 型拘束を使わない型変数を使って ある単独変数の型を定義できない物かと思いました。 また関数でも具体的な型が決まらない値を返す 関数はありますでしょうか。 (Nothingや空リスト以外で) http://mevius.5ch.net/test/read.cgi/tech/1639713446/211
212: デフォルトの名無しさん [sage] 2023/02/24(金) 02:14:24.44 ID: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に対して等値性を定義するための仕組みです。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/212
213: デフォルトの名無しさん [sage] 2023/02/25(土) 11:21:45.77 ID:h/PI1ikt >>212 ありがとうございます。 凄いHを楽しく学ぶ本にも Tree型があったので試してみました。 具体的な中身が「無い」事を現す値の場合 型引数で定義できるみたいです。 data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show) v3 :: Tree a v3 = EmptyTree http://mevius.5ch.net/test/read.cgi/tech/1639713446/213
214: デフォルトの名無しさん [] 2023/04/29(土) 14:07:24.45 ID:AoTbqg9O マルチポストだが教えてくれ 【追記あり】ChatGPTじゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。 https://qiita.com/iHdkz/items/e7a59eef034ab6d0fdc2 この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの? http://mevius.5ch.net/test/read.cgi/tech/1639713446/214
215: デフォルトの名無しさん [sage] 2023/05/01(月) 00:30:45.06 ID:PDTetkfq >>214 よく分からんけど「モナドが発明された経緯」ではないな 1971年の本ですでにモナドについて書かれてるようだし en.wikipedia.org/wiki/Categories_for_the_Working_Mathematician http://mevius.5ch.net/test/read.cgi/tech/1639713446/215
216: デフォルトの名無しさん [sage] 2023/05/03(水) 20:58:10.10 ID:ioA1phJ7 >>214 英語で調べてもそんな話出てきたことはないな。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/216
217: デフォルトの名無しさん [sage] 2023/05/03(水) 21:14:18.69 ID:ioA1phJ7 これにもそんなストーリー書いてない https://pdfs.semanticscholar.org/59d7/a0f5c341ab450e2893eb73384895524bbebd.pdf http://mevius.5ch.net/test/read.cgi/tech/1639713446/217
218: デフォルトの名無しさん [sage] 2023/06/09(金) 14:58:05.85 ID:GYy2ex4t lispやらカリー=ハワード同型やらの関連性は 数学的な意味では遥か前だし実装上の話かな https://en.m.wikipedia.org/wiki/Timeline_of_category_theory_and_related_mathematics http://mevius.5ch.net/test/read.cgi/tech/1639713446/218
219: デフォルトの名無しさん [sage] 2023/06/20(火) 00:30:03.89 ID: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が展開されてる回数を確かめる方法はありますか? よろしくお願い致します http://mevius.5ch.net/test/read.cgi/tech/1639713446/219
220: デフォルトの名無しさん [sage] 2023/06/25(日) 14:24:09.04 ID: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 ) http://mevius.5ch.net/test/read.cgi/tech/1639713446/220
221: デフォルトの名無しさん [sage] 2023/06/25(日) 14:24:14.71 ID: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です よろしくお願い致します http://mevius.5ch.net/test/read.cgi/tech/1639713446/221
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 437 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s