関数型プログラミング言語 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:L6eYQqyh742デフォルトの名無しさん
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 あ、デスクトップアプリのことだと思ってたけど違うんかね
819デフォルトの名無しさん
2021/05/10(月) 00:08:10.35ID:fW0+gsWX パターンマッチでRustみたいに
match x {
Some(SeqCst)=>true,
Some(Relaxed)=>true,
_=>false
}
を
match x {
Some(SeqCst|Relaxed)=>true,
_=>false
}
って感じで書く方法ってある?
match x {
Some(SeqCst)=>true,
Some(Relaxed)=>true,
_=>false
}
を
match x {
Some(SeqCst|Relaxed)=>true,
_=>false
}
って感じで書く方法ってある?
820デフォルトの名無しさん
2021/05/10(月) 05:06:07.73ID:XvUHL9Z9 haskellでmatchってあるの?
821デフォルトの名無しさん
2021/05/11(火) 11:45:43.79ID:cKOIjnA7 >>820
標準ライブラリにはないけどhackageとかにはある
https://hackage.haskell.org/package/regex-compat-0.95.2.1/docs/Text-Regex.html
解説も転がってる
https://sirocco.hatenadiary.org/entry/20090416/1239852340
標準ライブラリにはないけどhackageとかにはある
https://hackage.haskell.org/package/regex-compat-0.95.2.1/docs/Text-Regex.html
解説も転がってる
https://sirocco.hatenadiary.org/entry/20090416/1239852340
822デフォルトの名無しさん
2021/05/11(火) 11:48:38.64ID:cKOIjnA7 あ、matchって正規表現のmatchじゃなくて?
質問内容がふわふわしすぎで何がしたいのかさっぱり分からん
質問内容がふわふわしすぎで何がしたいのかさっぱり分からん
823デフォルトの名無しさん
2021/05/11(火) 11:53:57.18ID:+XHXxVLE すまん自己解決したわ
or patternsのことを言ってたんだけどissueに上がってるだけで未実装っぽい
https://gitlab.haskell.org/ghc/ghc/-/issues/3919
or patternsのことを言ってたんだけどissueに上がってるだけで未実装っぽい
https://gitlab.haskell.org/ghc/ghc/-/issues/3919
824デフォルトの名無しさん
2021/05/14(金) 16:46:12.69 時期に ARM CPUを載せた端末で 走る Haskell 製ソフトを公式に吐き出せるようになるんです?
825デフォルトの名無しさん
2021/05/15(土) 10:53:50.63ID:NqYfkIUy CPUとHaskellって
まるで中世からいきなりポストモダンに飛んでるみたいな世界観だな
まるで中世からいきなりポストモダンに飛んでるみたいな世界観だな
826デフォルトの名無しさん
2021/05/15(土) 11:35:40.38ID:DozosAnh たとえばC言語習いたての難しいと思う理由は、
コンピューターならこれくらいできるだろうと思ってた所に全然届いてなくて
そこを全部自分で埋めなきゃならないことを認識するのに時間がかかること
代数的なHaskewllがデフォならすんなり学習できるかもな
逆に今はCに適応しすぎてHaskellに苦労する
コンピューターならこれくらいできるだろうと思ってた所に全然届いてなくて
そこを全部自分で埋めなきゃならないことを認識するのに時間がかかること
代数的なHaskewllがデフォならすんなり学習できるかもな
逆に今はCに適応しすぎてHaskellに苦労する
827デフォルトの名無しさん
2021/05/15(土) 12:48:56.18ID:NqYfkIUy828デフォルトの名無しさん
2021/05/21(金) 15:54:58.85 長く時間がかかるプログラムを走らせた時、タスクマネージャーを眺めると、少数のコアに高負荷、残り全コアに低負荷がかかってるみたいなのですが
実行時に使用コア数は指定していないことから推測すると、ガベコレは全コアで稼働するってことでしょうか?
実行時に使用コア数は指定していないことから推測すると、ガベコレは全コアで稼働するってことでしょうか?
829デフォルトの名無しさん
2021/05/22(土) 13:34:14.84ID:hkOb3/u2 Haskellのは単にシングルスレッドで回収してるだけだぞ
830デフォルトの名無しさん
2021/05/22(土) 20:46:21.69 え、じゃあなんで全コア低負荷になったんだろ・・・
数分毎に階段のようにRAM使用量が数GBずつ増えて行って
長い処理が終了する直前に全コアフル稼働になって、直後に処理終了になったから
ガベコレが関与してると思ったんですがね
数分毎に階段のようにRAM使用量が数GBずつ増えて行って
長い処理が終了する直前に全コアフル稼働になって、直後に処理終了になったから
ガベコレが関与してると思ったんですがね
831デフォルトの名無しさん
2021/05/22(土) 21:35:55.30ID:aaz7cUPO サンクが溜まってって最後に遅延してそれらを評価したのでは
というかパフォーマンスの話は変に予測立てたり先入観あったりするとろくなことないからもっと詳細にプロファイリングしたほうが
というかパフォーマンスの話は変に予測立てたり先入観あったりするとろくなことないからもっと詳細にプロファイリングしたほうが
832デフォルトの名無しさん
2021/05/22(土) 21:58:08.22ID:Up5XEM4X ガベコレ以外に考えられる原因が2つぐらいあったら
ガベコレが原因である確率は1/3ぐらいだから
2/3の方が勝ちそう
ガベコレが原因である確率は1/3ぐらいだから
2/3の方が勝ちそう
833デフォルトの名無しさん
2021/05/29(土) 14:13:39.92ID:SnGl3AHf win10でstackとかghcそのものは正常に入るんたけどパッケージのコンパイルが絡んでくるとどうも文字コードが原因でコケる
LANG=asciiにすると挙動が変わってくるんだけど、何にしとくのが正解なんだろ
LANG=asciiにすると挙動が変わってくるんだけど、何にしとくのが正解なんだろ
834デフォルトの名無しさん
2021/05/29(土) 16:46:49.24ID:1zrkc3qO 100万要素の配列の1要素を更新するために配列の再作成が必要?
https://www.quora.com/Is-Haskell-as-fast-as-C++-If-not-why-not/answer/James-Hollis-19
> Haskell naturally operates on lists, but is rather awkward with arrays. Pure functions do not modify their input, so a pure function that changes one element of a million element array will copy 999,999 elements into a second array and return that. You can get around this with monads, but you end up writing imperative code in something that is less flexible than real imperative code.
これをモナドとアクションで解決できる?どうやるのか?
https://www.quora.com/Is-Haskell-as-fast-as-C++-If-not-why-not/answer/James-Hollis-19
> Haskell naturally operates on lists, but is rather awkward with arrays. Pure functions do not modify their input, so a pure function that changes one element of a million element array will copy 999,999 elements into a second array and return that. You can get around this with monads, but you end up writing imperative code in something that is less flexible than real imperative code.
これをモナドとアクションで解決できる?どうやるのか?
835デフォルトの名無しさん
2021/05/30(日) 20:49:58.16ID:QwiNWDL1 STArrayなりMutable Vectorなり使えば良いのでは
836デフォルトの名無しさん
2021/05/30(日) 22:25:02.60ID:F1Ogq3BP Unsafe でok
所詮物理的にはハードウェア上で動いてるのだから、
副作用なしなんてただの幻想よ
所詮物理的にはハードウェア上で動いてるのだから、
副作用なしなんてただの幻想よ
837デフォルトの名無しさん
2021/05/31(月) 09:29:30.68ID:O6iiWxP2 副作用の意味を勘違いしていないといいのだけれど・・・
838デフォルトの名無しさん
2021/05/31(月) 10:43:40.87ID:xvi5eoqv Rustと同じように、どうにかして型を弱くすれば副作用は好きなだけ使えるよ
839デフォルトの名無しさん
2021/06/01(火) 02:01:57.33ID:4I1ndF8a IOモナドやSTモナドの中でファイル操作したり現在時刻取って来たりしても問題無いわけだしわざわざ型犠牲にしなくても良いんじゃない
840デフォルトの名無しさん
2021/06/01(火) 10:15:13.07ID:UuHFoCEt 書き方が何通りもあってコンパイルが通るのは客観的事実だよ
そんな書き方しなくても良いというのはまあ政治的にはそうなるわけだが
コンパイルエラーにならないのに、バラモンみたいな人間に色々言われると混乱しやすい
そんな書き方しなくても良いというのはまあ政治的にはそうなるわけだが
コンパイルエラーにならないのに、バラモンみたいな人間に色々言われると混乱しやすい
841デフォルトの名無しさん
2021/06/01(火) 22:12:35.15ID:HETOiJgb 自然に書いたhaskellコードが極端に遅いという2018年の記事
https://pl-rants.net/posts/haskell-vs-go-vs-ocaml-vs/
https://pl-rants.net/posts/haskell-vs-go-vs-ocaml-vs/
842デフォルトの名無しさん
2021/06/03(木) 20:42:08.53ID:/+9iJa2F >>833
自己解決
language-javascriptパッケージのソースのコメントに∉記号がutf8で入ってて、環境によっては違うエンコードで読み込んでエラーになるっぽい
誰かが開発者にワークアラウンドとしてコメントをasciiで書き直してくれとリクエストしてたけど、ビルド環境を整えるのはstackの仕事だから俺は知らんと一蹴されてた
まぁそりゃそうなんだけどさ...
自己解決
language-javascriptパッケージのソースのコメントに∉記号がutf8で入ってて、環境によっては違うエンコードで読み込んでエラーになるっぽい
誰かが開発者にワークアラウンドとしてコメントをasciiで書き直してくれとリクエストしてたけど、ビルド環境を整えるのはstackの仕事だから俺は知らんと一蹴されてた
まぁそりゃそうなんだけどさ...
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 中国高官と話す外務省局長の表情、やばい [175344491]
- 港区、中国に宣戦布告 中国外務省をおちょくる掲示物を展示 [175344491]
- 【ほんこん悲報】吉本新喜劇の中国公演が中止に! [523957489]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
