関数型プログラミング言語 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:L6eYQqyh719デフォルトの名無しさん
2021/02/08(月) 09:04:48.35ID:THE6D9/g >>718
fix定義の中でlet節を使って定義されているxの話です。
fix定義の中でlet節を使って定義されているxの話です。
720デフォルトの名無しさん
2021/02/08(月) 12:31:08.86ID:hFpKnaPX >>707
リスト使ったメモ化の理解にはいいんですけど、その例も実は遅いんですよね。!!がO(n)なので。
module Main where
import Data.Function
import qualified Data.Vector as V
main = do
let memo = fibMyMemo 50000
print $memo 50000
print $fibMemo 50000
fibMyMemo l = fib
where
fib = ((V.map f $ V.enumFromN 0 (l + 1)) V.!)
f 0 = 0 :: Integer
f 1 = 1
f n = fib (n -1) + fib (n -2)
memoize f = (map f [0 ..] !!)
fib f 0 = 0
fib f 1 = 1
fib f n = f (n - 1) + f (n - 2)
fibMemo = fix (memoize . fib)
リスト使ったメモ化の理解にはいいんですけど、その例も実は遅いんですよね。!!がO(n)なので。
module Main where
import Data.Function
import qualified Data.Vector as V
main = do
let memo = fibMyMemo 50000
print $memo 50000
print $fibMemo 50000
fibMyMemo l = fib
where
fib = ((V.map f $ V.enumFromN 0 (l + 1)) V.!)
f 0 = 0 :: Integer
f 1 = 1
f n = fib (n -1) + fib (n -2)
memoize f = (map f [0 ..] !!)
fib f 0 = 0
fib f 1 = 1
fib f n = f (n - 1) + f (n - 2)
fibMemo = fix (memoize . fib)
721デフォルトの名無しさん
2021/02/08(月) 18:33:31.66ID:USGkiU7i >>717
マジョリティとマイノリティの違いとか、合法とグレーの違いのようなものだと思えばいいだろ
再帰的な関数と再帰的な型はよく知られている
一方、関数でも型でもないケースは未知のウイルスのようなもので
既存のものと同じだとすぐ決めつけるのは判断が早過ぎる極論
マジョリティとマイノリティの違いとか、合法とグレーの違いのようなものだと思えばいいだろ
再帰的な関数と再帰的な型はよく知られている
一方、関数でも型でもないケースは未知のウイルスのようなもので
既存のものと同じだとすぐ決めつけるのは判断が早過ぎる極論
722デフォルトの名無しさん
2021/02/08(月) 20:09:46.17ID:xtdfQPSv723デフォルトの名無しさん
2021/02/10(水) 06:55:43.73ID:w+SbAYAx >>721
すいません、結局のところ、どういう事でしょう?
すいません、結局のところ、どういう事でしょう?
724デフォルトの名無しさん
2021/02/10(水) 10:35:38.44ID:tXb64EJq 法律や善悪の判断の正しさを疑うのと同じレベルの懐疑的な思考が
数学やデバッグにも必要ということかな
数学やデバッグにも必要ということかな
725デフォルトの名無しさん
2021/02/10(水) 11:17:11.88ID:tXb64EJq 静的型は最強とかガベコレは最強とかいう考えが
疑われるようになったのは半分ぐらいHaskellが原因だよね
疑われるようになったのは半分ぐらいHaskellが原因だよね
726デフォルトの名無しさん
2021/02/10(水) 13:30:33.82ID:em7GM66H >>721←こいつまだいたのか
気持ち悪すぎる
気持ち悪すぎる
727デフォルトの名無しさん
2021/02/10(水) 14:18:45.17ID:tXb64EJq ここは無料だしこんなもんだろ
良いものはみんな課金される
良いものはみんな課金される
728デフォルトの名無しさん
2021/02/11(木) 14:43:11.06ID:/UgD5Hp7 地獄の沙汰も金次第
だが天国への言及はない
だが天国への言及はない
729デフォルトの名無しさん
2021/02/11(木) 16:56:32.70ID:zBw+qxbZ ねえ、購入厨
ひょっとしてHaskellは、きみが同じ地獄を繰り返す毎に
強力なフリーソフトになっていったんじゃないのかい
ひょっとしてHaskellは、きみが同じ地獄を繰り返す毎に
強力なフリーソフトになっていったんじゃないのかい
730デフォルトの名無しさん
2021/02/13(土) 21:17:16.21ID:kqsb0S1y 悪役キャラには著作権等のコンプライアンスを意識させると邪気が抜けてしまう
豆知識
豆知識
731デフォルトの名無しさん
2021/02/14(日) 18:40:01.75 なぜ Haskell スレはワードサラダ bot に狙われてしまうのか
732デフォルトの名無しさん
2021/02/14(日) 20:59:33.34ID:2j5v2BhK733デフォルトの名無しさん
2021/02/14(日) 21:27:29.30ID:A1oxlP1a 731はワードサラダなレスうぜぇなぁくらいの意味しかなくワードサラダなレスが存在してしまう理由を実際に疑問に思っているわけではないという簡単なことが何故わからないのか
734デフォルトの名無しさん
2021/02/14(日) 21:49:22.17ID:2j5v2BhK 731は、うぜぇなぁ以外何も考えてなかったというのか
それは差別意識しかない絶対悪じゃないか
それは差別意識しかない絶対悪じゃないか
735デフォルトの名無しさん
2021/02/15(月) 01:08:13.78ID:Qrz9kKC+ もっと危機感を持ったほうがいいよ
母国語の特徴までネチネチいじられたら外国語はこわくて使えないだろう
英語ができないとプログラミングもできない
母国語の特徴までネチネチいじられたら外国語はこわくて使えないだろう
英語ができないとプログラミングもできない
736デフォルトの名無しさん
2021/02/15(月) 17:23:26.09ID:Mv5LolEs なんかこのスレ会話が噛み合わないよな
>>732←こいつとか明らかに頭おかしいし
こういう人外化け物がうじゃうじゃいるから「特技はコミュニケーション能力です」みたいなゴミ文系が社会で調子に乗り始めるんだろうな
>>732←こいつとか明らかに頭おかしいし
こういう人外化け物がうじゃうじゃいるから「特技はコミュニケーション能力です」みたいなゴミ文系が社会で調子に乗り始めるんだろうな
737デフォルトの名無しさん
2021/02/15(月) 18:24:29.13ID:Qrz9kKC+ コミュ力の悪用を止める方法で一番使えそうなのは制限時間を無くすことだ
5秒で答えさせるような問題でも時間のルールを無視してしまえば
そのゴミ文系ってやつの能力を擬似的にコピーできる
5秒で答えさせるような問題でも時間のルールを無視してしまえば
そのゴミ文系ってやつの能力を擬似的にコピーできる
738デフォルトの名無しさん
2021/02/15(月) 19:02:15.47ID:3zpQr6lX Haskellの話は?
739デフォルトの名無しさん
2021/02/15(月) 20:58:35.44ID:Qrz9kKC+ 最小不動点を定義する半順序の定義がない
それと「再帰」の定義がない
それと「再帰」の定義がない
740デフォルトの名無しさん
2021/02/16(火) 10:45:42.61ID:AZNZAZhP741デフォルトの名無しさん
2021/02/16(火) 12:56:19.11ID:VICwQMLs 質問なんですが,
https://levelup.gitconnected.com/functional-dynamic-programming-with-haskell-top-down-and-bottom-up-7ccade222337
の一番上のコード内23-25行目の
iMinusOne <- cdRecursiveTD (i-1) stArr
iMinusTwo <- cdRecursiveTD (i-2) stArr
writeArray stArr i ( (i-1) * ( iMinusOne + iMinusTwo ) )
の部分を添え字使って
for j = 1 to 2
xs !! j <- cdRecursiveTD (i-j) stArr
writeArray stArr i ( (i-1) * ( sum xs ) )
みたいに書く方法ってありませんかね?
https://levelup.gitconnected.com/functional-dynamic-programming-with-haskell-top-down-and-bottom-up-7ccade222337
の一番上のコード内23-25行目の
iMinusOne <- cdRecursiveTD (i-1) stArr
iMinusTwo <- cdRecursiveTD (i-2) stArr
writeArray stArr i ( (i-1) * ( iMinusOne + iMinusTwo ) )
の部分を添え字使って
for j = 1 to 2
xs !! j <- cdRecursiveTD (i-j) stArr
writeArray stArr i ( (i-1) * ( sum xs ) )
みたいに書く方法ってありませんかね?
742デフォルトの名無しさん
2021/02/16(火) 15:13:16.20ID:VICwQMLs すみません自己解決しました
一応結果貼っておきます
cdRecursiveTD i stArr = do
____v <- readArray stArr i
____when (v == -1) $ do
______xsm <- newSTRef []
______forM_ [1,2] $ \j -> do
________x <- cdRecursiveTD (i-j) stArr
________modifySTRef xsm (x:)
______xs <- readSTRef xsm
______writeArray stArr i ( (i-1) * ( sum xs ) )
____readArray stArr i
一応結果貼っておきます
cdRecursiveTD i stArr = do
____v <- readArray stArr i
____when (v == -1) $ do
______xsm <- newSTRef []
______forM_ [1,2] $ \j -> do
________x <- cdRecursiveTD (i-j) stArr
________modifySTRef xsm (x:)
______xs <- readSTRef xsm
______writeArray stArr i ( (i-1) * ( sum xs ) )
____readArray stArr i
743デフォルトの名無しさん
2021/02/16(火) 15:27:24.80ID:twhDC3NA xs <- mapM (\j -> cdRecursiveTD (i - j) stArr) [1 .. 2]
writeArray stArr i ((i - 1) * sum xs)
これでよくないですかー?
writeArray stArr i ((i - 1) * sum xs)
これでよくないですかー?
744デフォルトの名無しさん
2021/02/16(火) 15:32:43.34ID:VICwQMLs745デフォルトの名無しさん
2021/02/17(水) 14:02:08.57ID:YPZ4jTJ4 map f [1,1,1,2]のように重複の多いリストがあったら
fの実装を変える勢力とリストの構造を変える勢力の争いをどうやって解決できるか気になる
fの実装を変える勢力とリストの構造を変える勢力の争いをどうやって解決できるか気になる
746デフォルトの名無しさん
2021/02/17(水) 16:20:43.74ID:mAFPwKeZ 一回Set型にしてからListに戻す
747デフォルトの名無しさん
2021/02/17(水) 16:22:11.25ID:mAFPwKeZ もちろんリストの要素の個数減って良い場合の話だけど
748デフォルトの名無しさん
2021/02/17(水) 22:40:59.85ID:0SJ3Yct4 >>745
具体的な問題状況(例)が示されなければ、次のような何にでも当てはまる
至極当たり前のつまらない回答しかできないと思うが。
目的、開発リソース(時間や設備、資料、費用など)、
開発者の能力やモチベーション、メンテの容易さなどを、
優先順位を考慮したうえで出来るだけ客観的に評価し決定する。
争うということは、優先順位や評価基準が定まっていないということなので、
まずはそれらを話し合って、あるいは上の立場の者がバシッと決める。
具体的な問題状況(例)が示されなければ、次のような何にでも当てはまる
至極当たり前のつまらない回答しかできないと思うが。
目的、開発リソース(時間や設備、資料、費用など)、
開発者の能力やモチベーション、メンテの容易さなどを、
優先順位を考慮したうえで出来るだけ客観的に評価し決定する。
争うということは、優先順位や評価基準が定まっていないということなので、
まずはそれらを話し合って、あるいは上の立場の者がバシッと決める。
749デフォルトの名無しさん
2021/02/18(木) 09:29:03.36ID:8Wc99cSo なんかしょうもない話なんですけどウチの環境で次が通ります
test x = case x of
_ | odd x -> 1
oyherwise -> 0
main = do
print $ test 123
print $ test 456
なんか笑ってしまいました
test x = case x of
_ | odd x -> 1
oyherwise -> 0
main = do
print $ test 123
print $ test 456
なんか笑ってしまいました
750デフォルトの名無しさん
2021/02/18(木) 09:31:00.46ID:8Wc99cSo あ、イヤ違う
勘違いでした
すいません
勘違いでした
すいません
751デフォルトの名無しさん
2021/02/18(木) 10:58:11.75ID:jy6gqPJ4 >>748
客観的な目的というのは難しすぎて誰にも分からない
例えば個人的な借金を減らすことと国の借金を減らすことはどちらが客観的目的か
そうではなく、目的は主観で決めてOKというなら
それは結構面白い答えであって、つまらない答えではない
客観的な目的というのは難しすぎて誰にも分からない
例えば個人的な借金を減らすことと国の借金を減らすことはどちらが客観的目的か
そうではなく、目的は主観で決めてOKというなら
それは結構面白い答えであって、つまらない答えではない
752デフォルトの名無しさん
2021/02/18(木) 11:50:05.23ID:6bd12mxo >>751
言葉が足りず、誤解させたようで申し訳ない。
客観的に行うのは、目的を定めることではなくて、
今やろうとしている事が定めた目的に合っているのか評価すること。
fの実装を変えることが目的に合っているのか、
それともリスト構造を変える方がより合っているのか。
目的というのは様々あるよね。
見聞きした新しい技術をラフに評価するための
トイプログラムを作ることが目的だったり、
次のリリースでメモリ使用量を10%削減することだったり。
客観的に評価することを意識しないと、気分や雰囲気に流されて、
メモリ使用量を抑える目標が、いつの間にか処理速度向上にすり替わってたりする。
また、目標は評価する一項目にすぎない。
リリース時期を守る方が優先順位が高い状況もある。
だから、もろもろ含めて客観的に評価する。
逆にそうじゃないと、fとリストどちらを変えるのかなんて、決めようがないと思う。
言葉が足りず、誤解させたようで申し訳ない。
客観的に行うのは、目的を定めることではなくて、
今やろうとしている事が定めた目的に合っているのか評価すること。
fの実装を変えることが目的に合っているのか、
それともリスト構造を変える方がより合っているのか。
目的というのは様々あるよね。
見聞きした新しい技術をラフに評価するための
トイプログラムを作ることが目的だったり、
次のリリースでメモリ使用量を10%削減することだったり。
客観的に評価することを意識しないと、気分や雰囲気に流されて、
メモリ使用量を抑える目標が、いつの間にか処理速度向上にすり替わってたりする。
また、目標は評価する一項目にすぎない。
リリース時期を守る方が優先順位が高い状況もある。
だから、もろもろ含めて客観的に評価する。
逆にそうじゃないと、fとリストどちらを変えるのかなんて、決めようがないと思う。
753デフォルトの名無しさん
2021/02/18(木) 15:29:22.47ID:jy6gqPJ4754デフォルトの名無しさん
2021/02/25(木) 20:48:36.35ID:zWeVIvWn ある対象がモノイドかどうかを問う質問です。
2つのリストのうち要素の少ない方のリストをそのまま返す、
同じ要素数ならば左側のリストをそのまま返す関数 f :: [a] -> [a] -> [a] があるとします。
ここで、ある型aのリスト全体の集合[a]と、その上の二項演算fとの組([a], f)はモノイドを成すでしょうか。
私は次のように、これはモノイドではないと考えます。
このモノイド性を考えるとき、その単位元の候補として、
もし集合に無限リストを含めないのならば最大要素数のリストを、
無限リストを含めるのであれば無限リストを取ります。
他に考えようがありません。
しかし、どちらにしても単位元の一意性が証明できません。
xs、ys 共に最大要素数のリスト、あるいは無限リストであり、かつ xs /= ys を満たすものは(型aによっては)いくらでもあります。
よって、([a], f) はモノイドではないと考えますが、これは正しいでしょうか。
モノイドの定義に照らし合わせるのではなく、
モノイドならば証明できるであろう定理が証明できないことに因っているのが、
なんとも気持ち悪いのですが・・・
そもそもモノイド性を問うには ([a], f) の定義が曖昧なのでしょうか。
2つのリストのうち要素の少ない方のリストをそのまま返す、
同じ要素数ならば左側のリストをそのまま返す関数 f :: [a] -> [a] -> [a] があるとします。
ここで、ある型aのリスト全体の集合[a]と、その上の二項演算fとの組([a], f)はモノイドを成すでしょうか。
私は次のように、これはモノイドではないと考えます。
このモノイド性を考えるとき、その単位元の候補として、
もし集合に無限リストを含めないのならば最大要素数のリストを、
無限リストを含めるのであれば無限リストを取ります。
他に考えようがありません。
しかし、どちらにしても単位元の一意性が証明できません。
xs、ys 共に最大要素数のリスト、あるいは無限リストであり、かつ xs /= ys を満たすものは(型aによっては)いくらでもあります。
よって、([a], f) はモノイドではないと考えますが、これは正しいでしょうか。
モノイドの定義に照らし合わせるのではなく、
モノイドならば証明できるであろう定理が証明できないことに因っているのが、
なんとも気持ち悪いのですが・・・
そもそもモノイド性を問うには ([a], f) の定義が曖昧なのでしょうか。
755デフォルトの名無しさん
2021/02/25(木) 21:30:50.20ID:hQOL6Vl7 モノイドではないに一票
756デフォルトの名無しさん
2021/02/26(金) 01:35:18.34ID:7R2bTCy0 リストには同じ要素が何個も入ってもいいんだから単位元になり得るのは無限リストだけでしょ
ある無限リストを単位元eとするしかなさそう
ここでもう1つ無限リストaを用意してf a eしたらa返さずに要素の個数比較する時点で⊥になるからモノイドにならないと思う
ある無限リストを単位元eとするしかなさそう
ここでもう1つ無限リストaを用意してf a eしたらa返さずに要素の個数比較する時点で⊥になるからモノイドにならないと思う
757デフォルトの名無しさん
2021/02/26(金) 02:07:21.86ID:Drny41hT 型は集合ではない
値は元ではない
プログラム上の関数は数学的な意味での関数ではない
Haskellは数学ではない
値は元ではない
プログラム上の関数は数学的な意味での関数ではない
Haskellは数学ではない
758デフォルトの名無しさん
2021/02/26(金) 10:03:43.32ID:W2dsUZYE モノイドでも集合論でも、公理が多過ぎて公理が偽になるなら
公理を減らせばいいじゃん
公理を減らせばいいじゃん
759デフォルトの名無しさん
2021/02/26(金) 10:24:37.14ID:nFSf/y++ >>754
まず単位元の定義から、esが[a]の単位元であるなら、任意のxsに対して
f es xs == xs
f xs es == xs
を満たす、というところはいいよね(ゆえにesは、任意のxsより要素数が大きくなければいけない)
このことから直接非存在を言う方がこの場合は明快だと思うけど、
「ある要素が単位元ならばそれが一意である」はすぐに言えるから
背理法により単位元が存在しない、でも正しい論証だと思う
もしこの演算fに対してモノイドを構成するなら、
(>>756とほぼ同じことを言うが) length es == ∞ なる要素を1つ決めて
(全ての有限リスト) ∪ {es}
みたいな集合の上でなら言えそう
ちゃんと見てないけど結合律もそれっぽく振る舞ってそう
まず単位元の定義から、esが[a]の単位元であるなら、任意のxsに対して
f es xs == xs
f xs es == xs
を満たす、というところはいいよね(ゆえにesは、任意のxsより要素数が大きくなければいけない)
このことから直接非存在を言う方がこの場合は明快だと思うけど、
「ある要素が単位元ならばそれが一意である」はすぐに言えるから
背理法により単位元が存在しない、でも正しい論証だと思う
もしこの演算fに対してモノイドを構成するなら、
(>>756とほぼ同じことを言うが) length es == ∞ なる要素を1つ決めて
(全ての有限リスト) ∪ {es}
みたいな集合の上でなら言えそう
ちゃんと見てないけど結合律もそれっぽく振る舞ってそう
760デフォルトの名無しさん
2021/02/26(金) 11:29:42.18ID:s/eVhYHX761デフォルトの名無しさん
2021/03/18(木) 15:12:33.23ID:4AdjqCpZ なんか最近プログラミングの情報ネットで漁ってると数学基礎論の記号らしきもの、横棒の上になんか命題らしき文字列が並んでる奴がめちゃめちゃ出てくるんですけど、完全に乗り遅れました
なんかあの記号の意味解説してるいい教科書とかサイトとかありませんか?
なんかあの記号の意味解説してるいい教科書とかサイトとかありませんか?
762デフォルトの名無しさん
2021/03/18(木) 19:10:51.45ID:lKavXNN6 >>761
このような式ですか?
P -> Q P
--------------
Q
これは、横線の上の論理式(この例の場合は2つの論理式)を前提とすると、
いくつかの推論規則を使えば横線の下の論理式が導ける、
という意味です。
論理学の教科書(的な解説サイト)ならレベルの高低に関わらずどれでも載っていますが、
どれでも式自体の意味についてはこの程度の説明しか無いと思いますよ。
例えば
https://abelard.flet.keio.ac.jp/person/takemura/class/2013/3-print-nk.pdf
知りたいことが違っていたらごめんなさい。
このような式ですか?
P -> Q P
--------------
Q
これは、横線の上の論理式(この例の場合は2つの論理式)を前提とすると、
いくつかの推論規則を使えば横線の下の論理式が導ける、
という意味です。
論理学の教科書(的な解説サイト)ならレベルの高低に関わらずどれでも載っていますが、
どれでも式自体の意味についてはこの程度の説明しか無いと思いますよ。
例えば
https://abelard.flet.keio.ac.jp/person/takemura/class/2013/3-print-nk.pdf
知りたいことが違っていたらごめんなさい。
763デフォルトの名無しさん
2021/03/18(木) 19:28:09.20ID:wWeTTUcP >>762
ありがとうございます
ギリギリその図形の意味はわかります
問題はそれとプログラミングの理論がどう関わってるかのとこなんです
多分カリーハワード対応というやつだと思うんですが
コレなんか役に立つもんなんですかねぇ?
ありがとうございます
ギリギリその図形の意味はわかります
問題はそれとプログラミングの理論がどう関わってるかのとこなんです
多分カリーハワード対応というやつだと思うんですが
コレなんか役に立つもんなんですかねぇ?
764デフォルトの名無しさん
2021/03/18(木) 20:21:41.37ID:lKavXNN6 >>763
めちゃめちゃ出てくるという事ですので、
そのページのURLをいくつか挙げてくれませんか。
そうすれば、もしかしたら、どう関わっているの把握できて、
説明、あるいは解説ページや書籍の紹介ができるかもしれません。
めちゃめちゃ出てくるという事ですので、
そのページのURLをいくつか挙げてくれませんか。
そうすれば、もしかしたら、どう関わっているの把握できて、
説明、あるいは解説ページや書籍の紹介ができるかもしれません。
765デフォルトの名無しさん
2021/03/18(木) 20:27:07.75ID:gebFut6o 例えばプログラムをリファクタリングするとき、修正前後での挙動一致を証明できたりするぞ
すごい🤗
(依存型のないHaskellでは出来ないからidrisの例だけど)
https://keens.github.io/blog/2020/12/22/idrisdeizongatawotsukattashoumeinyuumon/
やりたいことが数学/論理学の勉強とかならcoqのほうがよさげ
すごい🤗
(依存型のないHaskellでは出来ないからidrisの例だけど)
https://keens.github.io/blog/2020/12/22/idrisdeizongatawotsukattashoumeinyuumon/
やりたいことが数学/論理学の勉強とかならcoqのほうがよさげ
766デフォルトの名無しさん
2021/03/18(木) 23:49:21.36ID:wWeTTUcP >>764
そうですね
例えばcall by nameとcall by needの違いを調べようと思った時に出てきた
https://reader.elsevier.com/reader/sd/pii/S1571066104000222?token=1C1ACCAE69D33669B7D36179C932FC14DD80723B2FD5B3080E3B1EDED9228FC6A9A6AC347668843625B7154C276B7B4C
なんかバリバリ出てきます
なんのこっちゃと
>>165
coqもよく聞きますよね
なんかおすすめの教科書とかありますか?
そうですね
例えばcall by nameとcall by needの違いを調べようと思った時に出てきた
https://reader.elsevier.com/reader/sd/pii/S1571066104000222?token=1C1ACCAE69D33669B7D36179C932FC14DD80723B2FD5B3080E3B1EDED9228FC6A9A6AC347668843625B7154C276B7B4C
なんかバリバリ出てきます
なんのこっちゃと
>>165
coqもよく聞きますよね
なんかおすすめの教科書とかありますか?
767デフォルトの名無しさん
2021/03/19(金) 00:48:13.30ID:H+hZ3f68 カリーハワード対応って要は
True => True = True
True => False = False
False => True = True
False => False = True
が
{単集合->単集合}=単集合 (単集合から単集合への写像は一通りだけ)
{単集合->空集合}=空集合 (単集合から空集合への写像は存在しない)
{空集合->単集合}=単集合 (空集合から任意の集合への写像は一通り(空写像))
{空集合->空集合}=単集合 (上に同じ)
と対応してるって感じと捉えれば良いのかな?
wikipedia読んでもあんまり理解できない
True => True = True
True => False = False
False => True = True
False => False = True
が
{単集合->単集合}=単集合 (単集合から単集合への写像は一通りだけ)
{単集合->空集合}=空集合 (単集合から空集合への写像は存在しない)
{空集合->単集合}=単集合 (空集合から任意の集合への写像は一通り(空写像))
{空集合->空集合}=単集合 (上に同じ)
と対応してるって感じと捉えれば良いのかな?
wikipedia読んでもあんまり理解できない
768デフォルトの名無しさん
2021/03/19(金) 01:58:47.96ID:MuA020tT 名前呼び出しの意味が分かりません
769デフォルトの名無しさん
2021/03/19(金) 02:07:37.96ID:FHn+Zz2I771デフォルトの名無しさん
2021/03/19(金) 03:08:33.55ID:FHn+Zz2I >>770
遅延評価を実現する評価戦略の中に、必要呼び出し(call by need)と名前呼び出し(call by name)があります。
必要呼び出しはhaskellが採っている戦略で、
一度評価した値を使い回して無駄な呼び出しを防ぐものです。
一方、名前呼び出しは同じ遅延評価でも、評価した値を記憶せず、必要なら何度でも同じ評価処理をするものです。
遅延評価を実現する評価戦略の中に、必要呼び出し(call by need)と名前呼び出し(call by name)があります。
必要呼び出しはhaskellが採っている戦略で、
一度評価した値を使い回して無駄な呼び出しを防ぐものです。
一方、名前呼び出しは同じ遅延評価でも、評価した値を記憶せず、必要なら何度でも同じ評価処理をするものです。
772デフォルトの名無しさん
2021/03/19(金) 09:49:18.16ID:pEtEADGt >>769
そうですね
多分対応自体はわかると思います
しかし実際カリーハワード対応で基礎論の世界に持って行くことの効用がよくわかりません
基礎論の世界に持っていって基礎論でよく知られたなんかの定理が使えるとかいうわけでもなさそうですし
最初はcall by needの実装の話、すなわちcall by needでは展開された評価式に同じexpressionが出たとき、その内容を保持して同じ評価を何度も繰り返すのを防ぐらしいですが、もちろんどんな評価でも何でもかんでもメモするわけではないようなので、結局自分で手前でメモ化する必要がでたりします
どういう時はcall by needのメモ化が効いてどういう場合は効かないのかよくわからないので現状は“やってみる”しかないし、やってみて上手くいかなくても、なんか上手い書き方すればやってくれるのか、はなからだめなのか、その判別もつきません
そうですね
多分対応自体はわかると思います
しかし実際カリーハワード対応で基礎論の世界に持って行くことの効用がよくわかりません
基礎論の世界に持っていって基礎論でよく知られたなんかの定理が使えるとかいうわけでもなさそうですし
最初はcall by needの実装の話、すなわちcall by needでは展開された評価式に同じexpressionが出たとき、その内容を保持して同じ評価を何度も繰り返すのを防ぐらしいですが、もちろんどんな評価でも何でもかんでもメモするわけではないようなので、結局自分で手前でメモ化する必要がでたりします
どういう時はcall by needのメモ化が効いてどういう場合は効かないのかよくわからないので現状は“やってみる”しかないし、やってみて上手くいかなくても、なんか上手い書き方すればやってくれるのか、はなからだめなのか、その判別もつきません
773768
2021/03/19(金) 11:58:13.56ID:f7aaFMxN774デフォルトの名無しさん
2021/03/19(金) 13:27:51.17ID:5FIf9nG9 静的型のアイデアは
実行時の世界でやっていたことをコンパイル時の世界に持って行くことだから
このアイデアが常識にならない限り動的型の時代は終わらないだろう
実行時の世界でやっていたことをコンパイル時の世界に持って行くことだから
このアイデアが常識にならない限り動的型の時代は終わらないだろう
775デフォルトの名無しさん
2021/03/20(土) 08:58:16.14ID:Hmrg9tvu >>772
プログラムの世界において、ある事柄の性質や、事柄Aと事柄Bの間の関係を調べたいとき、
プログラムの世界の中ではなかなかうまく見えてこない場合がある。
そんなとき、 カリーハワード同型対応によって問題を論理の世界に移すと、
見通しが良くなり、調べやすくなることがある。
そういう意味では役立ちます。
質問者さんが例示した論文がまさにそれです。
一方、何かを作るためにプログラムをする(現場の)人たちにとっては、とくに役立つことは無いと思います。
役立った話を一切聞きません。
質問者さんが、名前呼び出しなどの「性質や関係」を学術的に深く知りたくて調べているのであれば、役立つと思います。
自作のプログラム言語で名前呼び出しを実装したくて調べているのであれば、役立ちませんね。
別の論文に当たった方がいいと思います。
プログラムの世界において、ある事柄の性質や、事柄Aと事柄Bの間の関係を調べたいとき、
プログラムの世界の中ではなかなかうまく見えてこない場合がある。
そんなとき、 カリーハワード同型対応によって問題を論理の世界に移すと、
見通しが良くなり、調べやすくなることがある。
そういう意味では役立ちます。
質問者さんが例示した論文がまさにそれです。
一方、何かを作るためにプログラムをする(現場の)人たちにとっては、とくに役立つことは無いと思います。
役立った話を一切聞きません。
質問者さんが、名前呼び出しなどの「性質や関係」を学術的に深く知りたくて調べているのであれば、役立つと思います。
自作のプログラム言語で名前呼び出しを実装したくて調べているのであれば、役立ちませんね。
別の論文に当たった方がいいと思います。
776デフォルトの名無しさん
2021/03/20(土) 09:35:36.64ID:IEpiSEKy >>775
そうなんですか
難しいですね
haskell の call by need のシステムがどういう具合に実装されてるか調べようとするとほぼ確実にカリーハワード対応が出てきます
ボチボチ勉強するしかなさそうですね
そもそもcall by needのメモ化の話はhaskell コンパイラの実装の話なのでhaskellの言語自体のレギュレーションにはひとつも載ってない(つまりghcではメモ化が効いて早いけど別のシステムでは遅いという事もありうるし文句言えない)ので効くか効かないか試してみるしかないのが不愉快なんですよねえ
そうなんですか
難しいですね
haskell の call by need のシステムがどういう具合に実装されてるか調べようとするとほぼ確実にカリーハワード対応が出てきます
ボチボチ勉強するしかなさそうですね
そもそもcall by needのメモ化の話はhaskell コンパイラの実装の話なのでhaskellの言語自体のレギュレーションにはひとつも載ってない(つまりghcではメモ化が効いて早いけど別のシステムでは遅いという事もありうるし文句言えない)ので効くか効かないか試してみるしかないのが不愉快なんですよねえ
777デフォルトの名無しさん
2021/03/20(土) 10:00:16.31ID:1F8CRKpv >>776
それなら graph reduction の実装を調べた方が良いと思います。
それなら graph reduction の実装を調べた方が良いと思います。
778デフォルトの名無しさん
2021/03/20(土) 10:28:51.32ID:Hmrg9tvu779768
2021/03/20(土) 12:05:15.57ID:WUxvQvbt >>778
ありがとうございます
こちらこそ、たびたびすみません
マンガのセリフのことを「ネーム」というらしいので、書いた字面をいうのかなと考えたり
name を和英・英英辞典で調べても、結局しっくりきませんでした
スレ汚しすみませんでした
ありがとうございます
こちらこそ、たびたびすみません
マンガのセリフのことを「ネーム」というらしいので、書いた字面をいうのかなと考えたり
name を和英・英英辞典で調べても、結局しっくりきませんでした
スレ汚しすみませんでした
780デフォルトの名無しさん
2021/03/20(土) 14:58:31.86ID:5ytd1i+3 カリーハワード同型対応とかって、機械学習だのアーキテクチャだのネットワークだのアルゴリズムだのといった工学的で応用的で目的意識の定まった何かの役に立つために発明されたものというよりも、理学的で基礎的な単なる重要な事実という雰囲気ある気がする
781デフォルトの名無しさん
2021/03/21(日) 00:15:43.04ID:5CEWIvha 貴金属と期限つきポイントの対立煽りにたとえる
使用期限がないのは使用目的がないと言っているようなもの
だが期限がない方もメリットがあるのは工学的にも否定できない事実
使用期限がないのは使用目的がないと言っているようなもの
だが期限がない方もメリットがあるのは工学的にも否定できない事実
782デフォルトの名無しさん
2021/03/22(月) 13:52:42.80ID:gNDsQT3i >>777
graph refuctionですか
調べてみます
しかしともかく、じゃあGHCとかではどう実装されてるのかとかいう資料はかなりの割合で結局カリーハワード対応使ってる文献しか出てこないのがなんとも
当面は“やってみる”でやり過ごすしかなさそうです
graph refuctionですか
調べてみます
しかしともかく、じゃあGHCとかではどう実装されてるのかとかいう資料はかなりの割合で結局カリーハワード対応使ってる文献しか出てこないのがなんとも
当面は“やってみる”でやり過ごすしかなさそうです
783デフォルトの名無しさん
2021/03/22(月) 15:09:38.98ID:UycYSiaC call by name(仮)の正式名称がgraph reductionだったら
カリーハワード対応(仮)にも正式名称がありそうだけど
訂正することで利益が出せるようにならなければ正式名称の価値も分からん
カリーハワード対応(仮)にも正式名称がありそうだけど
訂正することで利益が出せるようにならなければ正式名称の価値も分からん
784デフォルトの名無しさん
2021/03/22(月) 19:37:04.72ID:TV/B7jf8 >>782
私にはむしろカリーハワード同型対応を陽には使っていない資料しか見当たらないです。
検索キーワードや調べ方が違うのかもしれませんね。
(カリーハワード同型対応がさす意味がお互いに違っている可能性もありますが)
この資料はどうでしょうか。
遅延評価をする関数型言語一般の実装方法です。
https://www.microsoft.com/en-us/research/uploads/prod/1987/01/slpj-book-1987.pdf
私にはむしろカリーハワード同型対応を陽には使っていない資料しか見当たらないです。
検索キーワードや調べ方が違うのかもしれませんね。
(カリーハワード同型対応がさす意味がお互いに違っている可能性もありますが)
この資料はどうでしょうか。
遅延評価をする関数型言語一般の実装方法です。
https://www.microsoft.com/en-us/research/uploads/prod/1987/01/slpj-book-1987.pdf
785デフォルトの名無しさん
2021/03/22(月) 20:29:59.10ID:UycYSiaC 例えばmonomorphism restrictionとかいうアレだったら
実行時の挙動ではなく型の話になるんじゃないか
実行時の挙動ではなく型の話になるんじゃないか
786デフォルトの名無しさん
2021/03/23(火) 01:01:29.12ID:HzbeYy7B >>784
ありがとうございます
十章ですね
今度時間を見つけて読んでみます
そうですね
やっぱり私はGHC関連の資料をあたる事が多くて、やはりそこでは数学よりの資料が多いんでしょうね
でもやはりcall by needの実装方法はHaskellのレギュレーションには含まれていない実装依存のところなのでGHC userの私はどうしてもGHC関連の資料から当たりたくなってしまいます
GHCでのインプリメントは最新の成果が全て反映されてるとは限らないし、あるいはあまり一般的でない手法を用いているかもしれないし、そこはGHCそのものの資料が一番頼りになります
ただ一つの問題はあまりにも数学村(の計算論畑)の言葉で書かれててサッパリわからんとこorz
ありがとうございます
十章ですね
今度時間を見つけて読んでみます
そうですね
やっぱり私はGHC関連の資料をあたる事が多くて、やはりそこでは数学よりの資料が多いんでしょうね
でもやはりcall by needの実装方法はHaskellのレギュレーションには含まれていない実装依存のところなのでGHC userの私はどうしてもGHC関連の資料から当たりたくなってしまいます
GHCでのインプリメントは最新の成果が全て反映されてるとは限らないし、あるいはあまり一般的でない手法を用いているかもしれないし、そこはGHCそのものの資料が一番頼りになります
ただ一つの問題はあまりにも数学村(の計算論畑)の言葉で書かれててサッパリわからんとこorz
787デフォルトの名無しさん
2021/03/23(火) 03:42:25.12ID:VKgh9sH5 >>786
余計なお世話だとは思いますが、どの章もその前までの章の積み重ねなので、
第10章だけを読んで理解するのは難しいと思います。
かなり古い資料を提示したのは、基礎の基礎から学んだ方が良いと思ったからです。
この資料は本当に分かりやすく基礎から説明されているので、
急がば回れの精神で、腰を据えてじっくりと学んでみることをお勧めします。
それこそ数ヶ月かけて。
なんかこう、数学で例えるなら、集合論や解析学の基礎があやふやなまま、
位相空間論の必要な部分だけを都合よく学ぼうとしているような、
そんなきらいがあるように見えます。
余計なお世話だとは思いますが、どの章もその前までの章の積み重ねなので、
第10章だけを読んで理解するのは難しいと思います。
かなり古い資料を提示したのは、基礎の基礎から学んだ方が良いと思ったからです。
この資料は本当に分かりやすく基礎から説明されているので、
急がば回れの精神で、腰を据えてじっくりと学んでみることをお勧めします。
それこそ数ヶ月かけて。
なんかこう、数学で例えるなら、集合論や解析学の基礎があやふやなまま、
位相空間論の必要な部分だけを都合よく学ぼうとしているような、
そんなきらいがあるように見えます。
788デフォルトの名無しさん
2021/03/23(火) 05:16:41.87ID:EMfQwUjX そうですか
残念ながら当方計算論はウルマンホップクラフトや西岡先生の教科書しか読んだことないのでかなり知識が数学サイドに寄ってます
仕事もかなり数学よりで計算論はあくまで趣味なのであまり本腰入れて勉強したことはないのでもしかしたら専門に勉強されてる方から見ればそうかもしれません
まぁ本職に悪影響与えない範囲で時間見つけてボチボチ勉強します
残念ながら当方計算論はウルマンホップクラフトや西岡先生の教科書しか読んだことないのでかなり知識が数学サイドに寄ってます
仕事もかなり数学よりで計算論はあくまで趣味なのであまり本腰入れて勉強したことはないのでもしかしたら専門に勉強されてる方から見ればそうかもしれません
まぁ本職に悪影響与えない範囲で時間見つけてボチボチ勉強します
789デフォルトの名無しさん
2021/03/23(火) 07:32:33.02ID:e41TIwig はっきり言うと評価戦略だとか推論規則だとかカリーハワード同型対応だとかの話は、まともな情報系の学部なら習う基礎基本
大学の講義資料が易しいと思われ
大学の講義資料が易しいと思われ
790デフォルトの名無しさん
2021/03/23(火) 20:57:46.65ID:zFHE0Fu5 情報系とかいう言い方をする奴は言語から逃げてるね
「数学村の言葉で書かれ」た資料が存在するのも
C言語で書かれたOSの話をしないのも
言語から逃げた結果じゃないかな
「数学村の言葉で書かれ」た資料が存在するのも
C言語で書かれたOSの話をしないのも
言語から逃げた結果じゃないかな
791デフォルトの名無しさん
2021/03/24(水) 19:34:45.53ID:8SYKHDut 何言ってんだコイツ…
792デフォルトの名無しさん
2021/03/26(金) 00:15:16.59ID:sjuSPGcx カリー・ハワード同型対応はこのスライドが分かり易かった
結局なんで上手く行くのかって良く分かってないのね
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward.pdf
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward2.pdf
結局なんで上手く行くのかって良く分かってないのね
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward.pdf
https://ocw.kyoto-u.ac.jp/ja/faculty-of-lettersja/002-006/pdf/curryhoward2.pdf
793デフォルトの名無しさん
2021/04/05(月) 18:23:16.33 関数の名前が被るとき、このモジュールのそれだと修飾しますが、
今書いてる翻訳単位のそれだと伝えるには今書いてるモジュール名で修飾するしかないのですか?
それが長大な場合惨めな気持ちになります
qualified 今書いているモジュール名 as 短い名前
にするような事はできないのですか?
今書いてる翻訳単位のそれだと伝えるには今書いてるモジュール名で修飾するしかないのですか?
それが長大な場合惨めな気持ちになります
qualified 今書いているモジュール名 as 短い名前
にするような事はできないのですか?
794デフォルトの名無しさん
2021/04/05(月) 21:28:27.96ID:DOv0Oh8v idrisを使った型駆動設計の話を聞いて、凄いなぁと思いました。
でもこの型駆動設計って、依存型が開発言語のあるのが前提の方法なんでしょうか?
でもこの型駆動設計って、依存型が開発言語のあるのが前提の方法なんでしょうか?
795デフォルトの名無しさん
2021/04/05(月) 22:48:33.31ID:RKVG1ya/ >>793
今書いている翻訳単位で import しているモジュールを qualified で装飾すれば、
今書いている翻訳単位内で定義している同名の関数は修飾せずとも使えると思うのですが、どうですか?
module Main where
import qualifued Data.List as L
transpose :: (Int, Int) -> (Int, Int)
transpose (x, y) = (y, x)
main :: IO ()
main = do
let a = L.transpose [[1, 2], [3, 4]]
let b = transpose (1, 2)
putStrLn $ show a ++ " / " ++ show b
今書いている翻訳単位で import しているモジュールを qualified で装飾すれば、
今書いている翻訳単位内で定義している同名の関数は修飾せずとも使えると思うのですが、どうですか?
module Main where
import qualifued Data.List as L
transpose :: (Int, Int) -> (Int, Int)
transpose (x, y) = (y, x)
main :: IO ()
main = do
let a = L.transpose [[1, 2], [3, 4]]
let b = transpose (1, 2)
putStrLn $ show a ++ " / " ++ show b
796デフォルトの名無しさん
2021/04/06(火) 12:32:00.21 >>795
値コンストラクタ名に被りがあった場合、それができないようなのです
import モジュールの側の同名値コンストラクタを、qualifiedして修飾しましたので今書いてるモジュールの方を修飾なしで書いたのですが
それはAmbiguousだと怒られます
値コンストラクタ名に被りがあった場合、それができないようなのです
import モジュールの側の同名値コンストラクタを、qualifiedして修飾しましたので今書いてるモジュールの方を修飾なしで書いたのですが
それはAmbiguousだと怒られます
797デフォルトの名無しさん
2021/04/06(火) 20:13:47.61ID:sYlI8eNJ ホントだ
怒られた
import qualified Data.Bool as B
data MyBool = True | False
instance Show MyBool where
show Main.True = "MyTrue"
show Main.False = "MyFalse"
main = do
print B.True
print Main.True
--print True ←ダメだって
怒られた
import qualified Data.Bool as B
data MyBool = True | False
instance Show MyBool where
show Main.True = "MyTrue"
show Main.False = "MyFalse"
main = do
print B.True
print Main.True
--print True ←ダメだって
798デフォルトの名無しさん
2021/04/06(火) 20:14:29.60ID:VZ4U19ap そりゃそうでしょうよ・・
799デフォルトの名無しさん
2021/04/06(火) 20:30:15.84ID:O0PfwEM6 曖昧さ無く無い?なんでダメなんだっけ
800デフォルトの名無しさん
2021/04/06(火) 20:31:09.67ID:xR67cG4d Prelude が暗黙的に居るから?
801デフォルトの名無しさん
2021/04/06(火) 21:08:36.42ID:sYlI8eNJ802デフォルトの名無しさん
2021/04/06(火) 22:30:07.58ID:sYlI8eNJ いや>>800さんの言う通りだったかな?
コレ↓は通る
BoolがダメだったのはPreludeで読んでたからだな
ちゃんと修飾なしの場合Main moduleのコンストラクタが選ばれてる
import qualified System.Exit as S
data MyExitCode = ExitSuccess | ExitFailure Int
instance Show MyExitCode where
show ExitSuccess = "MyExitSuccess"
show ( ExitFailure x ) = "MyExitFailure " ++ ( show x )
main = do
print ExitSuccess
print S.ExitSuccess
print $ ExitFailure 12
print $ S.ExitFailure 12
コレ↓は通る
BoolがダメだったのはPreludeで読んでたからだな
ちゃんと修飾なしの場合Main moduleのコンストラクタが選ばれてる
import qualified System.Exit as S
data MyExitCode = ExitSuccess | ExitFailure Int
instance Show MyExitCode where
show ExitSuccess = "MyExitSuccess"
show ( ExitFailure x ) = "MyExitFailure " ++ ( show x )
main = do
print ExitSuccess
print S.ExitSuccess
print $ ExitFailure 12
print $ S.ExitFailure 12
803デフォルトの名無しさん
2021/04/06(火) 22:52:08.72ID:vUIEomdt >>796
エラーメッセージは省略せずに書いてほしい
エラーメッセージは省略せずに書いてほしい
804デフォルトの名無しさん
2021/04/07(水) 15:24:37.74 module BinaryRepresentation.Word8 (
BiRep8( Rep)
)
where
import Data.Word( Word8)
newtype BiRep8 = Rep Word8
instance Show BiRep8 where
show a = show' 8 a ""
where
show' 0 _ s = s
show' count (Rep w8) s =
let
(q,r) = w8 `quotRem` 2
in
show' (count-1) (Rep q) (r `shows` s)
---------↑binary_representation8.hs-----------------------------
BiRep8( Rep)
)
where
import Data.Word( Word8)
newtype BiRep8 = Rep Word8
instance Show BiRep8 where
show a = show' 8 a ""
where
show' 0 _ s = s
show' count (Rep w8) s =
let
(q,r) = w8 `quotRem` 2
in
show' (count-1) (Rep q) (r `shows` s)
---------↑binary_representation8.hs-----------------------------
805デフォルトの名無しさん
2021/04/07(水) 15:24:59.63 module BinaryRepresentation.IPAddress(
IPv4Address,
BiRepIPv4Address( Rep),
makeIPv4
) where
import Data.Word( Word8)
import Data.List( intersperse)
import BinaryRepresentation.Word8( BiRep8( Rep))
import qualified BinaryRepresentation.Word8 as Bi8
newtype IPv4Address = A (Word8, Word8, Word8, Word8)
ipshow::Show s=> (Word8->s) -> [Word8] -> String
ipshow f list = concat . intersperse "." $ (show . f) <$> list
instance Show IPv4Address where
show (A (_1,_2,_3,_4)) = ipshow id [_1,_2,_3,_4]
newtype BiRepIPv4Address = Rep IPv4Address
instance Show BiRepIPv4Address where
show (Rep (A (_1,_2,_3,_4)))
=
ipshow Bi8.Rep [_1,_2,_3,_4]
makeIPv4::Word8 -> Word8 -> Word8 -> Word8 -> IPv4Address
makeIPv4 _1 _2 _3 _4 = A (_1, _2, _3, _4)
-----------↑binary_representation_ipv4.hs------------------------
IPv4Address,
BiRepIPv4Address( Rep),
makeIPv4
) where
import Data.Word( Word8)
import Data.List( intersperse)
import BinaryRepresentation.Word8( BiRep8( Rep))
import qualified BinaryRepresentation.Word8 as Bi8
newtype IPv4Address = A (Word8, Word8, Word8, Word8)
ipshow::Show s=> (Word8->s) -> [Word8] -> String
ipshow f list = concat . intersperse "." $ (show . f) <$> list
instance Show IPv4Address where
show (A (_1,_2,_3,_4)) = ipshow id [_1,_2,_3,_4]
newtype BiRepIPv4Address = Rep IPv4Address
instance Show BiRepIPv4Address where
show (Rep (A (_1,_2,_3,_4)))
=
ipshow Bi8.Rep [_1,_2,_3,_4]
makeIPv4::Word8 -> Word8 -> Word8 -> Word8 -> IPv4Address
makeIPv4 _1 _2 _3 _4 = A (_1, _2, _3, _4)
-----------↑binary_representation_ipv4.hs------------------------
806デフォルトの名無しさん
2021/04/07(水) 15:25:15.94 [2 of 2] Compiling BinaryRepresentation.IPAddress ( binary_representation_ipv4.hs, binary_representation_ipv4.o )
binary_representation_ipv4.hs:24:11: error:
Ambiguous occurrence ‘Rep’
It could refer to
either ‘BinaryRepresentation.Word8.Rep’,
imported from ‘BinaryRepresentation.Word8’ at binary_representation_ipv4.hs:8:36-47
or ‘BinaryRepresentation.IPAddress.Rep’,
defined at binary_representation_ipv4.hs:21:28
|
24 | show (Rep (A (_1,_2,_3,_4)))
| ^^^
------------------------------------------------
意図:Word8 値を01表記で表現するモジュールを作り、それを用いてIPv4アドレスを01表記で表現する
問題:binary_representation_ipv4.hs のRepが、binary_representation8.hs のRepと被りAmbiguousである
判明しているワークアラウンド:24行目のRep を BinaryRepresentation.IPAddress.Rep という糞ダサコードへ書き換える
望む事:修飾せずに済ますか、短い修飾で済ませたい
binary_representation_ipv4.hs:24:11: error:
Ambiguous occurrence ‘Rep’
It could refer to
either ‘BinaryRepresentation.Word8.Rep’,
imported from ‘BinaryRepresentation.Word8’ at binary_representation_ipv4.hs:8:36-47
or ‘BinaryRepresentation.IPAddress.Rep’,
defined at binary_representation_ipv4.hs:21:28
|
24 | show (Rep (A (_1,_2,_3,_4)))
| ^^^
------------------------------------------------
意図:Word8 値を01表記で表現するモジュールを作り、それを用いてIPv4アドレスを01表記で表現する
問題:binary_representation_ipv4.hs のRepが、binary_representation8.hs のRepと被りAmbiguousである
判明しているワークアラウンド:24行目のRep を BinaryRepresentation.IPAddress.Rep という糞ダサコードへ書き換える
望む事:修飾せずに済ますか、短い修飾で済ませたい
807デフォルトの名無しさん
2021/04/07(水) 15:51:36.65ID:6KWn3Zlg import BinaryRepresentation.Word8( BiRep8( Rep))
↑これ何?消せば?
↑これ何?消せば?
808デフォルトの名無しさん
2021/04/07(水) 18:16:48.26 はわわ。。。通りました
下手にimport書いたせいで通らなくなるとかあるんですね
蛇足importと名付けて教訓にします。ありがとうございました
下手にimport書いたせいで通らなくなるとかあるんですね
蛇足importと名付けて教訓にします。ありがとうございました
809デフォルトの名無しさん
2021/04/07(水) 23:07:15.55ID:PA0bBjRm >>808
勘でコード書いてるのかよw
勘でコード書いてるのかよw
810デフォルトの名無しさん
2021/04/13(火) 20:07:55.95ID:WnmkLZut811デフォルトの名無しさん
2021/04/16(金) 21:11:12.10ID:trr1lKH1 "http2" library v3.0.0 in Haskell has been released
812デフォルトの名無しさん
2021/04/16(金) 21:38:11.49ID:gUR6Epkt >>794
型駆動開発(TDD)はidris作者が本出してるけどそれのことかいな?
であれば予想してるように依存型前提よ
パターンマッチはデータ構築子に沿って分解してるだけだから
(x:xs)だけじゃなくて(xs++[x])でパターンマッチできるようにSQLよろしく型レベルのウインドウ関数つくりましょう
IDEにコード生成させましょう
とかって大変楽しい本だった
型駆動開発(TDD)はidris作者が本出してるけどそれのことかいな?
であれば予想してるように依存型前提よ
パターンマッチはデータ構築子に沿って分解してるだけだから
(x:xs)だけじゃなくて(xs++[x])でパターンマッチできるようにSQLよろしく型レベルのウインドウ関数つくりましょう
IDEにコード生成させましょう
とかって大変楽しい本だった
813デフォルトの名無しさん
2021/04/17(土) 18:14:21.16ID:+4ymujjn リストを使って漸化式
r_n = max_{1 <= i < n} (p_i + r_{n-i}), r_0 = 0
を解くプログラムを書いたのですがリストをArrayに変えたとたん動かなくなりました
どうやらmax'にifが使われているのが原因のようなのですが動かなくなる理由が分かりません
どなたか分かる方いますか?
プログラムは以下の通りです
import Data.Array
p = [1,5,8,9,10,17,17,20,24,30]
max' (i,q) (i',q') = if q < q' then (i',q') else (i,q)
solver p = array (0,length p) $ (0,0):[ -- 動かない
foldr1 max' [(i, p !! (i-1) + rs ! (j-i)) | i <- [1..j]]
| j <- [1..length p]
] where rs = solver p
solver' p = (0,0):[ -- 動く
foldr1 max' [(i, p !! (i-1) + (snd $ rs' !! (j-i))) | i <- [1..j]]
| j <- [1..length p]
] where rs' = solver' p
r_n = max_{1 <= i < n} (p_i + r_{n-i}), r_0 = 0
を解くプログラムを書いたのですがリストをArrayに変えたとたん動かなくなりました
どうやらmax'にifが使われているのが原因のようなのですが動かなくなる理由が分かりません
どなたか分かる方いますか?
プログラムは以下の通りです
import Data.Array
p = [1,5,8,9,10,17,17,20,24,30]
max' (i,q) (i',q') = if q < q' then (i',q') else (i,q)
solver p = array (0,length p) $ (0,0):[ -- 動かない
foldr1 max' [(i, p !! (i-1) + rs ! (j-i)) | i <- [1..j]]
| j <- [1..length p]
] where rs = solver p
solver' p = (0,0):[ -- 動く
foldr1 max' [(i, p !! (i-1) + (snd $ rs' !! (j-i))) | i <- [1..j]]
| j <- [1..length p]
] where rs' = solver' p
814デフォルトの名無しさん
2021/04/17(土) 18:16:48.86ID:+4ymujjn 動かないと言うのはghciに入力すると結果がいつまで経っても出力されない状況を指します
815デフォルトの名無しさん
2021/05/09(日) 10:31:13.12ID:y0UqG5zB なんでみんなhaskellでアプリ作らないの?
816デフォルトの名無しさん
2021/05/09(日) 13:13:30.99 すいません、Microsoft TrueSkill レーティングシステムのHaskell実装を探しているのですが見つかりません
イロレーティングとグリコレーティングしかありません
TrueSkillを実装したライブラリを知ってる方がいたら教えてください
イロレーティングとグリコレーティングしかありません
TrueSkillを実装したライブラリを知ってる方がいたら教えてください
817デフォルトの名無しさん
2021/05/09(日) 22:22:49.79ID:HZ/HWpqa Haskellでアプリ作ろうにもopenglくらいしかまともなバインディングないんじゃなかったっけ?
じぶんでラップするのだるいし
おれはもうf#で作ることにしたよ
じぶんでラップするのだるいし
おれはもうf#で作ることにしたよ
818デフォルトの名無しさん
2021/05/09(日) 22:24:00.80ID:HZ/HWpqa あ、デスクトップアプリのことだと思ってたけど違うんかね
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- 高市早苗「……なんて言ってみたw」中国「なんだ、言ってみただけかw」👈これで全部元通りになるという事実 [782460143]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- んなっしょい🍬禁止🈲のお🏡
- 映画「ゼルダの伝説」、リンクとゼルダ姫が白人になってしまう。日本のものは日本人だろうが!! [592058334]
