関数型プログラミング言語Haskell Part34 (675レス)
上下前次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じゃなくて人力でモナドが発明された経緯を適当に調べた(ソース付き)。
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
数学の集合は普通順番を付けて書くと思うのですが(添字でアクセスできたほうが便利)
なぜ多くの言語では集合に順番がないのでしょうか?
233: デフォルトの名無しさん [] 2023/09/16(土) 21:25:49.38 ID:6682wM15(2/3) AAS
等価判定演算子では順番を問わないが、
記法としては順番によるインデックスアクセスもできる、が便利だと思うのですが
一番基礎的な集合の一つである自然数が順番を重視して扱うように大半の集合は順序を整頓して書かないと実用上不便ではないでしょうか?
234: デフォルトの名無しさん [sage] 2023/09/16(土) 23:06:28.20 ID:XG1/1lYn(1) AAS
順番がないやつと順番があるやつは
なぜ対等な関係ではなく前者が一般的で後者が特殊だと言われるのか?
逆に、複素数はなんで虚部があるやつが一般的で虚部がないやつが特殊なのか?
235: デフォルトの名無しさん [] 2023/09/16(土) 23:13:33.62 ID:6682wM15(3/3) AAS
数学的概念として等価だったりどちらが特殊とか言えないのは納得しています
ただ、集合は順序を維持して記述するようにしたほうが明らかに認知的負荷が少なく、数学的記法でも多くの場合でそうなっていると思うのですが、
多くの言語で組み込み型の集合がそうなっていないのはどのような思想によるものでしょうか?という質問です
236: デフォルトの名無しさん [sage] 2023/09/17(日) 02:24:17.53 ID:yNwKlKA6(1) AAS
データ型としての起源としては
素集合データ構造から始まっているようなので
素である(disjoint)ことがまず要求されて
他に集合という名前が使われていないことから
素で非順序的なデータ型のことを集合型と呼ぶことになった模様
237: デフォルトの名無しさん [sage] 2023/09/17(日) 02:39:39.55 ID:XqeO/FaW(1) AAS
組み込み型とユーザー定義型の区別をなくす思想はある
最も正しいことを実現する思想ではなくミスをした場合の罪が軽くなる
238: デフォルトの名無しさん [sage] 2023/09/17(日) 23:47:13.96 ID:70jB6wMR(1) AAS
初心者は++を使うけどなれたら<>を使ってる人が多い気がする
SemiGroupであれさえすれば使える<>を使った方が汎用的にかけるからかな
239: デフォルトの名無しさん [sage] 2023/09/18(月) 10:00:00.93 ID:E5yF50jH(1) AAS
俗説が廃れるのは「時代が変われば正しさが変わるから」ではありません
俗説が正解だった時代などない
240: デフォルトの名無しさん [sage] 2023/09/19(火) 19:53:05.75 ID:QCYT99dv(1/3) AAS
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で作ろうとしてるのですがバグがあるのでしょうか?
241: デフォルトの名無しさん [sage] 2023/09/19(火) 19:54:00.31 ID:QCYT99dv(2/3) AAS
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で作ろうとしてるのですがバグがあるのでしょうか?
242: デフォルトの名無しさん [sage] 2023/09/19(火) 19:58:16.28 ID:QCYT99dv(3/3) AAS
すみません、書き込むボタンの反応がなかったので連投になってしまいました
243: デフォルトの名無しさん [sage] 2023/09/19(火) 20:14:24.31 ID:a563RtWW(1/3) AAS
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
244: デフォルトの名無しさん [sage] 2023/09/19(火) 20:14:45.64 ID:a563RtWW(2/3) AAS
touchの本来の意味を考えれば、まあできなくてもそういうもんだなと思ふ
245: デフォルトの名無しさん [sage] 2023/09/19(火) 20:18:27.88 ID:a563RtWW(3/3) AAS
ありゃ俺も連投しちまったすまん
なんか5ch重いっぽいね
246(1): デフォルトの名無しさん [sage] 2023/09/20(水) 08:38:40.03 ID:I55f6i4N(1/2) AAS
for i in * ; do touch anotherdir/$i ; done
247: デフォルトの名無しさん [] 2023/09/20(水) 08:53:25.46 ID:I55f6i4N(2/2) AAS
>>246(bash)でお茶を濁した
perlが明日消えてなくなるらしいのでHaskellをPerlの代わりに使おうと思う
正規表現とグロブ、ファイル入出力はできた
他に何かあるかな
248(1): デフォルトの名無しさん [sage] 2023/09/22(金) 12:15:07.45 ID:NjV4q9P3(1/2) AAS
数値のリスト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
249: デフォルトの名無しさん [sage] 2023/09/22(金) 13:06:36.18 ID:8SLDLfd5(1) AAS
https://jutememo.blogspot.com/2008/06/haskell-join-listdata-intersperse.html
250: デフォルトの名無しさん [sage] 2023/09/22(金) 14:01:02.50 ID:NjV4q9P3(2/2) AAS
putStrLn $ intercalate " " $ map show l
これでいけました
251: デフォルトの名無しさん [sage] 2023/09/22(金) 14:01:12.58 ID:W8j4O+ex(1) AAS
泥臭いだけで罪があるかのように日常的に刷りこまれてるから
本当の有罪確定したやつは絶対許してもらえないよな
そりゃそうだよな
252: デフォルトの名無しさん [sage] 2023/09/27(水) 15:30:51.70 ID:9Ywamwi5(1) AAS
{-# LANGUAGE BinaryLiterals #-}
この拡張をいれても
let t = read "0x111" :: Int -- 16進数にパースできる 273
let s = read "0b111" :: Int -- 2進数にはパースできない
微妙に不便だ
253: デフォルトの名無しさん [sage] 2023/09/27(水) 17:59:16.99 ID:k7PwLxD8(1) AAS
readが定義されたモジュールは別のLANGUAGEってこと?
254(1): デフォルトの名無しさん [sage] 2023/10/11(水) 15:16:15.28 ID:1pnnvG+R(1/2) AAS
groupBy (\a b -> snd a == snd b)
これを括弧を使わずにかけますか
groupBy ((==)<$>snd<*>snd)だと(a,b)->Boolとなって(a,b)->(c,d)->Boolとは型があいませんでした
255: デフォルトの名無しさん [sage] 2023/10/11(水) 17:39:54.48 ID:Fikp0OWy(1) AAS
>>254
import Data.Function
groupBy ((==) `on` snd)
結局かっこは使うのだけど、これがあなたの求めるものでしょうか
256: デフォルトの名無しさん [sage] 2023/10/11(水) 22:05:36.63 ID:1pnnvG+R(2/2) AAS
括弧を使わずにじゃなくてラムダを使わずにでした
まさに欲しかったのそれです
ありがとうございました!!
257: デフォルトの名無しさん [sage] 2023/10/18(水) 05:38:40.90 ID:vCrdR6l9(1) AAS
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
258(1): デフォルトの名無しさん [sage] 2023/11/16(木) 18:41:54.01 ID:wXoixzgD(1) AAS
岡部健、復活したよ!
エックス内を
“Ken140291“
で探してみて下さい。
最近登録したばかりの様です。
259: デフォルトの名無しさん [sage] 2023/11/18(土) 16:03:54.22 ID:sLhTkQlu(1) AAS
自分で書き込んでいるのでは・・・。
260(1): デフォルトの名無しさん [sage] 2023/11/19(日) 15:31:44.23 ID:/inwpH7b(1) AAS
>>248
init $ folfl (\a x -> a++[show x]++“ “) ““ [3,10,1] でOK
261: デフォルトの名無しさん [sage] 2023/11/20(月) 09:46:08.35 ID:sZ0M6Dsh(1) AAS
>260 打ち間違えた!
lnlt$foldl(\a x->a ++show x++" ")[][1,10,3]
が正解。
262: デフォルトの名無しさん [sage] 2023/11/20(月) 14:32:44.66 ID:4MiKC4cJ(1) AAS
>>258
ぎゃははははははは
263: デフォルトの名無しさん [sage] 2023/11/20(月) 21:45:30.49 ID:Jf1v4QK8(1) AAS
https://github.com/ken-okabe/functional-programming-from-scratch-ja#before
> Unkown(気づいてない)
ウンコウンわろた。
264: デフォルトの名無しさん [sage] 2023/11/20(月) 23:57:47.37 ID:N43MAaAU(1) AAS
スレチ
265: デフォルトの名無しさん [sage] 2023/11/21(火) 12:01:48.14 ID:MS7pneIs(1) AAS
毛の壁くん復活してたのか!!
266: デフォルトの名無しさん [sage] 2023/11/21(火) 12:21:46.16 ID:W0g+S6dW(1) AAS
https://archive.md/m7008
毛の壁(岡部健)についてはここが詳しい
267(1): デフォルトの名無しさん [sage] 2023/11/22(水) 15:27:17.26 ID:1OepVPCl(1) AAS
こんなコードがあるのですが
cumsum k = unfoldr next . (,) 0
where
next :: (Int, [Int]) -> Maybe (Int, (Int, [Int]))
next (acc, x : xs) | acc <= k - x, acc' <- acc + x = Just (acc', (acc', xs))
next _ = Nothing
acc <= k-xはわかるのですが、acc' <- acc + xというのはどういう文法なのですか?
リスト内包表記でもないですし条件式の部分でモナドを扱ってるわけではないですよね?
268: デフォルトの名無しさん [sage] 2023/11/22(水) 16:31:30.12 ID:PuIW3qrN(1) AAS
>>267
パターンガードかな
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%BC%E3%83%89_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
269: デフォルトの名無しさん [sage] 2023/11/23(木) 07:24:43.49 ID:WRBO39fy(1) AAS
<-はパターンガード修飾子と呼ぶのですね
初めて知りました
ありがとうございました
270(1): デフォルトの名無しさん [sage] 2023/11/24(金) 17:42:26.91 ID:V3Fz2AWZ(1) AAS
毛の壁のTwitterの新しいアカウントは
Ken140291
FPFSstutorial
leadmove3648637
です!!
271: デフォルトの名無しさん [] 2023/12/04(月) 12:27:24.28 ID:GjmDAseS(1) AAS
>>270
ぎゃっはっはっはっはw
272: デフォルトの名無しさん [sage] 2024/01/01(月) 20:17:21.69 ID:DcfOChZv(1) AAS
mapAccumL/Rの使いどころがよくわからないのですが
どういう時に使うとかの指針ってありますか?
273: デフォルトの名無しさん [] 2024/01/09(火) 22:50:44.14 ID:3mg8b04T(1) AAS
ここ5年で発売されたHaskellの書籍で最も優れたものを紹介してください
274: デフォルトの名無しさん [] 2024/01/12(金) 10:55:28.35 ID:cAhPSGjh(1) AAS
オワコン
275: デフォルトの名無しさん [sage] 2024/02/29(木) 01:38:01.78 ID:d2gqoSk4(1) AAS
windowsにインストールできんみたいだなcabalがエラー?
まあwindowsでやるなってことだな
276: デフォルトの名無しさん [] 2024/03/03(日) 23:47:35.89 ID:9XAeTkis(1) AAS
モナドについて、床下配線に例えられたり、世界を受け取って副作用後の世界を返すと(IOモナドについて)語られたりするのが当時は分からなくて、考えた結果
何かから値を取り出し、関数適用して(その関数が)何かに値を戻す「動き」をモナドという。
って結論になっていたのだが、IOモナドも含めてもっと良い例えはないかと考えた結果、
モナドとは、アウトソーシング(外部依頼)を数学的に表現したもの。
という結論に至った。
アウトソーシング先が(数学の)外の世界だとIOモナドで、同じ数学の世界だとその他のモナド。
それならHaskell自身は「この関数実行しておいて~」って依頼出して結果を受け取るだけだから、
副作用はないと言う主張に矛盾はない(のか?)
(もしくは、IOモナドはHaskellが受け取れる形の値を返すような入出力の「マシン語」を返してる?)
そう考えると、数学が「数学の外とのやり取り」という概念を獲得したと思うと凄い。
277: デフォルトの名無しさん [sage] 2024/03/04(月) 00:46:59.53 ID:XMYw3zR0(1/2) AAS
箱の中に処理したいデータが入ってるけど一緒にIOウイルスも入ってて
普通に箱を開けるとIOウイルスが外界に漏れて困るから
もう一回り大きい箱を用意してその中に箱とデータ処理装置を入れて
密封した上で内側の箱を開けてデータを処理する
そうすると箱の中に処理されたデータとIOウイルスが入った状態になる
これを延々と繰り返すのがIOモナド
ずっと前に毒ガスで考えた比喩だけど最近だとこっちだな
278: デフォルトの名無しさん [] 2024/03/04(月) 01:02:22.82 ID:vyClhVzf(1) AAS
ふーむ。
仮にアセンブラと1対1に対応したCの関数を全部Haskellから呼べるようにすると、出来ちゃうわけで。
(do形式だとまるっきりアセンブラコードに見えるHaskellコードの出来上がり)
そう考えて私のアウトソーシング説が出来た感じですね。
Haskellがモナドを採用したのは数学(関数型言語だったっけ?)の敗北ってどっかで読みましたし。
279: デフォルトの名無しさん [sage] 2024/03/04(月) 01:22:40.61 ID:XMYw3zR0(2/2) AAS
doの場合は1行ごとに新しい箱が作られてる
順序はたまに前後するけど内側の箱のデータは外側の箱でしか使えないから
必要な順序は保証される
外界の予測不能な状態を全部1つの箱の中に押し込んで
箱の外側の処理装置製造工場は全部予測可能(純粋)にしてる感じ
数学の敗北の意味はよく分からないけど
実用性のために予測不能な状態を持ち込んだことかな
280: デフォルトの名無しさん [sage] 2024/03/06(水) 10:29:39.18 ID:Yy7OLBEk(1) AAS
なんか大げさな例えを使いたがるやつが増えたなぁ
コーディングの上でなんの役に立つんだが
281: デフォルトの名無しさん [sage] 2024/03/06(水) 15:29:14.97 ID:soRPwZI7(1) AAS
「末尾呼び出ししたい関数をデータコンストラクタで置き換える」という仮説は役に立つけれども
(>>=)はコンストラクタではないという事実を見ただけで仮説を捨ててしまうことは科学的によくあること
282: デフォルトの名無しさん [] 2024/04/10(水) 04:46:37.45 ID:+L19CyUd(1) AAS
WindowsでghcupをインストールするのにWSLが不要になって
PowerShellだけで導入できるようになってる
283: デフォルトの名無しさん [sage] 2024/04/13(土) 09:43:59.70 ID:p3ysjEUv(1/2) AAS
rustスレで知ったけどhaskellを正格にして依存型を入れたidris(idris2)つー言語があるんだな
284: デフォルトの名無しさん [sage] 2024/04/13(土) 10:37:58.47 ID:VEwLcqlL(1) AAS
idrisまで興味があるのならHaskell/Elm/Rust/Zigの流れで開発されているRoc-langも見ておくと良い
特にstatic reference counting周り
285: デフォルトの名無しさん [sage] 2024/04/13(土) 22:46:49.50 ID:p3ysjEUv(2/2) AAS
色々知らないのがあった、ありがとう
static reference countingつーのが流行りなの
最近のhaskellもrustみたいな1回しかつかえない線形型(linera haskell?)が導入されてるね
286: デフォルトの名無しさん [] 2024/04/14(日) 08:32:57.22 ID:ZXz6cRZI(1) AAS
IOモナドの入力関数も、引数のない関数=変数と捉えると、実質線形型と同じ。
let x = 0 in return (x + 1) >>= x -> print x
こうすると変数xはシャドーイングによって同名の別の変数が生成される。
getLineとかの入力関数はHaskell(数学)の外で初期化される変数とも考えられる。
287: デフォルトの名無しさん [sage] 2024/05/17(金) 10:56:06.61 ID:kEVlBeR0(1) AAS
参照カウントは0になれば即座にデストラクタを呼び出す
つまり呼び出しを遅延しない
正格にすることと参照カウントを入れることは実質的に同じこと
288: デフォルトの名無しさん [sage] 2024/05/18(土) 22:55:12.58 ID:HEnIptqp(1) AAS
cabalのバージョン上がってたので
windowsで試したらちゃんと動いたわ
気にかけてくれてたんやな
289: デフォルトの名無しさん [sage] 2024/06/11(火) 20:46:47.08 ID:zqrBHeqN(1) AAS
IOモナドを拡張して、副作用をDBだけに限定したモナドとか作れないの?
290: デフォルトの名無しさん [] 2024/06/20(木) 02:22:58.45 ID:s4SRXQdp(1) AAS
いつの間にかHaskellがC#より速くなってた…。
https://nshinchan01.hateblo.jp/entry/2024/06/20/021327
291: デフォルトの名無しさん [] 2024/06/23(日) 11:34:59.09 ID:1+Xj+JzS(1/2) AAS
すみません
GHCのWindows11対応についての質問ですが
「9.2」以前のGHCはWindows11をサポートしていないとの事ですが
https://gitlab.haskell.org/ghc/ghc/-/wikis/platforms/windows
これはプログラムコンパイルをして
アプリケーションを生成できないだけで
コンソール内での実行や学習をする分には
「9.2」以前のGHCでも問題ないとの認識で大丈夫でしょうか。
ライブラリが9.0に対応していない物があり確認したいです。
292: デフォルトの名無しさん [sage] 2024/06/23(日) 21:13:21.29 ID:1+Xj+JzS(2/2) AAS
度々すみません。
GHCのWindows11対応についての質問の件
Windows11機にGHC8.xをインストールして試した所
問題なくコンソールから実行して
結果のデータファイル生成できました。
取り敢えずはこれでやってみます。
293: デフォルトの名無しさん [sage] 2024/07/03(水) 21:32:31.40 ID:FVo2vRsM(1) AAS
Functorってf : value -> valueの関数をfmap f : computation -> computationの関数に拡張してあれこれするけど、
そもそもvalue -> value関数がいらなくない?
わざわざvalue とcomputationを区別するから難しくなるのであって、
全部Functor適用した体で computation -> computationの拡張関数だけ使うように
設計しなおせばもっと普及するんじゃない?
294: デフォルトの名無しさん [sage] 2024/07/03(水) 23:29:27.98 ID:XPii5wC3(1) AAS
何を言っとるんじゃw
295(1): デフォルトの名無しさん [sage] 2024/07/04(木) 00:05:21.90 ID:CIK9cQRa(1/2) AAS
computationにしたら理論的にカプセル化されるから、例えばT computationで専用に作った関数はU computationでは使いまわしできない。
だから一般的にvalue -> valueで作ることでT computationでもU computationでも使いまわしできるようにしてるというのはわかる。
でも、そういうところが使いにくくて普及してないんじゃないかと思うから、T computationで専用で作った関数も特に何もせず
U computationの関数として使えるようになったらもっと使いやすくなると思う。
というかHaskellにはcomputationの概念は百害あって一利なしなんじゃまいか。
296: デフォルトの名無しさん [sage] 2024/07/04(木) 14:17:13.04 ID:PVQ//B0J(1) AAS
>>295
君の言うcomputationってどういう定義?
297(1): デフォルトの名無しさん [sage] 2024/07/04(木) 19:36:46.28 ID:CIK9cQRa(2/2) AAS
しらんがな。
一応マジレスすると、valueと似ているけどなんか違いがあるもの、ぐらいだろう。
自分の意図としては、”計算機”上で生成されたデータ。
計算機というのは電子計算機に限定されない。
電卓でもいいし、そろばんでもいいし、計算するときのもととなる
数の表現とかをcomputationと呼んでも差し支えないと思ってる。
たとえば、
value:27
に対して電子計算機上だと
11011(2)
で表現されるものがcomputation。
そろばんだったらそろばんの玉の配置。
計算してパチパチ音が出るのが副作用。
逆に言うとvalueの方がわかり難いと思う。計算している計算機の外の世界の
何か数的データみたいな感じがしてわざわざそんな区別いるか?と思う。
298(1): デフォルトの名無しさん [sage] 2024/07/04(木) 23:38:08.08 ID:iUDrYol2(1) AAS
>>297
computationはvalueの一つ
`5 + 3`がcomputation
`Just 8`もcomputation
299(1): デフォルトの名無しさん [sage] 2024/07/05(金) 00:05:27.16 ID:b38yqPqv(1/2) AAS
>>298
computationがvalueの一つだったら
概念的に computation ⊆ value
になるけど。
少なくとも拡張しているのだから
computation ⊇ value
にならないとおかしくない?
`5 + 3`がcomputationというのは前提にもよるからなんとも言えないと思う。
計算して8(=5+3)を導いたなら8はcomputationだと思うが。
たとえば、掛け算だったとして、九九を唱えてゴサンジュウゴで15を導き出したんなら計算してないからvalueだと思う。
300(1): デフォルトの名無しさん [sage] 2024/07/05(金) 00:53:37.68 ID:DkqpNxkH(1) AAS
>>299
おかしくないよ
OOPでクラスAを継承してクラスBを作った場合(B extends A)を考えてみたら?
`九九を唱えてゴサンジュウゴの結果を導き出す`のがcomputation
導き出された結果と導き出す計算を区別して
上下前次1-新書関写板覧索設栞歴
あと 375 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s