関数型プログラミング言語Haskell Part34 (692レス)
上下前次1-新
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じゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
外部リンク:qiita.com
この記事正しいの?こんな話聞いたこともないし。圏論でモジュール性なんて扱えるの?
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
これにもそんなストーリー書いてない
外部リンク[pdf]:pdfs.semanticscholar.org
218: デフォルトの名無しさん [sage] 2023/06/09(金) 14:58:05.85 ID:GYy2ex4t(1) AAS
lispやらカリー=ハワード同型やらの関連性は
数学的な意味では遥か前だし実装上の話かな
外部リンク:en.m.wikipedia.org
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
ありがとうございます
現在まだ調べてる最中なんですけど
外部リンク:stackoverflow.com
によるとどうも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を使うとどうやらこうやら書いてあるんですけどなんのことやら
上下前次1-新書関写板覧索設栞歴
あと 467 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.030s