関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part32
https://mevius.5ch.net/test/read.cgi/tech/1548720347/
関数型プログラミング言語Haskell Part33
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/10(月) 18:17:36.49ID:L6eYQqyh426デフォルトの名無しさん
2020/08/23(日) 11:59:38.54ID:PT3WAMjf >>403
これ、左結合が出来ないからじゃない
考え方としては左結合はありなんだろうけど、
実質無いということ
f.g.h x で左結合やろうとしても、
関数適用と合成の優先順位で関数適用の方が優先される
結果として右結合にしかならない。
これ、左結合が出来ないからじゃない
考え方としては左結合はありなんだろうけど、
実質無いということ
f.g.h x で左結合やろうとしても、
関数適用と合成の優先順位で関数適用の方が優先される
結果として右結合にしかならない。
427デフォルトの名無しさん
2020/08/23(日) 12:29:03.24ID:hbFjgy0U 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip
428デフォルトの名無しさん
2020/08/23(日) 13:32:54.91ID:41ZiKAKU >>426
「関数合成は、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
だったら、違和感がないんですが、
「関数合成は右結合なので、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
には違和感を感じます。
一度にたくさんの関数を合成できる理由が関数合成が右結合だからというのはやはりおかしいと思います。
「関数合成は、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
だったら、違和感がないんですが、
「関数合成は右結合なので、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
には違和感を感じます。
一度にたくさんの関数を合成できる理由が関数合成が右結合だからというのはやはりおかしいと思います。
429デフォルトの名無しさん
2020/08/23(日) 13:36:29.73ID:41ZiKAKU Function composition is right-associative, so we can compose many functions at a time.
The expression f (g (z x)) is equivalent to (f . g . z) x.
これが原文です。翻訳がおかしいわけではないようですね。
The expression f (g (z x)) is equivalent to (f . g . z) x.
これが原文です。翻訳がおかしいわけではないようですね。
430デフォルトの名無しさん
2020/08/23(日) 13:53:55.24ID:PT3WAMjf 関数適用を合成より優先順位上げる条件のもと
合成を左結合でλ式に落とし込こんでみればいいんじゃない
出来るのなら俺の間違い 出来ないのなら
左結合では合成が出来ないのだから、文章も間違ってない
と思っただけ
合成を左結合でλ式に落とし込こんでみればいいんじゃない
出来るのなら俺の間違い 出来ないのなら
左結合では合成が出来ないのだから、文章も間違ってない
と思っただけ
431デフォルトの名無しさん
2020/08/23(日) 16:12:09.03ID:ZATaa76b432デフォルトの名無しさん
2020/08/23(日) 16:16:46.30ID:41ZiKAKU433デフォルトの名無しさん
2020/08/23(日) 23:06:04.74ID:ts+Zp8he ごめん、関係ないと書いておくべきだった。
今後は、自分の投稿は全て無視して欲しい。
誰かの質問に答えているつもりはなくて、
プログラミングのネタを拾っているだけ。
ついでなので、前回のペーストビンにアップしたネタについて書く。
まず、タプル、状態、継続以外の随伴はちゃんとしていない。
アウェイの圏をちゃんと書こうとすると泣きが入る。Haskellは集合の圏では
超強力だが、それ以外の圏に対しては並になる。中は見てないが、
[species](https://hackage.haskell.org/package/species)では、
圏をほぼフルスクラッチで作っているんじゃないかと思う。
で、コードにする段階でウソをついているのだが、素直にウソをつけば、
上手く行くことがあるということがあそこで得た教訓。
あそこに書いたモナドでパラメーター対象を2つ持つモナドは全て`R p (L p a)`
という形をしているが、コードでは型宣言を省略しているので、結局、
非対角成分を含めた`R p (L q a)`という形の関手についてのKleisli合成が
得られている。それがレンズが出てきた理由の一つ。
書いたときは知らなかったのだが、非対角成分を含めた関手を
[インデックスモナド](https://stackoverflow.com/questions/28690448/what-is-indexed-monad)
というらしい。パラメーター対象をもつ随伴からKleisli合成を計算すれば、
自然とインデックスモナドになってしまう。ただし、圏論プロパーに
インデックスモナドと言っても通じないと思う。Haskellでの専門用語だと思う。
今後は、自分の投稿は全て無視して欲しい。
誰かの質問に答えているつもりはなくて、
プログラミングのネタを拾っているだけ。
ついでなので、前回のペーストビンにアップしたネタについて書く。
まず、タプル、状態、継続以外の随伴はちゃんとしていない。
アウェイの圏をちゃんと書こうとすると泣きが入る。Haskellは集合の圏では
超強力だが、それ以外の圏に対しては並になる。中は見てないが、
[species](https://hackage.haskell.org/package/species)では、
圏をほぼフルスクラッチで作っているんじゃないかと思う。
で、コードにする段階でウソをついているのだが、素直にウソをつけば、
上手く行くことがあるということがあそこで得た教訓。
あそこに書いたモナドでパラメーター対象を2つ持つモナドは全て`R p (L p a)`
という形をしているが、コードでは型宣言を省略しているので、結局、
非対角成分を含めた`R p (L q a)`という形の関手についてのKleisli合成が
得られている。それがレンズが出てきた理由の一つ。
書いたときは知らなかったのだが、非対角成分を含めた関手を
[インデックスモナド](https://stackoverflow.com/questions/28690448/what-is-indexed-monad)
というらしい。パラメーター対象をもつ随伴からKleisli合成を計算すれば、
自然とインデックスモナドになってしまう。ただし、圏論プロパーに
インデックスモナドと言っても通じないと思う。Haskellでの専門用語だと思う。
434デフォルトの名無しさん
2020/08/25(火) 10:01:02.60ID:d4SFWo3v Data.Mapについて質問です。
キーがOrd型でないといけないという制約があります。
これは、Mapの実装でキーのデータ構造がハッシュではなく、2分探索木のようなものだからでしょうか?
キーがOrd型でないといけないという制約があります。
これは、Mapの実装でキーのデータ構造がハッシュではなく、2分探索木のようなものだからでしょうか?
435デフォルトの名無しさん
2020/08/25(火) 18:47:32.02ID:NgJQjBWI >>434 ドキュメントにそれっぽいことが書いてあるけど
https://hackage.haskell.org/package/containers-0.6.3.1/docs/Data-Map-Strict.html
> The implementation of Map is based on size balanced binary trees (or trees of bounded balance) as described by:
> If you don't care about ordering, consider use Data.HashMap.Strict from the unordered-containers package instead.
https://hackage.haskell.org/package/containers-0.6.3.1/docs/Data-Map-Strict.html
> The implementation of Map is based on size balanced binary trees (or trees of bounded balance) as described by:
> If you don't care about ordering, consider use Data.HashMap.Strict from the unordered-containers package instead.
436デフォルトの名無しさん
2020/08/25(火) 20:49:35.22ID:d4SFWo3v >>435
ありがとうございました。
ありがとうございました。
437デフォルトの名無しさん
2020/08/27(木) 10:07:06.62ID:TufIdPw/ Jupyter NotebookでHaskell使うならこれ
環境構築の手間が省けるのでおすすめ
Chromebook、iPad、Windows 10 Sモードなどで使えるかは知らない
https://mybinder.org/v2/gh/gibiansky/IHaskell/master
IHaskell
https://github.com/gibiansky/IHaskell
> You can now try IHaskell directly in your browser at CoCalc or mybinder.org.
Alternatively, watch a talk and demo showing off IHaskell features.
環境構築の手間が省けるのでおすすめ
Chromebook、iPad、Windows 10 Sモードなどで使えるかは知らない
https://mybinder.org/v2/gh/gibiansky/IHaskell/master
IHaskell
https://github.com/gibiansky/IHaskell
> You can now try IHaskell directly in your browser at CoCalc or mybinder.org.
Alternatively, watch a talk and demo showing off IHaskell features.
438デフォルトの名無しさん
2020/08/27(木) 11:10:22.56ID:sFui1x5L やっぱ最近新しい言語勉強するときはjupyter note book重宝する
439デフォルトの名無しさん
2020/08/28(金) 11:44:03.31ID:8bIwySwM ついにメンテのされてないgladeが最新のghcじゃビルドできなくなった
シコシコGUI作るの面倒くさくて意気消沈
シコシコGUI作るの面倒くさくて意気消沈
440デフォルトの名無しさん
2020/08/28(金) 12:26:16.24ID:5nZNKLNm はすけらはjs嫌いだろうけど(偏見)elmかpurescriptなら使えるだろ
441デフォルトの名無しさん
2020/08/28(金) 12:57:36.50ID:lCzdfIoX デスクトップGUIアプリの大半はWebブラウザアプリで代替できる。
これを機に、一度こだわりを捨ててみるのも良いかも。
これを機に、一度こだわりを捨ててみるのも良いかも。
442デフォルトの名無しさん
2020/08/28(金) 13:05:48.93ID:LLs1s+XQ Webブラウザアプリの大半はデスクトップGUIアプリの方が使い易い。
443デフォルトの名無しさん
2020/08/28(金) 14:56:59.18ID:5nZNKLNm だよな。はすけらならpurescriptでelectronだよ。
444デフォルトの名無しさん
2020/08/28(金) 15:48:19.78ID:jEdLmLEr pureselectか
445デフォルトの名無しさん
2020/08/28(金) 16:04:05.32 書いて三日以内のコードをビルドしました
446デフォルトの名無しさん
2020/08/30(日) 11:24:16.79ID:uCpf8zkM 質問です
次のプログラムが走りません
Ratio Integer型の割算です
mainの最後の行を受け付けてくれません
import Data.Ratio
import Data.Complex
(///) (x:+y) (z:+w) = let
d = z^2 + w^2
in ((x*z-y*w)/d):+((x*w+y*z)/d)
x :: Ratio Integer
x = 1%1
y = 3%1
z = 2%1
w = 4%3
main = do
print $ (x:+y) /// (z:+w)
print $ x / (z^2+w^2)
print $ (x:+y) /// ((z:+w) + (x:+y))
次のプログラムが走りません
Ratio Integer型の割算です
mainの最後の行を受け付けてくれません
import Data.Ratio
import Data.Complex
(///) (x:+y) (z:+w) = let
d = z^2 + w^2
in ((x*z-y*w)/d):+((x*w+y*z)/d)
x :: Ratio Integer
x = 1%1
y = 3%1
z = 2%1
w = 4%3
main = do
print $ (x:+y) /// (z:+w)
print $ x / (z^2+w^2)
print $ (x:+y) /// ((z:+w) + (x:+y))
447デフォルトの名無しさん
2020/08/30(日) 11:24:49.92ID:uCpf8zkM エラーメッセージは以下です
何がダメかどなたかわかりませんか?
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow
Compiling your program...
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:23:25: error:
• No instance for (RealFloat (Ratio Integer))
arising from a use of ‘+’
• In the second argument of ‘(///)’, namely ‘((z :+ w) + (x :+ y))’
In the second argument of ‘($)’, namely
‘(x :+ y) /// ((z :+ w) + (x :+ y))’
In a stmt of a 'do' block:
print $ (x :+ y) /// ((z :+ w) + (x :+ y))
|
23 | print $ (x:+y) /// ((z:+w) + (x:+y))
| ^^^^^^^^^^^^^^^
何がダメかどなたかわかりませんか?
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow
Compiling your program...
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:23:25: error:
• No instance for (RealFloat (Ratio Integer))
arising from a use of ‘+’
• In the second argument of ‘(///)’, namely ‘((z :+ w) + (x :+ y))’
In the second argument of ‘($)’, namely
‘(x :+ y) /// ((z :+ w) + (x :+ y))’
In a stmt of a 'do' block:
print $ (x :+ y) /// ((z :+ w) + (x :+ y))
|
23 | print $ (x:+y) /// ((z:+w) + (x:+y))
| ^^^^^^^^^^^^^^^
448デフォルトの名無しさん
2020/08/30(日) 11:27:13.14ID:uCpf8zkM あ、11行目は
in ((x*z-y*w)/d):+((-x*w+y*z)/d)
でした
でも同じエラーメッセージ出てきます
何故でしょう?
in ((x*z-y*w)/d):+((-x*w+y*z)/d)
でした
でも同じエラーメッセージ出てきます
何故でしょう?
449デフォルトの名無しさん
2020/08/30(日) 14:19:38.49ID:ubwYKL6u >>446
自己レスです
もしかしてこの型制限ですかね?
RealFloat a => Num (Complex a)
Complex a型がNumクラスに入れるのはaがRealFloat型の時しかダメだからでしょうか?
この制限はなんでこんなにキツイんだろ
足したり引いたりしたいだけなのに
自己レスです
もしかしてこの型制限ですかね?
RealFloat a => Num (Complex a)
Complex a型がNumクラスに入れるのはaがRealFloat型の時しかダメだからでしょうか?
この制限はなんでこんなにキツイんだろ
足したり引いたりしたいだけなのに
450デフォルトの名無しさん
2020/08/30(日) 15:28:05.73ID:0W5gc2Gs >>449
自作のComplexクラスをNum型クラスのインスタンスにしてみようとすると気づくんだけど
Numってなぜかabs関数を実装しないといけないんだよね
それで複素数の妥当な絶対値関数を書くにはsqrtが必要だけど
Numだと計算できないので…という理屈のはず
Haskellの標準の数値型に対する不満はちょくちょく見かけるけど
歴史的経緯もあって現状はしょうがないということになってるはず
自作のComplexクラスをNum型クラスのインスタンスにしてみようとすると気づくんだけど
Numってなぜかabs関数を実装しないといけないんだよね
それで複素数の妥当な絶対値関数を書くにはsqrtが必要だけど
Numだと計算できないので…という理屈のはず
Haskellの標準の数値型に対する不満はちょくちょく見かけるけど
歴史的経緯もあって現状はしょうがないということになってるはず
451デフォルトの名無しさん
2020/08/30(日) 15:32:06.86ID:mGp/4vHZ >>449
https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base-4.14.0.0/src/Data-Complex.html
でData.ComplexのソースコードでNumクラスのインスタンス定義を見たところ
メソッドabsとsignumの実装に
magnitude :: (RealFloat a) => Complex a -> a
を使ってるからみたいだね
本当に足したり引いたりしたいだけならNum制約は強すぎる
数のクラス体系の問題点について詳しくは
https://blog.miz-ar.info/2016/06/haskell-num-class/
https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base-4.14.0.0/src/Data-Complex.html
でData.ComplexのソースコードでNumクラスのインスタンス定義を見たところ
メソッドabsとsignumの実装に
magnitude :: (RealFloat a) => Complex a -> a
を使ってるからみたいだね
本当に足したり引いたりしたいだけならNum制約は強すぎる
数のクラス体系の問題点について詳しくは
https://blog.miz-ar.info/2016/06/haskell-num-class/
452デフォルトの名無しさん
2020/08/30(日) 17:39:55.49ID:z5he+9Sw453デフォルトの名無しさん
2020/08/31(月) 00:20:32.36ID:XlY0VH6O Complex RationalにNumのinstance宣言できないかと思って以下のようにしてみました
instance Num (Complex Rational) where
(x:+y) + (x':+y') = (x+x') :+ (y+y')
(x:+y) - (x':+y') = (x-x') :+ (y-y')
(x:+y) * (x':+y') = (x*x'-y*y') :+ (x*y'+y*x')
negate (x:+y) = negate x :+ negate y
abs z = undefined
signum z@(x:+y) = undefined
fromInteger n = fromInteger n :+ 0
結果以下のようにそれは無理と怒られます
何かてはないでしようか?
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow
Compiling your program...
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:7:10: error:
• Illegal instance declaration for ‘Num (Complex Rational)’
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use FlexibleInstances if you want to disable this.)
• In the instance declaration for ‘Num (Complex Rational)’
|
7 | instance Num (Complex Rational) where
| ^^^^^^^^^^^^^^^^^^^^^^
instance Num (Complex Rational) where
(x:+y) + (x':+y') = (x+x') :+ (y+y')
(x:+y) - (x':+y') = (x-x') :+ (y-y')
(x:+y) * (x':+y') = (x*x'-y*y') :+ (x*y'+y*x')
negate (x:+y) = negate x :+ negate y
abs z = undefined
signum z@(x:+y) = undefined
fromInteger n = fromInteger n :+ 0
結果以下のようにそれは無理と怒られます
何かてはないでしようか?
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow
Compiling your program...
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:7:10: error:
• Illegal instance declaration for ‘Num (Complex Rational)’
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use FlexibleInstances if you want to disable this.)
• In the instance declaration for ‘Num (Complex Rational)’
|
7 | instance Num (Complex Rational) where
| ^^^^^^^^^^^^^^^^^^^^^^
454デフォルトの名無しさん
2020/08/31(月) 11:01:46.76ID:rDcCtqL6 知らんけどコンパイラの言う通りFlexibleInstances使ったら?
455デフォルトの名無しさん
2020/08/31(月) 13:16:55.43ID:m1GQ7XMv 意味も分からずコンパイラの指示に従ってばかりいても、
初心者の域は抜けられない
でも、コンパイルできなきゃモチベーションが下がるから、
取りあえず従っとけ
初心者の域は抜けられない
でも、コンパイルできなきゃモチベーションが下がるから、
取りあえず従っとけ
456デフォルトの名無しさん
2020/08/31(月) 17:00:23.04 でた!おまじない!
457デフォルトの名無しさん
2020/08/31(月) 17:10:43.28ID:rDcCtqL6 標準のhaskellだと
instance 型クラス 型構築子
instance 型クラス (型構築子 型変数1)
instance 型クラス (型構築子 型変数1 型変数2)
…
って形式のインスタンス宣言にしか対応してないからな
instance 型クラス (型構築子 型構築子)
って書きたいなら言語拡張使えって言われる
言語拡張使うか、あるいは、もっと一般的なインスタンス宣言
instance Num a => Num (Rational a)
とかにしたら?
instance 型クラス 型構築子
instance 型クラス (型構築子 型変数1)
instance 型クラス (型構築子 型変数1 型変数2)
…
って形式のインスタンス宣言にしか対応してないからな
instance 型クラス (型構築子 型構築子)
って書きたいなら言語拡張使えって言われる
言語拡張使うか、あるいは、もっと一般的なインスタンス宣言
instance Num a => Num (Rational a)
とかにしたら?
458デフォルトの名無しさん
2020/08/31(月) 18:26:13.20ID:mkAi3PX1 皆さんご助言ありがとうございます
実は家のパソコン壊れててHaskellはオンラインHaskellコンパイラというので当座を凌いでるんですがコレコンパイラオプションもインラインプラグマ?とかいうのも使えないっぽくてFlexible Instanceとか使いたくても使えないんです
Num Rationalは標準で入ってます
入れられなくて困ってるのはNum (Complex Rational)なんです
Num a=>Num (Complex a)
は二重定義でダメだと怒られます
prog.hs:55:12: error:
Duplicate instance declarations:
instance Num a => Num (Complex a) -- Defined at prog.hs:55:12
instance RealFloat a => Num (Complex a)
-- Defined in ‘Data.Complex’
|
55 | instance Num a => Num (Complex a) where
| ^^^^^^^^^^^^^^^^^^^^^^^^
実は家のパソコン壊れててHaskellはオンラインHaskellコンパイラというので当座を凌いでるんですがコレコンパイラオプションもインラインプラグマ?とかいうのも使えないっぽくてFlexible Instanceとか使いたくても使えないんです
Num Rationalは標準で入ってます
入れられなくて困ってるのはNum (Complex Rational)なんです
Num a=>Num (Complex a)
は二重定義でダメだと怒られます
prog.hs:55:12: error:
Duplicate instance declarations:
instance Num a => Num (Complex a) -- Defined at prog.hs:55:12
instance RealFloat a => Num (Complex a)
-- Defined in ‘Data.Complex’
|
55 | instance Num a => Num (Complex a) where
| ^^^^^^^^^^^^^^^^^^^^^^^^
459デフォルトの名無しさん
2020/08/31(月) 18:28:35.47ID:mkAi3PX1 しょうがないのでとりあえずComplex Rationalを“カプセル化”してみました
複素座標0,3,4i,7/2+7/2iである4点が同一円周上にあるか確認するプログラムです
同じ事をComplex Floatとかでやると丸め誤差で誤判定してくれます
できるんですがちょっと不愉快ですね
複素座標0,3,4i,7/2+7/2iである4点が同一円周上にあるか確認するプログラムです
同じ事をComplex Floatとかでやると丸め誤差で誤判定してくれます
できるんですがちょっと不愉快ですね
460デフォルトの名無しさん
2020/08/31(月) 18:28:47.62ID:mkAi3PX1 import Data.Ratio
import Data.Complex
data ComplexRational = CR (Complex Rational) deriving (Show,Eq)
instance Num (ComplexRational) where
(CR (x:+y)) + (CR (x':+y')) = CR $ (x+x') :+ (y+y')
(CR (x:+y)) * (CR (x':+y'))
= CR $ (x*x'-y*y') :+ (x*y'+y*x')
negate (CR (x:+y)) = CR $ negate x :+ negate y
abs = undefined
signum = undefined
fromInteger n = CR $ fromInteger n :+ 0
instance Fractional (ComplexRational) where
recip (CR (x:+y))= CR $ (x/(x^2+y^2)):+(-y/(x^2+y^2))
toComplex (CR x) = x
i = CR $ 0:+1
onCircle a b c d = (==0) $ imagPart $ toComplex $ ((a-c)/(b-c))/((a-d)/(b-d))
a=0
b=3
c=4*i
d=7/2+7/2*i
main = do
print $(1/2+3/4*i)/(5/6+7/8*i)
print $ onCircle a b c d
-----
CR (618 % 841 :+ 108 % 841)
True
import Data.Complex
data ComplexRational = CR (Complex Rational) deriving (Show,Eq)
instance Num (ComplexRational) where
(CR (x:+y)) + (CR (x':+y')) = CR $ (x+x') :+ (y+y')
(CR (x:+y)) * (CR (x':+y'))
= CR $ (x*x'-y*y') :+ (x*y'+y*x')
negate (CR (x:+y)) = CR $ negate x :+ negate y
abs = undefined
signum = undefined
fromInteger n = CR $ fromInteger n :+ 0
instance Fractional (ComplexRational) where
recip (CR (x:+y))= CR $ (x/(x^2+y^2)):+(-y/(x^2+y^2))
toComplex (CR x) = x
i = CR $ 0:+1
onCircle a b c d = (==0) $ imagPart $ toComplex $ ((a-c)/(b-c))/((a-d)/(b-d))
a=0
b=3
c=4*i
d=7/2+7/2*i
main = do
print $(1/2+3/4*i)/(5/6+7/8*i)
print $ onCircle a b c d
-----
CR (618 % 841 :+ 108 % 841)
True
461デフォルトの名無しさん
2020/09/03(木) 16:35:31.39ID:VDk3Uebh すごいHaskell、7章を読んでいますが、正直、重要ではあるが面白くない内容なので読むペースが遅くなってしまっています。
最後まで読み切ろうと思います。
最後まで読み切ろうと思います。
462デフォルトの名無しさん
2020/09/03(木) 16:55:07.23ID:VDk3Uebh 図書館にリクエストした以下の本を買ってもらうことができて、明日、借りられることになりました。
楽しみです。
圏論入門 Haskellで計算する具体例から
雪田 修一 (著)
楽しみです。
圏論入門 Haskellで計算する具体例から
雪田 修一 (著)
463デフォルトの名無しさん
2020/09/04(金) 20:26:41.82ID:zDdu0cA6 雪田著『圏論入門』を借りてきました。
圏論、難しい上につまらないです。
圏論、難しい上につまらないです。
464デフォルトの名無しさん
2020/09/04(金) 20:35:32.88ID:4VK1Z/Kj 何を期待して借りたのやら
465デフォルトの名無しさん
2020/09/04(金) 21:42:59.80ID:W/y0jTmz 圏論はモナドへの近道
466デフォルトの名無しさん
2020/09/05(土) 02:01:31.05ID:hzZ7uEzq467デフォルトの名無しさん
2020/09/05(土) 02:03:13.00ID:hzZ7uEzq import Data.Ratio
import Data.Complex
instance (Integral a)=> Floating (Ratio a) where
sqrt = fromRational.toRational.sqrt
.fromRational.toRational
instance (Integral a) => RealFloat (Ratio a) where
floatDigits = floatDigits.fromRational.toRational
decodeFloat = decodeFloat.fromRational.toRational
scaleFloat k x = if k > 0 then x*2^k else x/2^(-k)
import Data.Complex
instance (Integral a)=> Floating (Ratio a) where
sqrt = fromRational.toRational.sqrt
.fromRational.toRational
instance (Integral a) => RealFloat (Ratio a) where
floatDigits = floatDigits.fromRational.toRational
decodeFloat = decodeFloat.fromRational.toRational
scaleFloat k x = if k > 0 then x*2^k else x/2^(-k)
468デフォルトの名無しさん
2020/09/05(土) 02:03:23.39ID:hzZ7uEzq i = 0:+1%1
onCircle a b c d = id
$ (==0)
$ imagPart
$ ((a-c)/(b-c))/((a-d)/(b-d))
(a,b,c,d)=(0,3,4*i,7/2+7/2*i)
main = do
print $(1/2+3/4*i)/(5/6+7/8*i)
print $ onCircle a b c d
print $ ((a-c)/(b-c))/((a-d)/(b-d))
print $ abs $ 2+3*i
print $ abs $ 15+8*i
----
618 % 841 :+ 108 % 841
True
4 % 7 :+ 0 % 1
8118979690322419 % 2251799813685248 :+ 0 % 1
17 % 1 :+ 0 % 1
onCircle a b c d = id
$ (==0)
$ imagPart
$ ((a-c)/(b-c))/((a-d)/(b-d))
(a,b,c,d)=(0,3,4*i,7/2+7/2*i)
main = do
print $(1/2+3/4*i)/(5/6+7/8*i)
print $ onCircle a b c d
print $ ((a-c)/(b-c))/((a-d)/(b-d))
print $ abs $ 2+3*i
print $ abs $ 15+8*i
----
618 % 841 :+ 108 % 841
True
4 % 7 :+ 0 % 1
8118979690322419 % 2251799813685248 :+ 0 % 1
17 % 1 :+ 0 % 1
469デフォルトの名無しさん
2020/09/05(土) 13:15:04.05ID:T3msgi7J 純粋に興味のみからすごいHaskellを読んでいるのですが、みなさんはなぜHaskellを使っているのですか?
470デフォルトの名無しさん
2020/09/05(土) 13:35:41.51ID:EwmIpy36 宣言的に書けた時の気持ち良さがたまらんから
471デフォルトの名無しさん
2020/09/05(土) 14:03:13.58ID:T3msgi7J >>470
やはり実用よりは趣味ということですね。
やはり実用よりは趣味ということですね。
472デフォルトの名無しさん
2020/09/05(土) 14:05:39.74ID:14+GNjHV Haskellで書かれた実用的なアプリ無いからな。
473デフォルトの名無しさん
2020/09/05(土) 17:37:30.47ID:acNOQ2m1 『Haskellによる関数プログラミングの思考法』って出たの3年前なのに書籍版はもう絶版なんだな
旧版を元にした『関数プログラミング入門』の方はまだ売ってるけど
旧版を元にした『関数プログラミング入門』の方はまだ売ってるけど
474デフォルトの名無しさん
2020/09/05(土) 18:22:32.54ID:r4XBIbpb 3年で消えてもらった方が新しい商品が売れるという実用的思考
永久保存など消費者の趣味だ
永久保存など消費者の趣味だ
475デフォルトの名無しさん
2020/09/05(土) 18:33:16.32ID:mscSzbua >>472
pandoc は?
pandoc は?
476デフォルトの名無しさん
2020/09/06(日) 01:05:18.13ID:lOdtO6cj477デフォルトの名無しさん
2020/09/06(日) 01:51:45.47ID:Z433FiXx HaskellっていうかParsecが優秀なんだろな
478デフォルトの名無しさん
2020/09/06(日) 22:23:29.89ID:YBPAq9+r >>469
パーサーを書く必要があって使い始めた
パーサーを書く必要があって使い始めた
479デフォルトの名無しさん
2020/09/07(月) 11:55:03.70ID:xmFuETjj 純粋に興味からです
480デフォルトの名無しさん
2020/09/07(月) 17:09:40.33ID:6+huFxV7 >>465
マクレーンの圏論とか読んでも果てしなく遠回りするだけだぞ。
マクレーンの圏論とか読んでも果てしなく遠回りするだけだぞ。
481デフォルトの名無しさん
2020/09/07(月) 17:57:43.88ID:kXMphwO9 >>480
ベーシック圏論はどうですか?
ベーシック圏論はどうですか?
482デフォルトの名無しさん
2020/09/07(月) 18:10:28.73ID:oaoIrH3d haskellのモナド理解するだけなら圏論いらないからね
ベーシック圏論は内容を限定して敷居の低い例を使っているので相対的には
読みやすいけど、基礎的な数学の知識がないと例が理解の助けにならないのは同じ
ベーシック圏論は内容を限定して敷居の低い例を使っているので相対的には
読みやすいけど、基礎的な数学の知識がないと例が理解の助けにならないのは同じ
483デフォルトの名無しさん
2020/09/07(月) 20:28:07.77ID:xmFuETjj 関手って圏が持つ「対象と射」同志の関連付けのことだよね?
なぜfmap関数を定義すると関手を実装したことになるの?
なぜfmap関数を定義すると関手を実装したことになるの?
484デフォルトの名無しさん
2020/09/07(月) 21:15:30.28ID:3sLeGs6G fmapという名前が変
関手は射と見なせる
関手は射と見なせる
485デフォルトの名無しさん
2020/09/09(水) 09:53:26.80ID:TuvEFz+K 勝俣「シャー!」
486デフォルトの名無しさん
2020/09/09(水) 10:39:29.87ID:o85d1us6 圏の圏な
487デフォルトの名無しさん
2020/09/09(水) 11:37:10.69ID:sfIbn56V 圏論いらずで、モナド理解するのにどうすりゃいいの?
488デフォルトの名無しさん
2020/09/09(水) 12:18:16.37ID:/Y+BdKRx do記法が使えるようになる
モナド=>モナド則を満たす=>do記法はモナド則の別バージョン
結局のところ、モナドはdo記法を作りたかった。よって、先頭の話になる。
モナド=>モナド則を満たす=>do記法はモナド則の別バージョン
結局のところ、モナドはdo記法を作りたかった。よって、先頭の話になる。
489デフォルトの名無しさん
2020/09/09(水) 12:43:31.80ID:/Y+BdKRx ちょっと嘘だな
488は既にあるモナドを使う場合の話で
自分でモナドを作ってみたいのなら
モナド則を満たしていることの確認が必要
ってことで、モナド則の勉強も必要
個人的にモナドが一番分かり易かったのは、↓かな
サルでもわかるIOモナド@-B
http://hot-heart-cool-mind.seesaa.net/article/393131366.html
488は既にあるモナドを使う場合の話で
自分でモナドを作ってみたいのなら
モナド則を満たしていることの確認が必要
ってことで、モナド則の勉強も必要
個人的にモナドが一番分かり易かったのは、↓かな
サルでもわかるIOモナド@-B
http://hot-heart-cool-mind.seesaa.net/article/393131366.html
490デフォルトの名無しさん
2020/09/09(水) 12:59:11.96ID:7PwBIIdR モナドというのが何なのか知らないのですが、モナドが何か分かっていないとモナドは使えないものなんですか?
491デフォルトの名無しさん
2020/09/09(水) 13:33:56.84ID:Ss6OMKhc Haskellで出てくる演算子の読み方一覧ってないですか?
492デフォルトの名無しさん
2020/09/09(水) 18:46:46.75ID:7PwBIIdR >>490
それともHaskellという言語は何でもかんでもある数学的に説明できるように設計されていて気持ちがいいというだけのことでしょうか?
それともHaskellという言語は何でもかんでもある数学的に説明できるように設計されていて気持ちがいいというだけのことでしょうか?
493デフォルトの名無しさん
2020/09/09(水) 18:50:44.11ID:N/YnHGom 低学歴の数学弱いなのに、頑張ってHaskellで開発の会社に潜り込んで仕事してる人も居るから。
494デフォルトの名無しさん
2020/09/09(水) 19:41:50.73ID:YuHH3QPI 高卒のワイでもプロのHaskellerになれるん?
その方法教えて欲しいわ。
その方法教えて欲しいわ。
495デフォルトの名無しさん
2020/09/09(水) 19:44:40.13ID:7PwBIIdR 仕事でHaskellを使っている会社があるのですか?
実用面でのHaskellの利点があるということですか?
実用面でのHaskellの利点があるということですか?
496デフォルトの名無しさん
2020/09/09(水) 19:58:00.07ID:7PwBIIdR 「Haskellの美しさを知っている人は、人生に絶望することはない。Haskellで世界を変えたい。」などと表紙に書かれているHaskellの本が
ありますが、そんな大げさなものでしょうか?
単なる一プログラミング言語ではないんですか?
ありますが、そんな大げさなものでしょうか?
単なる一プログラミング言語ではないんですか?
497デフォルトの名無しさん
2020/09/09(水) 20:15:19.85ID:+oYkcMI9 型システムが強力ってだけで実用上有利
現実、型がしょぼい言語よりバグ減るし、
型から関数探せるから既存プログラムの再利用性高いし、
ウェイがノリで作る「イケてる」オレオレライブラリなんかにも型の合うある程度まともな設計が求められるし
現実、型がしょぼい言語よりバグ減るし、
型から関数探せるから既存プログラムの再利用性高いし、
ウェイがノリで作る「イケてる」オレオレライブラリなんかにも型の合うある程度まともな設計が求められるし
498デフォルトの名無しさん
2020/09/09(水) 20:16:27.76ID:YuHH3QPI それは持てる者がほざく絵空事やでw
499デフォルトの名無しさん
2020/09/09(水) 20:56:40.04ID:/Y+BdKRx んじゃ、async/awaitがモナドで実装できるんやでー
詳細はしらんけどw
詳細はしらんけどw
500デフォルトの名無しさん
2020/09/09(水) 22:27:03.69ID:M9aZojkl IDEは何がおすすめ?
501デフォルトの名無しさん
2020/09/10(木) 02:20:35.45ID:6Lrmk0HC らっきょ
502デフォルトの名無しさん
2020/09/10(木) 08:33:57.45ID:OHVt/ux7 俺も聞きたいけどVScodeじゃ辛い?
503デフォルトの名無しさん
2020/09/10(木) 13:10:19.99ID:he9lsIhb >>496
理解した途端にこんなしょーもないことでドやってたのかと絶望するよ。
理解した途端にこんなしょーもないことでドやってたのかと絶望するよ。
504デフォルトの名無しさん
2020/09/12(土) 10:38:44.00ID:A2+hHxph [分数モナド](https://ncatlab.org/nlab/show/Grothendieck+group+of+a+commutative+monoid)
日常生活でも目にする`2 / 3`のような分数表記はモナドになっている。
吸収元の問題があるので、ネタとしては引き算`2 - 3`の方が扱いやすいが、
引き算の場合、`2 - 3 = - 1`のように計算してしまった結果が使われ、
日常生活では生々しいモナド表記はあまり使われない。その点、分数では、
直積からのコンストラクターをもろに使った漢な表現が
日常生活の中で使われている。
分数は、モナドを使うことと、モナドを理解することは別腹という
良い例になっている気がする。分数がモナドになっていることが生きてくるのは、
システムがそれなりに複雑になってからじゃないかと思う。抽象化には
コストがかかるので、そのコストに見合った見返りが必要になるが、
システムが簡単だと、抽象化のコストをペイできない。
分数モナドは有名な例なので、何処かのブログで紹介されていると思うが、
見たことがないので、書いてみた。ホームが可換モノイドの圏なので、
オレオレモナドになってしまうが、モナド則の`QuickCheck`はできるので、
圏論の練習になるかもしれない。
日常生活でも目にする`2 / 3`のような分数表記はモナドになっている。
吸収元の問題があるので、ネタとしては引き算`2 - 3`の方が扱いやすいが、
引き算の場合、`2 - 3 = - 1`のように計算してしまった結果が使われ、
日常生活では生々しいモナド表記はあまり使われない。その点、分数では、
直積からのコンストラクターをもろに使った漢な表現が
日常生活の中で使われている。
分数は、モナドを使うことと、モナドを理解することは別腹という
良い例になっている気がする。分数がモナドになっていることが生きてくるのは、
システムがそれなりに複雑になってからじゃないかと思う。抽象化には
コストがかかるので、そのコストに見合った見返りが必要になるが、
システムが簡単だと、抽象化のコストをペイできない。
分数モナドは有名な例なので、何処かのブログで紹介されていると思うが、
見たことがないので、書いてみた。ホームが可換モノイドの圏なので、
オレオレモナドになってしまうが、モナド則の`QuickCheck`はできるので、
圏論の練習になるかもしれない。
505デフォルトの名無しさん
2020/09/12(土) 20:26:45.44ID:TbuoUVLB は?何言ってんの
506デフォルトの名無しさん
2020/09/13(日) 08:12:50.88ID:Tso/1gLY ひ?何言ってんの
507デフォルトの名無しさん
2020/09/13(日) 14:14:05.81ID:7XfXIlf2 >>504
return と >>= は何になるんですか?
return と >>= は何になるんですか?
508デフォルトの名無しさん
2020/09/13(日) 15:14:54.14ID:Gippd8g0 しらないけど
return x = x / x
ぐらいしか定義できなさそう
return x = x / x
ぐらいしか定義できなさそう
509デフォルトの名無しさん
2020/09/13(日) 21:12:53.92ID:Tso/1gLY ふ?何言ってんの
可換モノイドの圏は集合の圏の
[部分圏](https://ncatlab.org/nlab/show/subcategory)だが、
集合の圏ではない。したがって、分数モナドは、
Haskellの`Monad`のインスタンスにならない。
例えば、次のような実装を考えると、
``` code
newtype Bunsu a = Bunsu {
runBunsu :: (a, a)
} deriving (Show, Functor)
instance (Eq a, Semigroup a) => Eq (Bunsu a) where ...
instance (Semigroup a) => Semigroup (Bunsu a) where ...
instance (Monoid a) => Monoid (Bunsu a) where ...
instance (Monoid a) => Group (Bunsu a) where ...
bunsu_pure :: (Monoid a) => a -> Bunsu a
bunsu_pure = ...
```
縛り`Monoid a`が邪魔をして、`Bunsu`は`Applicative`のインスタンスに
できない。それでも、通常の関数の形でなら`bunsu_pure`と`bunsu_join`は
書けるので、モナド則のチェックはできる。ただし、`Bunsu`は、
可換モノイドの圏でのモナド則は満たすが、集合の圏でのモナド則は満たさない。
質問への直接の答えは避けるが、可換モノイドの圏で考えないと
答えは得られない。
可換モノイドの圏は集合の圏の
[部分圏](https://ncatlab.org/nlab/show/subcategory)だが、
集合の圏ではない。したがって、分数モナドは、
Haskellの`Monad`のインスタンスにならない。
例えば、次のような実装を考えると、
``` code
newtype Bunsu a = Bunsu {
runBunsu :: (a, a)
} deriving (Show, Functor)
instance (Eq a, Semigroup a) => Eq (Bunsu a) where ...
instance (Semigroup a) => Semigroup (Bunsu a) where ...
instance (Monoid a) => Monoid (Bunsu a) where ...
instance (Monoid a) => Group (Bunsu a) where ...
bunsu_pure :: (Monoid a) => a -> Bunsu a
bunsu_pure = ...
```
縛り`Monoid a`が邪魔をして、`Bunsu`は`Applicative`のインスタンスに
できない。それでも、通常の関数の形でなら`bunsu_pure`と`bunsu_join`は
書けるので、モナド則のチェックはできる。ただし、`Bunsu`は、
可換モノイドの圏でのモナド則は満たすが、集合の圏でのモナド則は満たさない。
質問への直接の答えは避けるが、可換モノイドの圏で考えないと
答えは得られない。
510デフォルトの名無しさん
2020/09/13(日) 23:57:07.12ID:Tso/1gLY へ?何言ってんの
もしかすると、何言ってんのが前の投稿にかかっちゃったかもしれない。
何も考えずに、何言ってんのおじさんプレイを楽しんでいるだけなので、
気にしないでほしい。
ついでなので。
`return x = x / x`という選択は、集合の圏では、取りうる唯一の選択肢かも
しれない。自分も他に思いつかない。しかし、可換モノイドの圏では、
他にも選択肢がある。それも含めて、
[記事](https://ncatlab.org/nlab/show/Grothendieck+group+of+a+commutative+monoid)
に全て書いてある。他人事なので断言してしまうが、この記事より詳しい
分数モナドの解説は地球上には存在しない。しかし、悲しいかな、
Haskellの解説記事と同じで、
* わかる人にはわかるが、
* わからん人にはなるほどわからん
といういつものパターンになっていると思う。解説案件の宿命かもね。
もしかすると、何言ってんのが前の投稿にかかっちゃったかもしれない。
何も考えずに、何言ってんのおじさんプレイを楽しんでいるだけなので、
気にしないでほしい。
ついでなので。
`return x = x / x`という選択は、集合の圏では、取りうる唯一の選択肢かも
しれない。自分も他に思いつかない。しかし、可換モノイドの圏では、
他にも選択肢がある。それも含めて、
[記事](https://ncatlab.org/nlab/show/Grothendieck+group+of+a+commutative+monoid)
に全て書いてある。他人事なので断言してしまうが、この記事より詳しい
分数モナドの解説は地球上には存在しない。しかし、悲しいかな、
Haskellの解説記事と同じで、
* わかる人にはわかるが、
* わからん人にはなるほどわからん
といういつものパターンになっていると思う。解説案件の宿命かもね。
511デフォルトの名無しさん
2020/09/14(月) 02:32:09.85ID:TxRaIMAU >>=は何ですか?
512デフォルトの名無しさん
2020/09/14(月) 02:44:47.64ID:SnB9iMGf 圏論わからんからなんもわからん
513デフォルトの名無しさん
2020/09/14(月) 16:41:03.56ID:TxRaIMAU Monad という概念が数学の圏論の Monad から来るのはよく解説が見つかるんですが、Applicative (≒Monoidal) については数学からの意味付けが見つかりません
コレ数学的にはなんなんですか?
コレ数学的にはなんなんですか?
514デフォルトの名無しさん
2020/09/14(月) 23:29:35.74ID:XfiH3m4/ そのままじゃん アプリカティブファンクター
なんだから、そのまま日本語訳でよくね
つまり、関手 プログラマーにとって使いやすくしただけ
ところで、”Applicative (≒Monoidal)”なのか?
こっちの方がい意味不明なんだが
モノイドって意味なら、≒モナド の方
モナイド則=モノイド則 モナドの方は、自己関手って条件が付くだけ
しらんけど
なんだから、そのまま日本語訳でよくね
つまり、関手 プログラマーにとって使いやすくしただけ
ところで、”Applicative (≒Monoidal)”なのか?
こっちの方がい意味不明なんだが
モノイドって意味なら、≒モナド の方
モナイド則=モノイド則 モナドの方は、自己関手って条件が付くだけ
しらんけど
515デフォルトの名無しさん
2020/09/15(火) 00:17:11.21ID:wUKRYY2O >>514
まだ自分でハッキリ確かめたわけじゃないんですけど
Applicative と Monoidal は同型なんだそうです
https://qiita.com/Guvalif/items/7f893d9a078e03c9e425
まだこっちはどういう意味で“同型”になるのかわかってませんけど
数学的な意味でのMonadは英語のwikiに詳しく説明が載ってて↓
https://en.m.wikipedia.org/wiki/Monad_(category_theory)
このFormal DefinitionがまさにHaskellのモナド則に繋がっていくのは確かめました
問題はApplicativeは圏論のどの概念に該当するのかの説明がサッパリ見つからないんです
まだ自分でハッキリ確かめたわけじゃないんですけど
Applicative と Monoidal は同型なんだそうです
https://qiita.com/Guvalif/items/7f893d9a078e03c9e425
まだこっちはどういう意味で“同型”になるのかわかってませんけど
数学的な意味でのMonadは英語のwikiに詳しく説明が載ってて↓
https://en.m.wikipedia.org/wiki/Monad_(category_theory)
このFormal DefinitionがまさにHaskellのモナド則に繋がっていくのは確かめました
問題はApplicativeは圏論のどの概念に該当するのかの説明がサッパリ見つからないんです
516デフォルトの名無しさん
2020/09/15(火) 02:19:25.61ID:PObv6BQ8 (a -> b) -> (m a -> m b)
m (a -> b) -> (m a -> m b)
(a -> m b) -> (m a -> m b)
こいつらは中央の->と左右の->を区別してないから数学的な意味が見えない
returnとjoinは->が一つしかないから問題ないが
m (a -> b) -> (m a -> m b)
(a -> m b) -> (m a -> m b)
こいつらは中央の->と左右の->を区別してないから数学的な意味が見えない
returnとjoinは->が一つしかないから問題ないが
517デフォルトの名無しさん
2020/09/15(火) 10:15:51.98ID:TeSbfrM9 >>516
そう、Haskellの圏論がらみの話はその“冪対象”(exponential object)が絡むのがややこしい
しかしFunctorは当然としてMonadも冪対象を用いないで形式化されてる(というより計算論の世界への応用のずっと以前からある)
Applicative(=Monoid?)はどやねんという話なんです
圏論の世界ではなかったものが計算論の世界に導入されてから考え出されたもんなんですかねぇ?
そう、Haskellの圏論がらみの話はその“冪対象”(exponential object)が絡むのがややこしい
しかしFunctorは当然としてMonadも冪対象を用いないで形式化されてる(というより計算論の世界への応用のずっと以前からある)
Applicative(=Monoid?)はどやねんという話なんです
圏論の世界ではなかったものが計算論の世界に導入されてから考え出されたもんなんですかねぇ?
518デフォルトの名無しさん
2020/09/16(水) 01:31:29.62ID:yuR5T5xB strong lax monoical functor
519デフォルトの名無しさん
2020/09/16(水) 22:12:52.40ID:CfmtxJKj モノイド圏とかモノイド対象とかあんのだけど、モノイド(モノイダル)関手ってのもあんのね
読む気は無いんだけど、アプリカティブ関手とモノイダルXXが同型ってのは無いと思うが
っておもったけど、関手同士なんだから、いくつか条件つければモナドとモノイドみたいな関係もありうるんかな?
あとは、カン拡張、随伴、普遍性(極限だっけ?) どれかから相互に変換出来るだっけ?みたいなもん?
どちらにしろ、定義の話で面白みは無いとは思うのだが
読む気は無いんだけど、アプリカティブ関手とモノイダルXXが同型ってのは無いと思うが
っておもったけど、関手同士なんだから、いくつか条件つければモナドとモノイドみたいな関係もありうるんかな?
あとは、カン拡張、随伴、普遍性(極限だっけ?) どれかから相互に変換出来るだっけ?みたいなもん?
どちらにしろ、定義の話で面白みは無いとは思うのだが
520デフォルトの名無しさん
2020/09/17(木) 10:32:26.07ID:2a8IoKJu 見つけた
https://qiita.com/Guvalif/items/7f893d9a078e03c9e425
このサイトの人がまとめたpdfに書いてある
とは言ってもやはりclosed categoryは仮定してる
やっぱりapplicativeはmonadと違って“内部ホム”を持たない圏では定義できないんだろな
“内部ホム”もつ圏でmonoidal functorに<*>を定義するのはわりと簡単だけど↓
F(X) × F(Y^X)
→F(X×Y^X) (coherence)
→F(Y) (F(eval))
https://en.m.wikipedia.org/wiki/Monoidal_functor
pureが全然できんなぁと思ってたら“strong”という条件からpureが作れるんだな
まぁHaskellて圏の話するときはHASKて言えればいいんだからコレでわかったことにしよ
https://qiita.com/Guvalif/items/7f893d9a078e03c9e425
このサイトの人がまとめたpdfに書いてある
とは言ってもやはりclosed categoryは仮定してる
やっぱりapplicativeはmonadと違って“内部ホム”を持たない圏では定義できないんだろな
“内部ホム”もつ圏でmonoidal functorに<*>を定義するのはわりと簡単だけど↓
F(X) × F(Y^X)
→F(X×Y^X) (coherence)
→F(Y) (F(eval))
https://en.m.wikipedia.org/wiki/Monoidal_functor
pureが全然できんなぁと思ってたら“strong”という条件からpureが作れるんだな
まぁHaskellて圏の話するときはHASKて言えればいいんだからコレでわかったことにしよ
521デフォルトの名無しさん
2020/09/28(月) 01:41:48.03ID:0EuZ+v5t [Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)
の小さい例題の[html](https://pastebin.com/yxSRyg2u)をアップした。
async/awaitはPromiseのお助け文法になっているが、それは扱っていない。実行環境は、
[RStudio](https://rstudio.com/products/rstudio/)から
[Node.js](https://nodejs.org/ja/)を呼び出している。
の小さい例題の[html](https://pastebin.com/yxSRyg2u)をアップした。
async/awaitはPromiseのお助け文法になっているが、それは扱っていない。実行環境は、
[RStudio](https://rstudio.com/products/rstudio/)から
[Node.js](https://nodejs.org/ja/)を呼び出している。
522デフォルトの名無しさん
2020/10/14(水) 04:31:41.26ID:+VLXbnA3 >>20
ワードカウントのロジックが不思議ちゃんだと思ったけどワードと空白の関係が
"abc dd "みたいな行儀が良い書式じゃないとだめなんだな
" "一文字スペースでワード数が1になってしまうみたいな
countFile :: String -> (Int, Int, Int)
countFile s =
let (cs, ws, ls, _) = foldl' go (0, 0, 0, False) s
in (cs, ws, ls)
where
go :: (Int, Int, Int, Bool) -> Char -> (Int, Int, Int, Bool)
go (cs, ws, ls, wasSpace) c =
let addLine | c == '\n' = 1
| otherwise = 0
addWord | wasSpace = 0
| isSpace c = 1
| otherwise = 0
in (cs + 1, ws + addWord, ls + addLine, isSpace c)
ワードカウントのロジックが不思議ちゃんだと思ったけどワードと空白の関係が
"abc dd "みたいな行儀が良い書式じゃないとだめなんだな
" "一文字スペースでワード数が1になってしまうみたいな
countFile :: String -> (Int, Int, Int)
countFile s =
let (cs, ws, ls, _) = foldl' go (0, 0, 0, False) s
in (cs, ws, ls)
where
go :: (Int, Int, Int, Bool) -> Char -> (Int, Int, Int, Bool)
go (cs, ws, ls, wasSpace) c =
let addLine | c == '\n' = 1
| otherwise = 0
addWord | wasSpace = 0
| isSpace c = 1
| otherwise = 0
in (cs + 1, ws + addWord, ls + addLine, isSpace c)
523デフォルトの名無しさん
2020/10/31(土) 09:11:59.11ID:UJYxitvT http://walk.northcol.org/haskell/adts/
>代数的データ型(algebraic data type)とは,図のように木構造で表現される値からなるデータ型のことです.
必ず木構造に限定されるんだろうか?
OOPではオブジェクトグラフがありネットワークになりうるが、
Haskellでは絶対に木と考えて良いの?
>代数的データ型(algebraic data type)とは,図のように木構造で表現される値からなるデータ型のことです.
必ず木構造に限定されるんだろうか?
OOPではオブジェクトグラフがありネットワークになりうるが、
Haskellでは絶対に木と考えて良いの?
524デフォルトの名無しさん
2020/10/31(土) 12:29:50.75ID:cEs7BAmA いいんじゃない?
型の全体は文脈自由文法で規定されるクラスだから木になる希ガス
型の全体は文脈自由文法で規定されるクラスだから木になる希ガス
525デフォルトの名無しさん
2020/10/31(土) 12:34:33.57ID:fxcwqRC2 この木なんの木きのこる木
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市朗報】 日本政府「一昨年は1300億円。去年も防衛費が1100億円余ったw」 日本の防衛費は充分足りてる事が判明。増やす必要無し [485983549]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
