1 名前:デフォルトの名無しさん [2020/02/10(月) 18:17:36 ID:L6eYQqyh.net] 関数型プログラミング言語 Haskell について語るスレです。 Haskell Language(公式サイト) https://www.haskell.org/ 日本Haskellユーザーグループ - Haskell-jp https://haskell.jp/ 前スレ 関数型プログラミング言語Haskell Part32 https://mevius.5ch.net/test/read.cgi/tech/1548720347/
764 名前:デフォルトの名無しさん mailto:sage [2021/02/16(火) 15:32:43.34 ID:VICwQMLs.net] >>755 そっちの方が遥に良いですね… ありがとうございます
765 名前:デフォルトの名無しさん mailto:sage [2021/02/17(水) 14:02:08.57 ID:YPZ4jTJ4.net] map f [1,1,1,2]のように重複の多いリストがあったら fの実装を変える勢力とリストの構造を変える勢力の争いをどうやって解決できるか気になる
766 名前:デフォルトの名無しさん mailto:sage [2021/02/17(水) 16:20:43.74 ID:mAFPwKeZ.net] 一回Set型にしてからListに戻す
767 名前:デフォルトの名無しさん mailto:sage [2021/02/17(水) 16:22:11.25 ID:mAFPwKeZ.net] もちろんリストの要素の個数減って良い場合の話だけど
768 名前:デフォルトの名無しさん mailto:sage [2021/02/17(水) 22:40:59.85 ID:0SJ3Yct4.net] >>757 具体的な問題状況(例)が示されなければ、次のような何にでも当てはまる 至極当たり前のつまらない回答しかできないと思うが。 目的、開発リソース(時間や設備、資料、費用など)、 開発者の能力やモチベーション、メンテの容易さなどを、 優先順位を考慮したうえで出来るだけ客観的に評価し決定する。 争うということは、優先順位や評価基準が定まっていないということなので、 まずはそれらを話し合って、あるいは上の立場の者がバシッと決める。
769 名前:デフォルトの名無しさん mailto:sage [2021/02/18(木) 09:29:03.36 ID:8Wc99cSo.net] なんかしょうもない話なんですけどウチの環境で次が通ります test x = case x of _ | odd x -> 1 oyherwise -> 0 main = do print $ test 123 print $ test 456 なんか笑ってしまいました
770 名前:デフォルトの名無しさん mailto:sage [2021/02/18(木) 09:31:00.46 ID:8Wc99cSo.net] あ、イヤ違う 勘違いでした すいません
771 名前:デフォルトの名無しさん mailto:sage [2021/02/18(木) 10:58:11.75 ID:jy6gqPJ4.net] >>760 客観的な目的というのは難しすぎて誰にも分からない 例えば個人的な借金を減らすことと国の借金を減らすことはどちらが客観的目的か そうではなく、目的は主観で決めてOKというなら それは結構面白い答えであって、つまらない答えではない
772 名前:デフォルトの名無しさん mailto:sage [2021/02/18(木) 11:50:05.23 ID:6bd12mxo.net] >>763 言葉が足りず、誤解させたようで申し訳ない。 客観的に行うのは、目的を定めることではなくて、 今やろうとしている事が定めた目的に合っているのか評価すること。 fの実装を変えることが目的に合っているのか、 それともリスト構造を変える方がより合っているのか。 目的というのは様々あるよね。 見聞きした新しい技術をラフに評価するための トイプログラムを作ることが目的だったり、 次のリリースでメモリ使用量を10%削減することだったり。 客観的に評価することを意識しないと、気分や雰囲気に流されて、 メモリ使用量を抑える目標が、いつの間にか処理速度向上にすり替わってたりする。 また、目標は評価する一項目にすぎない。 リリース時期を守る方が優先順位が高い状況もある。 だから、もろもろ含めて客観的に評価する。 逆にそうじゃないと、fとリストどちらを変えるのかなんて、決めようがないと思う。
773 名前:名無しさん mailto:sage [2021/02/18(木) 15:29:22.47 ID:jy6gqPJ4.net] >>764 気分や雰囲気に流されまくるまで想定しておくのが良い作戦だよ 流されないように対策するので想定する必要はないみたいな理屈は危ない
774 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 20:48:36.35 ID:zWeVIvWn.net] ある対象がモノイドかどうかを問う質問です。 2つのリストのうち要素の少ない方のリストをそのまま返す、 同じ要素数ならば左側のリストをそのまま返す関数 f :: [a] -> [a] -> [a] があるとします。 ここで、ある型aのリスト全体の集合[a]と、その上の二項演算fとの組([a], f)はモノイドを成すでしょうか。 私は次のように、これはモノイドではないと考えます。 このモノイド性を考えるとき、その単位元の候補として、 もし集合に無限リストを含めないのならば最大要素数のリストを、 無限リストを含めるのであれば無限リストを取ります。 他に考えようがありません。 しかし、どちらにしても単位元の一意性が証明できません。 xs、ys 共に最大要素数のリスト、あるいは無限リストであり、かつ xs /= ys を満たすものは(型aによっては)いくらでもあります。 よって、([a], f) はモノイドではないと考えますが、これは正しいでしょうか。 モノイドの定義に照らし合わせるのではなく、 モノイドならば証明できるであろう定理が証明できないことに因っているのが、 なんとも気持ち悪いのですが・・・ そもそもモノイド性を問うには ([a], f) の定義が曖昧なのでしょうか。
775 名前:デフォルトの名無しさん mailto:sage [2021/02/25(木) 21:30:50.20 ID:hQOL6Vl7.net] モノイドではないに一票
776 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 01:35:18.34 ID:7R2bTCy0.net] リストには同じ要素が何個も入ってもいいんだから単位元になり得るのは無限リストだけでしょ ある無限リストを単位元eとするしかなさそう ここでもう1つ無限リストaを用意してf a eしたらa返さずに要素の個数比較する時点で⊥になるからモノイドにならないと思う
777 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 02:07:21.86 ID:Drny41hT.net] 型は集合ではない 値は元ではない プログラム上の関数は数学的な意味での関数ではない Haskellは数学ではない
778 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 10:03:43.32 ID:W2dsUZYE.net] モノイドでも集合論でも、公理が多過ぎて公理が偽になるなら 公理を減らせばいいじゃん
779 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 10:24:37.14 ID:nFSf/y++.net] >>766 まず単位元の定義から、esが[a]の単位元であるなら、任意のxsに対して f es xs == xs f xs es == xs を満たす、というところはいいよね(ゆえにesは、任意のxsより要素数が大きくなければいけない) このことから直接非存在を言う方がこの場合は明快だと思うけど、 「ある要素が単位元ならばそれが一意である」はすぐに言えるから 背理法により単位元が存在しない、でも正しい論証だと思う もしこの演算fに対してモノイドを構成するなら、 (>>768 とほぼ同じことを言うが) length es == ∞ なる要素を1つ決めて (全ての有限リスト) ∪ {es} みたいな集合の上でなら言えそう ちゃんと見てないけど結合律もそれっぽく振る舞ってそう [] [ここ壊れてます]
781 名前:デフォルトの名無しさん mailto:sage [2021/02/26(金) 11:29:42.18 ID:s/eVhYHX.net] >>768 >>771 お二方の意見を参考に、もう一度よく考えてみます。 ありがとうございました。
782 名前:デフォルトの名無しさん [2021/03/14(日) 16:53:23.31 ID:XMH1AJguA] アプリの視聴率がわかる 高専卒起業家の独創力 https://www.nikkei.com/article/DGXMZO46695580Y9A620C1000000/ 1万人の若者を支援!インターンが日本を変えるかも!? glowshipの若き創業者・足立卓也氏インタビュー https://sogyotecho.jp/glowship-adachi-interview/ 起業で成功するキャリア形成の仕方とは? 元プロサッカー選手で起業家の鈴木啓祐氏に聞いた https://sogyotecho.jp/career-development/ 年収3,000万超え!?個人開発で儲かっている海外コミュニティサイト5選! https://note.com/taishikato/n/n7809a8ed3ffc 自分の視野は「世の中の0.001%」と自覚せよ。ビジネスチャンスを掴む4つの習慣 https://headlines.yahoo.co.jp/hl?a=20200511-00010001-srnijugo-life 人はこうすれば“ハマる”、源流はゲーマー視点の「幸せ」 https://project.nikkeibp.co.jp/behealth/atcl/feature/00005/012100006/ 誰もがオリジナルアプリを作れる時代へ。スタートアップ支援に尽力してきた起業家の原動力とは https://fukuoka.startupnews.jp/post/nappstechnologies/ 2年間で23億円を調達。22歳の社長が語る“スタートアップ起業” https://superceo.jp/tokusyu/manga/100736
783 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 15:12:33.23 ID:4AdjqCpZ.net] なんか最近プログラミングの情報ネットで漁ってると数学基礎論の記号らしきもの、横棒の上になんか命題らしき文字列が並んでる奴がめちゃめちゃ出てくるんですけど、完全に乗り遅れました なんかあの記号の意味解説してるいい教科書とかサイトとかありませんか?
784 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 19:10:51.45 ID:lKavXNN6.net] >>774 このような式ですか? P -> Q P -------------- Q これは、横線の上の論理式(この例の場合は2つの論理式)を前提とすると、 いくつかの推論規則を使えば横線の下の論理式が導ける、 という意味です。 論理学の教科書(的な解説サイト)ならレベルの高低に関わらずどれでも載っていますが、 どれでも式自体の意味についてはこの程度の説明しか無いと思いますよ。 例えば https://abelard.flet.keio.ac.jp/person/takemura/class/2013/3-print-nk.pdf 知りたいことが違っていたらごめんなさい。
785 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 19:28:09.20 ID:wWeTTUcP.net] >>775 ありがとうございます ギリギリその図形の意味はわかります 問題はそれとプログラミングの理論がどう関わってるかのとこなんです 多分カリーハワード対応というやつだと思うんですが コレなんか役に立つもんなんですかねぇ?
786 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 20:21:41.37 ID:lKavXNN6.net] >>776 めちゃめちゃ出てくるという事ですので、 そのページのURLをいくつか挙げてくれませんか。 そうすれば、もしかしたら、どう関わっているの把握できて、 説明、あるいは解説ページや書籍の紹介ができるかもしれません。
787 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 20:27:07.75 ID:gebFut6o.net] 例えばプログラムをリファクタリングするとき、修正前後での挙動一致を証明できたりするぞ すごい🤗 (依存型のないHaskellでは出来ないからidrisの例だけど) https://keens.github.io/blog/2020/12/22/idrisdeizongatawotsukattashoumeinyuumon/ やりたいことが数学/論理学の勉強とかならcoqのほうがよさげ
788 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 23:49:21.36 ID:wWeTTUcP.net] >>777 そうですね 例えばcall by nameとcall by needの違いを調べようと思った時に出てきた https://reader.elsevier.com/reader/sd/pii/S1571066104000222?token=1C1ACCAE69D33669B7D36179C932FC14DD80723B2FD5B3080E3B1EDED9228FC6A9A6AC347668843625B7154C276B7B4C なんかバリバリ出てきます なんのこっちゃと >>166 coqもよく聞きますよね なんかおすすめの教科書とかありますか?
789 名前:デフォルトの名無しさん mailto:sage [2021/03/19(金) 00:48:13.30 ID:H+hZ3f68.net] カリーハワード対応って要は True => True = True True => False = False False => True = True False => False = True が {単集合->単集合}=単集合 (単集合から単集合への写像は一通りだけ) {単集合->空集合}=空集合 (単集合から空集合への写像は存在しない) {空集合->単集合}=単集合 (空集合から任意の集合への写像は一通り(空写像)) {空集合->空集合}=単集合 (上に同じ) と対応してるって感じと捉えれば良いのかな? wikipedia読んでもあんまり理解できない
790 名前:デフォルトの名無しさん mailto:sage [2021/03/19(金) 01:58:47.96 ID:MuA020tT.net] 名前呼び出しの意味が分かりません
791 名前:デフォルトの名無しさん mailto:sage [2021/03/19(金) 02:07:37.96 ID:FHn+Zz2I.net] >>779 結局のところ知りたいことは何ですか? カリーハワード同型対応とプログラムとの関係性ですか? それとも、カリーハワード同型対応がプログラムの何に役立つのかですか? それとも、call by name と call by need との違いですか。 それとも、その論文の内容ですか。 (その場合、PDFの5ページ目まで、つまり横線の式が登場する部分まではちゃんと理解できていると思っていいのですか?) それとも、全く別のことですか? とりあえず知りたいことをピンポイントに小さく一つに絞り、 それを具体的に質問していただけると助かります。 ところで、>>781 は元の質問者さんですか?
792 名前:768 mailto:sage [2021/03/19(金) 02:15:59.36 ID:MuA020tT.net] >>782 ごめんなさい 僕は別人で割り込みです
793 名前:デフォルトの名無しさん mailto:sage [2021/03/19(金) 03:08:33.55 ID:FHn+Zz2I.net] >>783 遅延評価を実現する評価戦略の中に、必要呼び出し(call by need)と名前呼び出し(call by name)があります。 必要呼び出しはhaskellが採っている戦略で、 一度評価した値を使い回して無駄な呼び出しを防ぐものです。 一方、名前呼び出しは同じ遅延評価でも、評価した値を記憶せず、必要なら何度でも同じ評価処理をするものです。
794 名前:デフォルトの名無しさん mailto:sage [2021/03/19(金) 09:49:18.16 ID:pEtEADGt.net] >>782 そうですね 多分対応自体はわかると思います しかし実際カリーハワード対応で基礎論の世界に持って行くことの効用がよくわかりません 基礎論の世界に持っていって基礎論でよく知られたなんかの定理が使えるとかいうわけでもなさそうですし 最初はcall by needの実装の話、すなわちcall by needでは展開された評価式に同じexpressionが出たとき、その内容を保持して同じ評価を何度も繰り返すのを防ぐらしいですが、もちろんどんな評価でも何でもかんでもメモするわけではないようなので、結局自分で手前でメモ化する必要がでたりします どういう時はcall by needのメモ化が効いてどういう場合は効かないのかよくわからないので現状は“やってみる”しかないし、やってみて上手くいかなくても、なんか上手い書き方すればやってくれるのか、はなからだめなのか、その判別もつきません
795 名前:768 mailto:sage [2021/03/19(金) 11:58:13.56 ID:f7aaFMxN.net] >>784 ありがとうございます このときの「名前」なのですが、識別子のようなものでなく、評価・簡約前の「式の字面」的な意味なのですかね
796 名前:デフォルトの名無しさん mailto:sage [2021/03/19(金) 13:27:51.17 ID:5FIf9nG9.net] 静的型のアイデアは 実行時の世界でやっていたことをコンパイル時の世界に持って行くことだから このアイデアが常識にならない限り動的型の時代は終わらないだろう
797 名前:デフォルトの名無しさん mailto:sage [2021/03/20(土) 08:58:16.14 ID:Hmrg9tvu.net] >>785 プログラムの世界において、ある事柄の性質や、事柄Aと事柄Bの間の関係を調べたいとき、 プログラムの世界の中ではなかなかうまく見えてこない場合がある。 そんなとき、 カリーハワード同型対応によって問題を論理の世界に移すと、 見通しが良くなり、調べやすくなることがある。 そういう意味では役立ちます。 質問者さんが例示した論文がまさにそれです。 一方、何かを作るためにプログラムをする(現場の)人たちにとっては、とくに役立つことは無いと思います。 役立った話を一切聞きません。 質問者さんが、名前呼び出しなどの「性質や関係」を学術的に深く知りたくて調べているのであれば、役立つと思います。 自作のプログラム言語で名前呼び出しを実装したくて調べているのであれば、役立ちませんね。 別の論文に当たった方がいいと思います。
798 名前:デフォルトの名無しさん mailto:sage [2021/03/20(土) 09:35:36.64 ID:IEpiSEKy.net] >>788 そうなんですか 難しいですね haskell の call by need のシステムがどういう具合に実装されてるか調べようとするとほぼ確実にカリーハワード対応が出てきます ボチボチ勉強するしかなさそうですね そもそもcall by needのメモ化の話はhaskell コンパイラの実装の話なのでhaskellの言語自体のレギュレーションにはひとつも載ってない(つまりghcではメモ化が効いて早いけど別のシステムでは遅いという事もありうるし文句言えない)ので効くか効かないか試してみるしかないのが不愉快なんですよねえ
799 名前:デフォルトの名無しさん mailto:sage [2021/03/20(土) 10:00:16.31 ID:1F8CRKpv.net] >>789 それなら graph reduction の実装を調べた方が良いと思います。
800 名前:デフォルトの名無しさん mailto:sage [2021/03/20(土) 10:28:51.32 ID:Hmrg9tvu.net] >>786 すいません、call by name という名称の由来は分からないです。 いままで気にしたこともなかったです。
801 名前:768 mailto:sage [2021/03/20(土) 12:05:15.57 ID:WUxvQvbt.net] >>791 ありがとうございます こちらこそ、たびたびすみません マンガのセリフのことを「ネーム」というらしいので、書いた字面をいうのかなと考えたり name を和英・英英辞典で調べても、結局しっくりきませんでした スレ汚しすみませんでした
802 名前:デフォルトの名無しさん mailto:sage [2021/03/20(土) 14:58:31.86 ID:5ytd1i+3.net] カリーハワード同型対応とかって、機械学習だのアーキテクチャだのネットワークだのアルゴリズムだのといった工学的で応用的で目的意識の定まった何かの役に立つために発明されたものというよりも、理学的で基礎的な単なる重要な事実という雰囲気ある気がする
803 名前:デフォルトの名無しさん mailto:sage [2021/03/21(日) 00:15:43.04 ID:5CEWIvha.net] 貴金属と期限つきポイントの対立煽りにたとえる 使用期限がないのは使用目的がないと言っているようなもの だが期限がない方もメリットがあるのは工学的にも否定できない事実
804 名前:デフォルトの名無しさん mailto:sage [2021/03/22(月) 13:52:42.80 ID:gNDsQT3i.net] >>790 graph refuctionですか 調べてみます しかしともかく、じゃあGHCとかではどう実装されてるのかとかいう資料はかなりの割合で結局カリーハワード対応使ってる文献しか出てこないのがなんとも 当面は“やってみる”でやり過ごすしかなさそうです
805 名前:デフォルトの名無しさん mailto:sage [2021/03/22(月) 15:09:38.98 ID:UycYSiaC.net] call by name(仮)の正式名称がgraph reductionだったら カリーハワード対応(仮)にも正式名称がありそうだけど 訂正することで利益が出せるようにならなければ正式名称の価値も分からん
806 名前:デフォルトの名無しさん mailto:sage [2021/03/22(月) 19:37:04.72 ID:TV/B7jf8.net] >>795 私にはむしろカリーハワード同型対応を陽には使っていない資料しか見当たらないです。 検索キーワードや調べ方が違うのかもしれませんね。 (カリーハワード同型対応がさす意味がお互いに違っている可能性もありますが) この資料はどうでしょうか。 遅延評価をする関数型言語一般の実装方法です。 https://www.microsoft.com/en-us/research/uploads/prod/1987/01/slpj-book-1987.pdf
807 名前:デフォルトの名無しさん mailto:sage [2021/03/22(月) 20:29:59.10 ID:UycYSiaC.net] 例えばmonomorphism restrictionとかいうアレだったら 実行時の挙動ではなく型の話になるんじゃないか
808 名前:デフォルトの名無しさん mailto:sage [2021/03/23(火) 01:01:29.12 ID:HzbeYy7B.net] >>797 ありがとうございます 十章ですね 今度時間を見つけて読んでみます そうですね やっぱり私はGHC関連の資料をあたる事が多くて、やはりそこでは数学よりの資料が多いんでしょうね でもやはりcall by needの実装方法はHaskellのレギュレーションには含まれていない実装依存のところなのでGHC userの私はどうしてもGHC関連の資料から当たりたくなってしまいます GHCでのインプリメントは最新の成果が全て反映されてるとは限らないし、あるいはあまり一般的でない手法を用いているかもしれないし、そこはGHCそのものの資料が一番頼りになります ただ一つの問題はあまりにも数学村(の計算論畑)の言葉で書かれててサッパリわからんとこorz
809 名前:デフォルトの名無しさん mailto:sage [2021/03/23(火) 03:42:25.12 ID:VKgh9sH5.net] >>799 余計なお世話だとは思いますが、どの章もその前までの章の積み重ねなので、 第10章だけを読んで理解するのは難しいと思います。 かなり古い資料を提示したのは、基礎の基礎から学んだ方が良いと思ったからです。 この資料は本当に分かりやすく基礎から説明されているので、 急がば回れの精神で、腰を据えてじっくりと学んでみることをお勧めします。 それこそ数ヶ月かけて。 なんかこう、数学で例えるなら、集合論や解析学の基礎があやふやなまま、 位相空間論の必要な部分だけを都合よく学ぼうとしているような、 そんなきらいがあるように見えます。
810 名前:デフォルトの名無しさん mailto:sage [2021/03/23(火) 05:16:41.87 ID:EMfQwUjX.net] そうですか 残念ながら当方計算論はウルマンホップクラフトや西岡先生の教科書しか読んだことないのでかなり知識が数学サイドに寄ってます 仕事もかなり数学よりで計算論はあくまで趣味なのであまり本腰入れて勉強したことはないのでもしかしたら専門に勉強されてる方から見ればそうかもしれません まぁ本職に悪影響与えない範囲で時間見つけてボチボチ勉強します
811 名前:デフォルトの名無しさん mailto:sage [2021/03/23(火) 07:32:33.02 ID:e41TIwig.net] はっきり言うと評価戦略だとか推論規則だとかカリーハワード同型対応だとかの話は、まともな情報系の学部なら習う基礎基本 大学の講義資料が易しいと思われ
812 名前:デフォルトの名無しさん mailto:sage [2021/03/23(火) 20:57:46.65 ID:zFHE0Fu5.net] 情報系とかいう言い方をする奴は言語から逃げてるね 「数学村の言葉で書かれ」た資料が存在するのも C言語で書かれたOSの話をしないのも 言語から逃げた結果じゃないかな
813 名前:デフォルトの名無しさん mailto:sage [2021/03/24(水) 19:34:45.53 ID:8SYKHDut.net] 何言ってんだコイツ…
814 名前:デフォルトの名無しさん mailto:sage [2021/03/26(金) 00:15:16.59 ID:sjuSPGcx.net] カリー・ハワード同型対応はこのスライドが分かり易かった 結局なんで上手く行くのかって良く分かってないのね 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
815 名前:デフォルトの名無しさん [2021/04/03(土) 17:05:11.32 ID:K4bkjZP4q] ブログvs有料note!今稼ぐならどっちがオススメ?それぞれの特徴を紹介 https://www.youtube.com/watch?v=rFtHbM3dDXs 無名の僕が有料noteで100万円稼ぐまでの全過程【コツ3選を大公開】 https://www.youtube.com/watch?v=kLMXaMpb87A 素人でも稼げる!? 話題の「Brain」の仕組みを解説。 https://www.youtube.com/watch?v=nyelB1Gr_rE Noteを超えるか!?「Brain」の特徴と使い方を解説しました https://www.youtube.com/watch?v=GYyjfHVyAbs 有料noteやBrainで継続的に稼ぐ3つの方法【コンテンツ販売】 https://www.youtube.com/watch?v=d31w1Q5UtA4 Brainがめちゃくちゃ稼ぎやすい件について。 https://www.youtube.com/watch?v=pzRd2BEuIQU noteで47万円稼ぐまでにしたことまとめ https://www.youtube.com/watch?v=TTS6WWseUY0
816 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 18:23:16.33 .net] 関数の名前が被るとき、このモジュールのそれだと修飾しますが、 今書いてる翻訳単位のそれだと伝えるには今書いてるモジュール名で修飾するしかないのですか? それが長大な場合惨めな気持ちになります qualified 今書いているモジュール名 as 短い名前 にするような事はできないのですか?
817 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 21:28:27.96 ID:DOv0Oh8v.net] idrisを使った型駆動設計の話を聞いて、凄いなぁと思いました。 でもこの型駆動設計って、依存型が開発言語のあるのが前提の方法なんでしょうか?
818 名前:デフォルトの名無しさん mailto:sage [2021/04/05(月) 22:48:33.31 ID:RKVG1ya/.net] >>807 今書いている翻訳単位で 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
819 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 12:32:00.21 .net] >>809 値コンストラクタ名に被りがあった場合、それができないようなのです import モジュールの側の同名値コンストラクタを、qualifiedして修飾しましたので今書いてるモジュールの方を修飾なしで書いたのですが それはAmbiguousだと怒られます
820 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 20:13:47.61 ID:sYlI8eNJ.net] ホントだ 怒られた 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 ←ダメだって
821 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 20:14:29.60 ID:VZ4U19ap.net] そりゃそうでしょうよ・・
822 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 20:30:15.84 ID:O0PfwEM6.net] 曖昧さ無く無い?なんでダメなんだっけ
823 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 20:31:09.67 ID:xR67cG4d.net] Prelude が暗黙的に居るから?
824 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 21:08:36.42 ID:sYlI8eNJ.net] しかし>>809 は怒られない 関数とか値コンストラクタとかclass名とかそれぞれの名前空間でちょっとずつ管理法がずれてるんだな 理由は知らんけど
825 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 22:30:07.58 ID:sYlI8eNJ.net] いや>>814 さんの言う通りだったかな? コレ↓は通る 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
826 名前:デフォルトの名無しさん mailto:sage [2021/04/06(火) 22:52:08.72 ID:vUIEomdt.net] >>810 エラーメッセージは省略せずに書いてほしい
827 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:24:37.74 .net] 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-----------------------------
828 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:24:59.63 .net] 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------------------------
829 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:25:15.94 .net] [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 という糞ダサコードへ書き換える 望む事:修飾せずに済ますか、短い修飾で済ませたい
830 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 15:51:36.65 ID:6KWn3Zlg.net] import BinaryRepresentation.Word8( BiRep8( Rep)) ↑これ何?消せば?
831 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 18:16:48.26 .net] はわわ。。。通りました 下手にimport書いたせいで通らなくなるとかあるんですね 蛇足importと名付けて教訓にします。ありがとうございました
832 名前:デフォルトの名無しさん mailto:sage [2021/04/07(水) 23:07:15.55 ID:PA0bBjRm.net] >>822 勘でコード書いてるのかよw
833 名前:デフォルトの名無しさん [2021/04/12(月) 18:05:50.35 ID:rYLpZPiw+] 仕事が生きがい?会社員の分際で?そろそろ認めなさい…あなたたちは単なる駒です ⇒赤羽の父ひろゆきが教える仕事の本質とやりたいことの違いが凄過ぎて感動が止まらない… https://www.youtube.com/watch?v=zkwQOdq17dI 【ひろゆき/切り抜き】サラリーマンって資本主義の奴隷なの? https://www.youtube.com/watch?v=Vi-dvyd5ksE&t=74s 【ひろゆき】社会人語っちゃうサラリーマンについて語りました https://www.youtube.com/watch?v=pX7NHj_rIBg 奴隷は身近にある?日本の奴隷について【ひろゆき 切り抜き】 https://www.youtube.com/watch?v=evQjCUWIHV4 【ひろゆき】会社員なんて楽しくない?⇒楽しいしラクな仕事の仕方とは※サラリーマン必見! https://www.youtube.com/watch?v=T95-FS8sT3w&t=390s 【ひろゆき】日本のサラリーマン制度...終わってますよwww https://www.youtube.com/watch?v=Y-30zk2zDn0 【ひろゆき】視聴者の質問そっちのけで虚言癖アピールするひろゆき https://www.youtube.com/watch?v=cMjk9B4J2n4 【ひろゆき/切り抜き】虚言癖ってどうやって直せばいい? https://www.youtube.com/watch?v=5cS7vyb0tfE
834 名前:デフォルトの名無しさん mailto:sage [2021/04/13(火) 20:07:55.95 ID:WnmkLZut.net] >>822 > 下手にimport書いたせいで通らなくなるとかあるんですね ちょ・・・・
835 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 21:11:12.10 ID:trr1lKH1.net] "http2" library v3.0.0 in Haskell has been released
836 名前:デフォルトの名無しさん mailto:sage [2021/04/16(金) 21:38:11.49 ID:gUR6Epkt.net] >>808 型駆動開発(TDD)はidris作者が本出してるけどそれのことかいな? であれば予想してるように依存型前提よ パターンマッチはデータ構築子に沿って分解してるだけだから (x:xs)だけじゃなくて(xs++[x])でパターンマッチできるようにSQLよろしく型レベルのウインドウ関数つくりましょう IDEにコード生成させましょう とかって大変楽しい本だった
837 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 18:14:21.16 ID:+4ymujjn.net] リストを使って漸化式 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
838 名前:デフォルトの名無しさん mailto:sage [2021/04/17(土) 18:16:48.86 ID:+4ymujjn.net] 動かないと言うのはghciに入力すると結果がいつまで経っても出力されない状況を指します
839 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 10:31:13.12 ID:y0UqG5zB.net] なんでみんなhaskellでアプリ作らないの?
840 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 13:13:30.99 .net] すいません、Microsoft TrueSkill レーティングシステムのHaskell実装を探しているのですが見つかりません イロレーティングとグリコレーティングしかありません TrueSkillを実装したライブラリを知ってる方がいたら教えてください
841 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 22:22:49.79 ID:HZ/HWpqa.net] Haskellでアプリ作ろうにもopenglくらいしかまともなバインディングないんじゃなかったっけ? じぶんでラップするのだるいし おれはもうf#で作ることにしたよ
842 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 22:24:00.80 ID:HZ/HWpqa.net] あ、デスクトップアプリのことだと思ってたけど違うんかね
843 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 00:08:10.35 ID:fW0+gsWX.net] パターンマッチでRustみたいに match x { Some(SeqCst)=>true, Some(Relaxed)=>true, _=>false } を match x { Some(SeqCst|Relaxed)=>true, _=>false } って感じで書く方法ってある?
844 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 05:06:07.73 ID:XvUHL9Z9.net] haskellでmatchってあるの?
845 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 11:45:43.79 ID:cKOIjnA7.net] >>835 標準ライブラリにはないけどhackageとかにはある https://hackage.haskell.org/package/regex-compat-0.95.2.1/docs/Text-Regex.html 解説も転がってる https://sirocco.hatenadiary.org/entry/20090416/1239852340
846 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 11:48:38.64 ID:cKOIjnA7.net] あ、matchって正規表現のmatchじゃなくて? 質問内容がふわふわしすぎで何がしたいのかさっぱり分からん
847 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 11:53:57.18 ID:+XHXxVLE.net] すまん自己解決したわ or patternsのことを言ってたんだけどissueに上がってるだけで未実装っぽい https://gitlab.haskell.org/ghc/ghc/-/issues/3919
848 名前:デフォルトの名無しさん mailto:sage [2021/05/14(金) 16:46:12.69 .net] 時期に ARM CPUを載せた端末で 走る Haskell 製ソフトを公式に吐き出せるようになるんです?
849 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 10:53:50.63 ID:NqYfkIUy.net] CPUとHaskellって まるで中世からいきなりポストモダンに飛んでるみたいな世界観だな
850 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 11:35:40.38 ID:DozosAnh.net] たとえばC言語習いたての難しいと思う理由は、 コンピューターならこれくらいできるだろうと思ってた所に全然届いてなくて そこを全部自分で埋めなきゃならないことを認識するのに時間がかかること 代数的なHaskewllがデフォならすんなり学習できるかもな 逆に今はCに適応しすぎてHaskellに苦労する
851 名前:デフォルトの名無しさん mailto:sage [2021/05/15(土) 12:48:56.18 ID:NqYfkIUy.net] >>841 これくらいできるだろうというのは楽観的すぎて苦労するパターンだ 悲観的な方が認識に時間がかからない Cに適応しすぎているという認識は本当に正しいのか? ここでも楽観と悲観が対立する
852 名前:デフォルトの名無しさん mailto:sage [2021/05/21(金) 15:54:58.85 .net] 長く時間がかかるプログラムを走らせた時、タスクマネージャーを眺めると、少数のコアに高負荷、残り全コアに低負荷がかかってるみたいなのですが 実行時に使用コア数は指定していないことから推測すると、ガベコレは全コアで稼働するってことでしょうか?
853 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 13:34:14.84 ID:hkOb3/u2.net] Haskellのは単にシングルスレッドで回収してるだけだぞ
854 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 20:46:21.69 .net] え、じゃあなんで全コア低負荷になったんだろ・・・ 数分毎に階段のようにRAM使用量が数GBずつ増えて行って 長い処理が終了する直前に全コアフル稼働になって、直後に処理終了になったから ガベコレが関与してると思ったんですがね
855 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 21:35:55.30 ID:aaz7cUPO.net] サンクが溜まってって最後に遅延してそれらを評価したのでは というかパフォーマンスの話は変に予測立てたり先入観あったりするとろくなことないからもっと詳細にプロファイリングしたほうが
856 名前:デフォルトの名無しさん mailto:sage [2021/05/22(土) 21:58:08.22 ID:Up5XEM4X.net] ガベコレ以外に考えられる原因が2つぐらいあったら ガベコレが原因である確率は1/3ぐらいだから 2/3の方が勝ちそう
857 名前:デフォルトの名無しさん mailto:sage [2021/05/29(土) 14:13:39.92 ID:SnGl3AHf.net] win10でstackとかghcそのものは正常に入るんたけどパッケージのコンパイルが絡んでくるとどうも文字コードが原因でコケる LANG=asciiにすると挙動が変わってくるんだけど、何にしとくのが正解なんだろ
858 名前:デフォルトの名無しさん [2021/05/29(土) 16:46:49.24 ID:1zrkc3qO.net] 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 flex
859 名前:ible than real imperative code. これをモナドとアクションで解決できる?どうやるのか? [] [ここ壊れてます]
860 名前:デフォルトの名無しさん mailto:sage [2021/05/30(日) 20:49:58.16 ID:QwiNWDL1.net] STArrayなりMutable Vectorなり使えば良いのでは
861 名前:デフォルトの名無しさん mailto:sage [2021/05/30(日) 22:25:02.60 ID:F1Ogq3BP.net] Unsafe でok 所詮物理的にはハードウェア上で動いてるのだから、 副作用なしなんてただの幻想よ
862 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 09:29:30.68 ID:O6iiWxP2.net] 副作用の意味を勘違いしていないといいのだけれど・・・
863 名前:デフォルトの名無しさん mailto:sage [2021/05/31(月) 10:43:40.87 ID:xvi5eoqv.net] Rustと同じように、どうにかして型を弱くすれば副作用は好きなだけ使えるよ
864 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 02:01:57.33 ID:4I1ndF8a.net] IOモナドやSTモナドの中でファイル操作したり現在時刻取って来たりしても問題無いわけだしわざわざ型犠牲にしなくても良いんじゃない