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/
711 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 12:36:29.90 ID:UiZI3fhW.net] >>702 ありがとうございます しかしどうもパターンマッチに失敗してるようではないようです 実際コンパイラは型推論に成功してるように見えますし、明示的に comb7 :: [[ Int ]] を入れてもダメです 実行時のエラーメッセージも Non-exhaustive patterns ではなく prog : << loop >> が表示されています
712 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 13:52:31.92 ID:fGEABlaN.net] こういう時は自分の考えに自信を持つことも必要 誰かがエラーメッセージを見ている(または見ていない)のを見たからといって簡単に考えを変えない方がいい
713 名前:デフォルトの名無しさん [2021/02/01(月) 00:47:55.98 ID:TMv1Um3B5] 個人開発のWebアプリがツイッター世界トレンド1位になったけどいろいろ辛かった話vdeep.net/chocobox-back-story 【副業】個人アプリ開発の広告収入を公開します(?2020/11) https://cranklog.xyz/1586/ アプリ開発を個人で独学して収入を得る方法を現役エンジニアが徹底解説 https://yaba-blog.com/individual-development/ 【個人開発1年振り返り】リリースした7つのWebサービスの反省点と来年の活動について https://yukio.site/2019-web-services/ 個人開発のアプリで稼ぐのはそんなに難しいのかな? https://blog.httqs.com/log/101 個人開発者(副業サラリーマン)のアプリ広告収入を公開 https://sastd.com/developer-ad-revenue/ アプリ開発は稼げない?よくある勘違いや言い訳を徹底批判してみる https://apps.jp.net/introduction/excuse/ 個人がアプリ開発で収入を得る方法は4つ。だが甘くない! https://programming-school-hikaku.jp/column/application-make-money
714 名前:デフォルトの名無しさん mailto:sage [2021/02/02(火) 01:48:19.32 ID:yyMOWUoH.net] fixの定義は fix f = let x = f x in x となっていますが、 この x 自体は再帰的に定義されていると言えますか?
715 名前:デフォルトの名無しさん mailto:sage [2021/02/02(火) 16:19:31.38 ID:ErrealWs.net] >>701 xs0 = repeat 1 xs1 = zipWith (+) xs0 (0:xs1) xs2 = zipWith (+) xs1 (0:xs2) xs3 = zipWith (+) xs2 (0:xs3) こんな感じに個別に定義すれば確かに計算できるので、 comb7 !! 1 を計算するのにcomb7 !! 1 が必要だぞという点を 怒っているような気がするのだが確かなことは言えない、すまぬ comb6 !! n は計算するのに comb !! (n-1) の情報だけで十分なところが違うので
716 名前:デフォルトの名無しさん mailto:sage [2021/02/02(火) 17:58:42.89 ID:AZLuBdJH.net] >>706 再帰的と言うのは木構造を想定している気がする そのコードはグラフ簡約のためにそうなったので木構造でも再帰的でもないと思う
717 名前:デフォルトの名無しさん mailto:sage [2021/02/02(火) 22:40:39.64 ID:LQ6cge6d.net] >>707 ありがとうございます 私も多分それが原因かなと思い始めてます 一回目のcomb7 !! 1 と二回目では続く添字が! !!2 から !!1 に減ってるのですがHaskellはそんな事は勘案せずに「comb7 !! 1の展開の中にcomb7 !! 1が出てきたからアウト」と言ってるのかなと つまりはこの手の二重漸化式はHaskellはそのままズバリでは読んでくれないんでしょうね
718 名前:デフォルトの名無しさん mailto:sage [2021/02/03(水) 00:23:45.54 ID:QKvl77B6.net] comb7 !! 1 を計算するには length comb7 >= 2 のようなものが必要だぞ でも長さは1かもしれないからアウトという判断は正しい オーバーランするよりよっぽどいい
719 名前:デフォルトの名無しさん mailto:sage [2021/02/03(水) 14:08:13.61 ID:mxabq2OH.net] 求めてないかもですがこんなふうならかけますね。 module Main where import qualified Data.Array.Unboxed as AU main = do print $ comb6 !! 2000 !! 1000 print $ comb7_1 !! 1000 !! 1000 print $ comb7_2 1000 1000 AU.! ( 1000, 1000 ) comb6 = ((1 : (repeat 0)) :) $ zipWith (zipWith (+)) comb6 (map (0 :) comb6) comb7_1 = (repeat 1 :) $ ([ 1 .. ] :) $ (map (\x -> scanl (+) 1 $ tail x) $ tail comb7_1) comb7_2 :: Int -> Int -> AU.Array ( Int, Int ) Integer comb7_2 ly lx = comb7_2_table where comb7_2_table = AU.array ( ( 0, 0 ), ( ly, lx ) ) $ concatMap(\i -> map (f i) [ 0 .. lx ]) [ 0 .. ly ] f 0 x = ( ( 0, x ), 1 ) f y 0 = ( ( y, 0 ), 1 ) f y x = ( ( y, x ) , comb7_2_table AU.! ( (y - 1), x ) + comb7_2_table AU.! ( y, (x - 1) ))
720 名前:デフォルトの名無しさん [2021/02/04(木) 23:30:39.86 ID:OAJDFKMl5] サラリーマンの努力は資産にならない。 https://www.youtube.com/watch?v=3FLjm0Sn-2U ネットで稼げない残念な人の特徴 https://www.youtube.com/watch?v=sV_eyPfB7Wk 【継続=勝利】続けているうちに、周りは勝手に消えていきます。 https://www.youtube.com/watch?v=oe8rHWFlmVc 【危険】今すぐ逃げろ!ヤバい会社の特徴10選。 https://www.youtube.com/watch?v=N0JBhysIlzc 「ろくに勉強してこなかったバカ」が今日からすべきこと。 https://www.youtube.com/watch?v=3EUDu38W1Mw バカは「必要努力量」を見誤る。 https://www.youtube.com/watch?v=RG6_qkPhCuo
721 名前:デフォルトの名無しさん mailto:sage [2021/02/04(木) 22:24:53.84 ID:w5MK0dgi.net] >>711 ありがとうございます 参考にさせていただきます そうですね もう一つ可読性が欲しい感じがします 元々の問題意識としては私は可読性の高いコードが要求されることが多いのです 例えばFibonacci数列であれば f n = ( f $ n -1 ) + ( f $ n - 2 ) に可読性においてまさるものはないのですが、もちろんこれでは遅くて使い物になりません なので実用性も多少はなりとも求めるならある程度は可読性を犠牲にせざるを得ないのですが、どういう方法がいいのだろうというのがテーマなのです でたまたまFibonacciの場合に f = 0 : 1 : ( zipWith ( + ) f $ tail f ) というのを見つけてコレ中々いいなと、dpで計算してるのに“メモ”をするための不要な手続きを書く必要がなく、Haskellの“call by need”の機能をうまく利用してdp計算させてるところにちょっと唸ったもので でどれくらいコレでいけるのかなと二重数列をやってみたらうまくいかなくて、どうしたもんかなと まぁコレはしょうがないのかもしれませんけど
722 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 00:47:44.85 ID:hZ1aOePg.net] >>713 方向性違うかなと思いつつ書いたんですがやっぱり違いましたね。失礼しました。 今更どうでもいいですがちょっと間違えたので訂正だけさせてください。 comb7_1 = (repeat 1 :) $ (map (scanl (+) 1 . tail) $ comb7_1)
723 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 01:12:53.20 ID:gzN36RyX.net] 読むという目的 可読性の低いコードを、読むことなく却下するという手段 この目的と手段がすぐ入れかわってしまう現象もまた深刻な問題だ
724 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 06:11:52.56 ID:5jF91Ui3.net] 速さを求めてnconcみたいなもんだな
725 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 19:44:21.42 ID:DBOaHn9B.net] >>713 その遅くて使い物にならない計算を、 可読性をあまり犠牲にしないで爆速にする方法に、 メモ化(memoization)というテクニックがあります。 (その代わり、当然メモリを使います) メモ化関数 memoize が用意されていれば、 n 番目のフィボナッチ数を求める関数 fib は 次のように書けます。 -- メモ化 fib :: Int -> Integer fib = fix (memoize . fib') -- フィボナッチ計算の本体 fib' :: (Int -> Integer) -> Int -> Integer fib' f 0 = 0 fib' f 1 = 1 fib' f n = f (n-1) + f (n-2) メモ化関数を提供するパッケージは色々あります。 また、メモ化の仕組みの基礎や本質を学びたいのなら、 次のごく短いブログ記事がおすすめです。 https://kseo.github.io/posts/2017-01-14-memoization-in-hasekll.html この記事の最後の fibMemo 関数について、 適当な小さな値に適用させたものを 自分でノートに展開してみるといいです。
726 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 20:00:27.08 ID:DBOaHn9B.net] >>717 すいません。 肝腎の memoize 関数の定義を書き忘れました。 memoize :: (Int -> a) -> (Int -> a) memoize f = (map f [0 ..] !!) 先に紹介した記事にこれを導く過程や、 より速くより一般化する方法を学びたい人へ向けた URL紹介が載っています。
727 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 09:10:00.64 ID:8eeMDweD.net] >>717 解説ありがとうございます やはりメモ化するしかないんだと思います 問題はそれがプログラマが明示的に自分でやらないといけないのか、コンパイラが自分でやってくれるのかの差なんだと思います Haskellは純粋なcall by nameではなく、call by needのシステムの中にメモ化を備えていてプログラマがメモ化するように書いてなくても勝手にメモ化できるものをメモ化してくれるのがすごいとこだと思うんですけど、例えば>>713 の2番目の例で最初見た時「なんでこの定義式でメモ化が効くんだ?」とさっぱりわからなかったのが、実はHaskellのcall by needのシステムをうまく利用してるらしいとわかったのが最初なんです で二重の漸化式だとうまくいかないなと もちろん二重の全炊きでも上手くsuffixの取り方を変えたりすると同様の方法でメモ化できるんですけど、それでは結局「Haskellの機能を利用して明示的にメモ化を指定することなく高速化した」事にはなりません まぁコレはしょうがないんでしょうね どんな計算も常にメモ化して常に同じ評価式を2度扱う事を防いでたらそんなの逆に使い物になりませんからね
728 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 20:56:07.58 ID:tGZHMqQF.net] Haskellが「ヤバそう」って偏見だけで敬遠されてるのかなしい… 同級生にも布教したい
729 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 21:00:00.51 ID:xuEfQm7n.net] >>720 布教という言葉自体、独善的で押し付けがましく感じられる原因になってると思うよ。 相手がいやがらない程度にhaskellの良さや面白さを伝えてそれでも相手が興味をひかれないなら、それ以上はやめときな。
730 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 21:12:54.72 ID:HlAr7yEc.net] >>719 今回の話の本質ではないので、へーそうなんだ、 程度に聞いてくれればいいのですが、 >>713 の2番目の例とは、 f = 0 : 1 : zipWith (+) f (tail f) のことでしょうか。 もしそうなら、これはメモ化ではないですよ。 (このテクニックをなんと呼ぶのかは知りませんが) メモ化というのは簡単にいえば、 関数の同じ引数に対する2度目(以降)の適用に備えて、 その引数に対する1度目の関数の値をその引数とペアにして どこかにメモしておくことです。 ポイントは、2度目以降に備えることではなく、 引数と関数値のペアをメモしておくことです。 それを踏まえて、>>713 の2番目の例において、 では何が関数で、引数と関数値のペアはどこにメモされているか、 考えてみてください。 ただ、言葉の意味は時代と共に変化していくものなので、 今はこれも広義にメモ化と言うことになっているのでしたら、すいません。 私の方が勉強不足です。
731 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 08:28:27.99 ID:kgbg5mk/.net] >>717 の方がzipwith使ったものより読みやすくて遥かにいいな こっちの書き方の方がもてはやされてほしいわ
732 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:58:25.84 ID:nblMEePQ.net] 久しぶりにHaskell(Servant)触ってみたけど 相変わらず呪文のようなテンプレートマクロとかコンパイル通すためだけの幽霊型とか表に出てきているのね こういうの後ろに隠した実装がほちい(・ัω・ั)
733 名前:デフォルトの名無しさん [2021/02/07(日) 21:10:43.40 ID:B3cRggdVq] 怒る・叱る文化は、安月給&長時間労働の証 https://www.youtube.com/watch?v=-FZ-W08t9vM&t=173s 勉強しない社員★仕事のための投資をしない人たち https://www.youtube.com/watch?v=Zg6N7a_h8AE バカが起業したんです★バカが社長になる過程 https://www.youtube.com/watch?v=WT3pvyhpazk 時給10倍差は勉強と努力だけで差がつく★最大100倍差! https://www.youtube.com/watch?v=AHZjacip9Y4 ドリームキラー★夢の実現を応援する人、阻止する人 https://www.youtube.com/watch?v=ZoVXtIxhqTU 年収1億円は「できっこない」をやり遂げた人★10万人、銀の盾来た! https://www.youtube.com/watch?v=3t9nQgcIzLw
734 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 19:10:10.31 ID:Ae+USThM.net] >>724 試しに作ってみればいいのでは? そういう気に入らない幽霊型を とりあえず1つだけ後ろに隠してみて、 使いやすいか試してみればいいと思う。 良さそうなら、ここや GitHub で提案するとか。
735 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 21:05:48.19 ID:kgbg5mk/.net] Servant辛いから是非お願いしたい
736 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 03:22:56.40 ID:lr3qr0Kv.net] >>708 レスが遅くなりましてすいません。 xの定義にx自身を参照していますが、それだけでは 再帰的に定義されているとは言えないということですか。 例えば次の関数 f は再帰的に定義していると皆が言います。 f n = if n == 0 then 1 else n * f (n-1) これと >>706 の x とは何が違うのでしょうか。
737 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 07:06:31.27 ID:aZaTrcsy.net] >>728 fix x はxの定義じゃなくてfixの定義では
738 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 09:04:48.35 ID:THE6D9/g.net] >>729 fix定義の中でlet節を使って定義されているxの話です。
739 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 12:31:08.86 ID:hFpKnaPX.net] >>717 リスト使ったメモ化の理解にはいいんですけど、その例も実は遅いんですよね。!!が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)
740 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 18:33:31.66 ID:USGkiU7i.net] >>728 マジョリティとマイノリティの違いとか、合法とグレーの違いのようなものだと思えばいいだろ 再帰的な関数と再帰的な型はよく知られている 一方、関数でも型でもないケースは未知のウイルスのようなもので 既存のものと同じだとすぐ決めつけるのは判断が早過ぎる極論
741 名前:デフォルトの名無しさん mailto:sage [2021/02/08(月) 20:09:46.17 ID:xtdfQPSv.net] >>731 そうですね。 なので、実際は Trie 木でメモする MemoTrie が効率良いと思います。
742 名前:デフォルトの名無しさん [2021/02/09(火) 17:58:55.95 ID:czfvLw+x2] アスペルガー症候群と高機能自閉症 「反復運動」と「限定された物事へのこだわり・興味」 3つの診断基準 @人とのやり取り、関わりが難しい(社会性の障害) Aコミュニケーションがとりにくい(コミュニケーションの障害) B興味・行動の偏り、こだわり(限定的な行動・興味・反復行動) ASD(自閉スペクトラム症、アスペルガー症候群)の症状 細部にとらわれてしまい、最後まで物事を遂行することが出来ない 視線があいにくく、表情が乏しい 切り替えが苦手、決まったパターンと違うと癇癪を起こす、集団での活動・遊びが苦手。
743 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 06:55:43.73 ID:w+SbAYAx.net] >>732 すいません、結局のところ、どういう事でしょう?
744 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 10:35:38.44 ID:tXb64EJq.net] 法律や善悪の判断の正しさを疑うのと同じレベルの懐疑的な思考が 数学やデバッグにも必要ということかな
745 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 11:17:11.88 ID:tXb64EJq.net] 静的型は最強とかガベコレは最強とかいう考えが 疑われるようになったのは半分ぐらいHaskellが原因だよね
746 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 13:30:33.82 ID:em7GM66H.net] >>732 ←こいつまだいたのか 気持ち悪すぎる
747 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 14:18:45.17 ID:tXb64EJq.net] ここは無料だしこんなもんだろ 良いものはみんな課金される
748 名前:デフォルトの名無しさん mailto:sage [2021/02/11(木) 14:43:11.06 ID:/UgD5Hp7.net] 地獄の沙汰も金次第 だが天国への言及はない
749 名前:デフォルトの名無しさん mailto:sage [2021/02/11(木) 16:56:32.70 ID:zBw+qxbZ.net] ねえ、購入厨 ひょっとしてHaskellは、きみが同じ地獄を繰り返す毎に 強力なフリーソフトになっていったんじゃないのかい
750 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 21:17:16.21 ID:kqsb0S1y.net] 悪役キャラには著作権等のコンプライアンスを意識させると邪気が抜けてしまう 豆知識
751 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 18:40:01.75 .net] なぜ Haskell スレはワードサラダ bot に狙われてしまうのか
752 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 20:59:33.34 ID:2j5v2BhK.net] >>743 ネットの差別発言を排除する努力すらやらない人がいるから ワードサラダとやらを排除する努力なんて誰もやらないのは当たり前だぞ こんな簡単なことがなぜ理解できないんだ
753 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 21:27:29.30 ID:A1oxlP1a.net] 731はワードサラダなレスうぜぇなぁくらいの意味しかなくワードサラダなレスが存在してしまう理由を実際に疑問に思っているわけではないという簡単なことが何故わからないのか
754 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 21:49:22.17 ID:2j5v2BhK.net] 731は、うぜぇなぁ以外何も考えてなかったというのか それは差別意識しかない絶対悪じゃないか
755 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 01:08:13.78 ID:Qrz9kKC+.net] もっと危機感を持ったほうがいいよ 母国語の特徴までネチネチいじられたら外国語はこわくて使えないだろう 英語ができないとプログラミングもできない
756 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 17:23:26.09 ID:Mv5LolEs.net] なんかこのスレ会話が噛み合わないよな >>744 ←こいつとか明らかに頭おかしいし こういう人外化け物がうじゃうじゃいるから「特技はコミュニケーション能力です」みたいなゴミ文系が社会で調子に乗り始めるんだろうな
757 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 18:24:29.13 ID:Qrz9kKC+.net] コミュ力の悪用を止める方法で一番使えそうなのは制限時間を無くすことだ 5秒で答えさせるような問題でも時間のルールを無視してしまえば そのゴミ文系ってやつの能力を擬似的にコピーできる
758 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 19:02:15.47 ID:3zpQr6lX.net] Haskellの話は?
759 名前:デフォルトの名無しさん mailto:sage [2021/02/15(月) 20:58:35.44 ID:Qrz9kKC+.net] 最小不動点を定義する半順序の定義がない それと「再帰」の定義がない
760 名前:デフォルトの名無しさん mailto:sage [2021/02/16(火) 10:45:42.61 ID:AZNZAZhP.net] >>750 こういう話? ttps://i.imgur.com/oKvfp6x.png
761 名前:デフォルトの名無しさん mailto:sage [2021/02/16(火) 12:56:19.11 ID:VICwQMLs.net] 質問なんですが, 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 ) ) みたいに書く方法ってありませんかね?
762 名前:デフォルトの名無しさん mailto:sage [2021/02/16(火) 15:13:16.20 ID:VICwQMLs.net] すみません自己解決しました 一応結果貼っておきます 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
763 名前:デフォルトの名無しさん mailto:sage [2021/02/16(火) 15:27:24.80 ID:twhDC3NA.net] xs <- mapM (\j -> cdRecursiveTD (i - j) stArr) [1 .. 2] writeArray stArr i ((i - 1) * sum xs) これでよくないですかー?
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に対してモノイドを構成するなら、 (");
//]]>-->780 名前:8" rel="noopener noreferrer" target="_blank" class="reply_link">>>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モナドの中でファイル操作したり現在時刻取って来たりしても問題無いわけだしわざわざ型犠牲にしなくても良いんじゃない
865 名前:デフォルトの名無しさん mailto:sage [2021/06/01(火) 10:15:13.07 ID:UuHFoCEt.net] 書き方が何通りもあってコンパイルが通るのは客観的事実だよ そんな書き方しなくても良いというのはまあ政治的にはそうなるわけだが コンパイルエラーにならないのに、バラモンみたいな人間に色々言われると混乱しやすい
866 名前:デフォルトの名無しさん [2021/06/01(火) 22:12:35.15 ID:HETOiJgb.net] 自然に書いたhaskellコードが極端に遅いという2018年の記事 https://pl-rants.net/posts/haskell-vs-go-vs-ocaml-vs/
867 名前:デフォルトの名無しさん mailto:sage [2021/06/03(木) 20:42:08.53 ID:/+9iJa2F.net] >>848 自己解決 language-javascriptパッケージのソースのコメントに∉記号がutf8で入ってて、環境によっては違うエンコードで読み込んでエラーになるっぽい 誰かが開発者にワークアラウンドとしてコメントをasciiで書き直してくれとリクエストしてたけど、ビルド環境を整えるのはstackの仕事だから俺は知らんと一蹴されてた まぁそりゃそうなんだけどさ...
868 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 01:35:57.62 ID:qvRyjOjC.net] >>857 なんという罠… これ引っかかった人結構いそう
869 名前:デフォルトの名無しさん mailto:sage [2021/06/05(土) 12:32:22.17 ID:aDKd5nip.net] プログラミング最大の罠のひとつ 自分で創作するよりも他人のソースを読む方が難しい
870 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 12:42:09.06 ID:k7DmZ27b.net] 昨日の自分は他人です
871 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 20:28:43.19 ID:qbMAaCDK.net] 去年書いたコードが理解できない
872 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 22:37:59.06 ID:+U7TScWJ.net] そりゃあ人間の能力は老化とともに衰えるから仕方ないね
873 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 22:55:42.12 ID:OC0V43xk.net] ここ1, 2年で自分が書いたソースが回ってくることがあるけどほとんど覚えていなかった 今から振り返るともっといいやり方が思いつくけど、他人が書いたコードより遥かに行儀が良くて読みやすかった
874 名前:デフォルトの名無しさん mailto:age [2021/07/01(木) 09:54:29.98 ID:yiVYCTXd.net] Hmatrixはcabalで入れたのにghciから:m Numeric.LinearAlgebraや import Numeric.LinearAlgebraで行列演算モジュールを入れようとすると、 <no location info>: error: Could not find module ‘Numeric.LinearAlgebra’ Perhaps you haven't installed the "dyn" libraries for package ‘hmatrix-0.20.2’? Use -v to see a list of the files searched for. とエラーが出るのだけど、よく分からない。ホームディレクトリにHmatrixのファイルっぽい ものを置いてもダメ。Numericのフォルダをホームディレクトリに置いてもダメ 分かる人、教えてくださいm(_ _)m 古いパソコンの仮想linuxに入っている奴はimport Numeric.LinearAlgebraで 通常通り動くけど、その他のPCでは動かないんだよね。前は動いていたのもあったけど ファイル関係いじくり回してたら、設定が狂ったようで動かなくなった 関数型言語で行列演算さえ、導入にこれだけ苦労するとは、どういうことだいw
875 名前:デフォルトの名無しさん mailto:sage [2021/07/01(木) 13:56:29.22 ID:m444U3IV.net] > ファイル関係いじくり回してたら、設定が狂ったようで動かなくなった ちゃんとドキュメント読んでないよね?
876 名前:デフォルトの名無しさん mailto:sage [2021/07/01(木) 18:53:55.58 ID:dccggDtp.net] ghciでimportを複数すると、プロンプトが Prelude Data.Monoid Data.Traversable Data.Foldable> と長くなってしまうので、importしたの表示しないようにするにはどうしたらいいのですか?
877 名前:デフォルトの名無しさん mailto:sage [2021/07/01(木) 18:56:14.18 ID:dccggDtp.net] すまん、自己解決した :set promptを使えばいいのか promptでググれば良かった
878 名前:デフォルトの名無しさん mailto:sage [2021/07/01(木) 22:45:34.96 ID:FFAeznD4.net] quarifiedも使えるよ お好みで
879 名前:デフォルトの名無しさん mailto:sage [2021/07/02(金) 03:41:23.49 ID:aoQxpJoS.net] >>864 ghciのコマンドライン引数に、使用したいパッケージを指定するものがなかったっけ? baseパッケージ以外はちゃんと引数で明示しないとghci上で使えなかったような気がする。
880 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 00:45:51.28 ID:FlY7oUIG.net] すいません 質問させて下さい Ghc.Types というのを眺めてたんですが 謎の#が入ってるコンストラクターがいっぱい見えます data {-# CTYPE "HsInt" #-} Int = I# Int# data {-# CTYPE "HsDouble" #-} Double = D# Double# newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #)) などなど なんですかコレ? 一方でたとえばDoubleはReal classに属してるのでsinとかlogとかの処理をどこかでやってると思うのですがどこにも見つけられません もちろんこんなプリミティブな演算はHaskellではなくCとかに丸投げしてるんでしょうけどその手の宣言なりなんなりはないもんなんですか?
881 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 08:27:37.09 ID:9m9xryS6.net] https://wiki.haskell.org/Unboxed_type 記事内リンクも見てね
882 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 09:09:34.41 ID:Qo9dk8cs.net] >>871 なるほど まだよくわかってないですけどunboxed typeというやつなんですね 後半もどなたか分かりませんか? 実は事情で“多倍長の浮動小数点”を自作したいのです そのためにはReal型にしなくてはならずsinとなlogとか結構ある数の関数を実装する必要があります どこかに参考にできるライブラリ転がってませんか? 性能は求めないので多倍長精度の計算ができるReal型を実装してる例が欲しいです
883 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 09:23:00.75 ID:Qo9dk8cs.net] 間違えた Float classがsinとかいっぱいあって難しいです
884 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 09:25:56.65 ID:Qo9dk8cs.net] 違う Floating orz
885 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 12:08:32.98 ID:5i+2sdHC.net] https://github.com/ghc/ghc/blob/master/libraries/base/GHC/Float.hs#L588 ライブラリがありそうな気がするけど、ghcクローンしてやりたいことできるか調べてみたら
886 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 12:28:39.86 ID:5i+2sdHC.net] hackageをfloatで検索した結果。怪しそうなやつ: https://hackage.haskell.org/package/variable-precision https://hackage.haskell.org/package/AERN-Real-Interval
887 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 23:01:22.87 ID:zugIw5Ja.net] あざっす ソース読んで研究しまつ
888 名前:デフォルトの名無しさん mailto:sage [2021/07/11(日) 06:49:31.34 .net] リストのシャッフルは、2値ランダムと分割統治法で構成できるという境地に至った
889 名前:デフォルトの名無しさん mailto:sage [2021/07/11(日) 16:41:58.17 ID:KhXXWhgG.net] 余談だけど オードリー・タン氏に性的に食指が動く 男性っているのかな。
890 名前:デフォルトの名無しさん [2021/07/16(金) 17:38:36.16 .net] あののののの! なんで型コンストラクタ名が被ったらいけないんですか! 型が違うならそのコンストラクタ名くらい被ったっていいじゃないですか!
891 名前:デフォルトの名無しさん [2021/07/16(金) 23:35:14.79 .net] Esqueleto では SELECT 〜 FROM ONLY an_table 〜 みたいに ONLY を付けることで継承テーブルを対称から外すように指示することはできないんですか? 生SQLを書くしかありませんか?
892 名前:デフォルトの名無しさん [2021/07/17(土) 15:02:59.17 ID:eTC1af8g.net] >>879 ちょまどは鳳唐好きだって言ってた
893 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 17:39:27.65 ID:44fEdIj7.net] 私は、MBAを取るために、ハワイにある伝統的なビジネススクールに通っていたとき、どこかの大企業で 働く中間管理職が教えるマネジメント「論」や経済「論」を学ぼうとしている自分に気付いた。 ビジネス経験のない先生は、学校制度の外に一度も出たことがない人だ。つまり彼は、5歳で幼稚園に入ってから ずっと学校制度の中にいるにもかかわらず、学生たちに実社会について教えようとしていることだ。 とんだお笑い草だと思った。 講師陣や中間管理職や教師のほとんどは、ゼロからビジネスを立ち上げるのに何が必要なのかについては何も知らなかった。 ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P62〜63 彼らのほとんどは、学校という象牙の塔を出ると、企業社会という象牙の塔に入った。 安定した仕事と給料に依存していた。つまり、素晴らしいビジネス論をもっている人は たくさんいたが、現実の世界でビジネスをゼロから立ち上げ、大きな富を蓄えるのを可能にする、 素晴らしいビジネススキルのある人はほとんどいなかったということだ。 彼らのほとんどは給料なしで生きていけなかった。 ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P63
894 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 18:54:41.40 ID:lhv7ZvYo.net] 言語設計者に対する悪口はそこまでにしてやれ
895 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 08:48:06.51 ID:p5uFvWrN.net] まあ、生きていけないぞー死ぬぞーってのが机上の空論の中でも最悪の論だよな 実際には死なない人が多い
896 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 22:53:21.56 .net] すいません、僕がスレを軽率に上げてしまったばっかりにワードサラダBOTの餌食なってしまうとは・・・
897 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 09:08:56.51 ID:Niob4uA5.net] 現状これはとりあえず有効にしとけみたいなGHC拡張ってなにがありますか
898 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 10:46:43.62 ID:jaES3hbu.net] >>887 無いです。 必要なときにのみ必要なだけ宣言するといいです。
899 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 04:08:52.62 ID:FlIQ/SVE.net] ttps://cognicull.com/ja Haskellやるのにこの辺は履修済みであることが求められるの? Obj-Cだとほぼなくてもアプリは書けるけども Haskellって数学じゃないのに数学のフリしてるところあるよね 利用者も然りで余計混乱を招いてる気がする
900 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 12:01:28.04 ID:nPPC7Onz.net] >>889 うーん、書きたいプログラムの内容によるとしか言えないかな こうしたことがわからないとHaskellのプログラムが書けないということはない そのあたりはObjective-Cと同じ
901 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 03:35:04.64 .net] Data.Arrayって廃止されたの? GHC.Arr を使えってこと?
902 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 05:37:33.58 ID:O4N47kXx.net] >>891 Data.Array は array パッケージにあります。
903 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 15:27:28.97 ID:6BJr6nx6.net] >>889 フリじゃなくて実際、他のメジャー言語よりは数学的裏付けがされてると思う 利用者も然りなのはむしろ良い傾向 他言語はhaskell以上に、ウェイがノリで書いたようなゴミライブラリが流行ってたり、侍エンジニアレベルのゴミ文献が蔓延ってたりする阿鼻叫喚状態
904 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 02:22:30.38 .net] >>892 詳しい情報サンクス
905 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 13:54:44.53 ID:kX7UidPf.net] >>889 Haskell書いてるときにそういう系統の知識が要求されたことはないなぁ、いくつかの概念の出自が圏論だと聞いたことはあるが
906 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 14:32:21.44 ID:yBIo03BR.net] すごいHaskellに素晴らしい数学の解説書ってレビューがついてた時はクスっと来たけど
907 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 07:34:32.07 ID:Rllz2LO9.net] 例えばOOPの継承関係を否定する 否定するなら対案を出せと言われる この過程は数学ではないけど結果的には半順序関係とか圏とか出てくる
908 名前:デフォルトの名無しさん [2021/08/16(月) 04:30:28.47 ID:aZY1/RTa.net] 純粋関数型でキャッシュは実装可能? 例えばOOPでは計算に時間がかかる値はキャッシュしておいて次の読み取りで キャッシュから返すという事ができる。 このキャッシュの管理をOOPらしいカプセル化によってまともに実装できる
909 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 18:24:35.56 ID:O8pAbV/G.net] >>898 可能です。 memoization をキーワードに調べてみてください。
910 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 20:19:16.73 ID:MamsdVYI.net] >>66 オブジェクト指向プログラミングにおける Smalltalk 的な位置づけに来るんじゃないかな。 ガッチガチだから強制的に「その概念」に染まれる。
911 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 00:24:27.59 ID:anV9aH6F.net] 低級言語でインタプリタを作れそうなシェルスクリプト的な位置づけだよ 単一の高級言語を強制されない
912 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 16:00:36.29 ID:IKqVi/r3.net] 関数型言語ってリストとかツリーみたいな再帰的なデータ構造扱うのは得意だけど 有向・無向グラフ(のアルゴリズム)扱うの難しくない?
913 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 18:40:13.11 ID:JntO5v5E.net] >>902 難しいと感じるかどうかは本人の気持ちなので何とも言えません。 ただ、haskellでのグラフ理論の扱いに関しては、 カジュアルな解説もフォーマルな論文もたくさんあります。 ライブラリもあります。 扱ったことはないけど、何となくイメージだけで 難しそうだ、 haskellの苦手分野だと思っているのであれば、 自分に読めそうな記事にいくつかトライしてみてはどうでしょうか。
914 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 21:01:34.14 ID:anV9aH6F.net] >>902 Erlangのようなメッセージ送信を考えればわかるが メモリを共有していない相手にも送れるデータ構造が得意 メッセージとして文字列ばかり使ってるとカプセル化も型情報も無駄になる だから文字列に似ているが異なるデータ構造が役に立つ
915 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 21:36:21.14 ID:NimliznV.net] Applicativeの(*>)演算って何の意味があるの? 第一引数はどうせ捨てられるんでしょ。
916 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 23:09:37.51 ID:SkXNk2uR.net] 確かに左辺 :: f aで言うところのa型の値は捨てるが Maybeとか[]みたいな直和型でどの値コンストラクタを使って構築されたかの情報は影響するよ
917 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 21:35:42.38 ID:Wv9PZvrP.net] >>906 それは第1引数をパターンマッチすることで、たとえ第2引数が同じ値でも、 (*>)の計算結果を変えられることに意味があるってこと? Sum型やProduct型もApplicativeのインスタンスになってるけど、 これらだと(*>)には意味がない? (当然(<*>)など他の演算には意味があると思うけど)
918 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:58:50.16 ID:WIQMD65A.net] >>905 Parsecで左辺の句がいらないときに使う
919 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 17:56:43.60 .net] ぼくようメモ: OpenSUSE でPostgreSQLを使用した開発をしていてstack buildで postgresql-libpq パッケージを途中にビルドする際 pg_config が無いと言われコケることがある 背景: OpenSUSE は postgres-devel から pg_config を削除した。我々は libpq.pc を代わりに使うべきである。 ソース: https://redmine.lighttpd.net/issues/2965 解決法: stack build --flag postgresql-libpq:use-pkg-config としてビルドする
920 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 22:14:55.40 .net] そうか!Trueskill のHaskell実装がなくて論文読んで自分で実装する力がなくても Haskellから実行時にbash 呼び出してPython3 のTrueskillライブラリに標準入力でPythonコードを流し込んで 演算結果を文字列で貰ってきて、それをParserCombinatorで作った字句解析器で読み取ってHaskellのデータに戻せばいいじゃん あたいったら天才ね!
921 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 09:49:18.76 ID:rktYy8hS.net] s/天才/脳筋/
922 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 01:55:27.29 ID:bkZL74IR.net] 関数定義の左辺の部分的で、関数名と仮引数名の後の | と = の間の部分って何て名称だっけ? f x y | x < y = ... これの x < y の部分。 あるいは関数定義をこう書く方法の呼び方とか。 この文法や制限などをネットで調べたいんだけど、 名称が思い出せず検索に難儀してる。 できれば英語でお願い。
923 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 03:22:07.48 ID:bkZL74IR.net] >>912 すまん、思い出した、guard だ。
924 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:23:35.11 ID:kwXNo1Gk.net] >>911 g を忘れてね?
925 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 10:43:55.15 ID:02VLVXq+.net] パターンの質問です Rational型の数が平方数であるかどうか判定するプログラムで isSquare r = r >= 0 && r == ( sqrtR r )^2 sqrtI = truncate . sqrt . fromInteger sqrtR r = let ( a, b ) = ( numerator r, denominator r ) in ( sqrtI a ) % ( sqrtI b ) というのを書きました もちろんこれはうまくいきます しかし numerator, denominator をいちいち取り出すのが鬱陶しいので sqrtR ( a :% b ) = ( sqrtI a ) % ( sqrtI b ) ------- @ と書きたかったのですがうまくいきません
926 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 10:44:01.62 ID:02VLVXq+.net] ネットで調べると {-# LANGUAGE PatternSynonyms, ViewPatterns #-} numDenum :: Integral a => Ratio a -> (a,a) numDenum x = ( numerator x, denominator x ) pattern ( :% ) :: Integral a => a -> a -> Ratio a pattern a :% b <- ( numDenum -> ( a,b ) ) where a :% b = a % b というおまじないがstack exchangeで見つかってコレつけるとうまく行きました うまくいったんですがサッパリわかりません コレ何者ですか? そもそも@はなんでうまく動かないんですか?
927 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 11:58:51.92 ID:Sp73Mnte.net] 計算結果をパターンマッチさせようとして失敗してるのでは 値を値コンストラクタにばらしてその値コンストラクタに応じて処理を変えるのがパターンマッチ (マッチさせる対象がList aなら、:なのか[]なのかに応じて「先頭:後ろ」か空リストかが束縛される) で、計算結果をマッチさせたいならビューってのを定義してあげないといけませんよって話のような
928 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 18:38:05.18 ID:02VLVXq+.net] >>917 レスありがとうございます 原因わかりました ご指摘の通り「計算結果にはパターンマッチさせられない、パターンマッチに入っていい関数はコンストラクタのみ」なのでRatio a型のコンストラクタである( :% )を使ってたのでそこは問題ないと思ってたんですが肝腎要の( :% )が定義されてるGHC.Realをimportしてませんでした Data.Ratioをimportしたら自動的に(:%)も使えるもんだと思い込んでいました Pattern synonymsについては https://qiita.com/as_capabl/items/d2eb781478e26411a44c でちょっと理解できました、が、そもそも使わなくても良くなりました ご協力感謝です
929 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 20:18:48.06 ID:02VLVXq+.net] 備忘録がてら調べてわかった事書いておきます Pattern Synonyms は今回のようにライブラリの提供者が型のコンストラクタを提供してない、しかしパターンマッチは使いたいとかの場合に使える拡張のようです {-# LANGUAGE PatternSynonyms, ViewPatterns #-} を使うと pattern ( マッチさせたい表現) <- ( その型から取り出したい値を取り出す関数) -> ( 取り出した値にマッチさせるパターン) ) ( where さらにコンストラクタシノニムとしても使いたい場合の逆変換関数 ) の形で使うようです 例えばInt型でxが偶数であった場合にdiv x 2をパターンマッチで拾うために pattern TwiceOf x <- ( ( \t -> ( div t 2 , even t ) ) -> ( x, True ) ) のように定義しておいて main = do case 2 of { DoubleOf x -> print x; _ -> print "odd" } case 3 of { DoubleOf x -> print x; _ -> print "odd" } のように利用できるようです TwiceOf はあくまでパターンマッチの表現のみで使える“仮の”コンストラクタですがpattern文にwhere句を pattern DoubleOf x <- ( ( \t -> ( div t 2 , even t ) ) -> ( x, True ) ) where TwiceOf x = 2*x のように追加するとあたかもInt型の新しいコンストラクタが追加されたように振る舞い“DoubleOf 2”
930 名前:のような表現が許されるようになるようです 今回の場合はどうすべきか悩みどころです ライブラリの開発者が低レベルの(:%)を公開しない理由もわかるので無理クリ(:%)を使うのもどうなんつて気もするし、かと言ってまだHaskellの標準として認められてない、GHCでしか使えない拡張使うのもどうなんという気もするし [] [ここ壊れてます]
931 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 10:16:50.52 ID:F+2SAjcM.net] >>919 > かと言ってまだHaskellの標準として認められてない、GHCでしか使えない拡張使うのもどうなんという気もするし まさかGHCの言語拡張はすべて使わないつもりですか? せっかくの表現力が著しく落ちますよ。 今あるいは将来 GHC 以外のツールでコンパイルする計画があるのなら仕方ありませんが、 そうでなければ言語拡張の使用を躊躇する理由が見あたりません。 私なら、 ・プログラムが意図した動きをし、 ・かつソースコードが読みやすくなる なら言語拡張を積極的に利用します。 意図通り動くけど可読性が落ちるなら、そこで初めて迷いますね。
932 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 20:01:57.83 ID:0hgEU0Ok.net] >>920 まぁそうですね 完全日曜プログラマーなので気分良く書けばいいか
933 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 07:18:33.81 ID:m/60KM4j.net] Stack Overflow に面白い質問が投稿されていた。 要約すると return 1 getLine という式の型は Num t => t で、その値は 1 らしいんだが何で? というもの。 質問者は勘違いして、何で return と getLine が互いに打ち消し合うのかと訊いていたが。 https://stackoverflow.com/questions/69325169/haskell-a-return-before-is-cancelled-out-by-a-monad-after-how なかなか興味深い。 考えてみると haskell の理解がいっそう深まる。
934 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 19:38:43.50 .net] 最近並列処理を齧り始めました ランダム値の生成にmwc-random パッケージの System.Random.MWC.createSystemRandom で生成した GenIO を、全体を通して利用する環境として Reader モナドに入れて使いまわしていたとします ここにSTM で並列処理機能を新規に追加する場合、forkIO したスレッド内で一々そのスレッド専用に GenIO を生成し直すべきでしょうか? というのは、それをしないと 各スレッドで共通の GenIO がコピーされ使用される場合、各スレッドで同じ値が生成されていってしまいランダムの意味をなさないのではないかと思うからです ではこの疑似ランダム生成器を TVar に入れるかとなると、資源の取り合いになって、1スレッド時よりパフォーマンスが低下して元も子もないではないかという懸念があります ここまで思考実験すると、やはり forkIO したスレッド毎に一々、その中で専用の疑似ランダム生成器を新調する必要があるという考えに至りました スレッド数が多くなると疑似ランダム生成器を作るコストがバカにならなくなっていくでしょうが、その辺は頑張るしかないよということで、ぼくの考えは合っていますか?
935 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 21:46:38.01 ID:m/60KM4j.net] >>923 そこまでしっかり考察したのなら、質問する前にまず実験してみようよ。
936 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 16:47:57.85 .net] >>924 実験してみたら、各スレッドで別の値が生成されていました しかしドキュメント見ると It uses mutable state so same generator shouldn't be used from the different threads simultaneously.と書いてあるんですが これはどう受け取ったらいいんですかね 各スレッドで別の値が生成されているなら用を為してる(ように思える)からいいじゃないかとも思うのですが 何か別の理由があって、そう思えてもやはり使うなという事なんでしょうか?
937 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 18:11:25.46 ID:XYchXu+H.net] >>925 mutable stateの排他制御をしてないから複数のスレッドで実行するとまずいことが起こるかもしれない、ってことじゃないの? 排他制御 https://ja.wikipedia.org/wiki/%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1
938 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 20:38:39.08 ID:MDVYajz0.net] >>925 パフォーマンスの実験もね。 理論上パフォーマンスが落ちると分かっていても、実用上は問題ない場合も多い。
939 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 15:57:53.68 ID:lU7q1h04.net] >>922 そこで関数モナドが出てくるのは知らないと思い至らないなあ 勉強になった
940 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 07:09:39.49 ID:N1l0weLI.net] >>922 セミコロンを書かない言語ではすべからく改行直後に (getLine)と書くとどうなるか問題が出てくる
941 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 09:21:54.92 ID:LH+TfD4u.net] すべからく警察だ!
942 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 09:22:48.41 .net] >>926 具体的にどういうケースでどういう問題が起こるか解らないので、取り敢えずドキュメントにスレッド間で共有はやめろとある以上、大人しく従うことにします >>927 STM版が、3950Xエコモードシングル500分の処理が30スレッド割り当てで220分くらいになりましたが CPU使用率も75%前後で残念でした 競合するリソースが多過ぎたからではと思い、競合を避ける事を考えていると そもそもSTMを使わず、スレッド毎にローカルにデータを貯めて処理して最後に各スレッドで部分的に仕上げたデータをChanで流して 、受信した側でデータを総括する、初歩的な方式を思いついたので書き換えました getChanContentsを使いましたが、EOFみたいな最後の通知方法が判らずに、全スレッドの処理が終わりもう誰もデータを流すことのないチャネルから性懲りもなく読みだそうとしてしまい 例外が発生して困っていました 幸いスレッドの数は判っているのでチャネルからtakeする数をスレッド数ちょっきりとして切り上げた所、遅延評価が幸いしてその先を読もうとしなくなり例外は発生しなくなりました(本質的解決かは判りません) これにより処理が18分で終わりました スレッド毎にcreateSystemRandomするように書き換えると21分かかるようになりました オーバヘッド込みでも500分かかっていた時代から驚異的な進化を遂げました 憧れだった Software Transactional Memory は期待程速くなくがっかりしました STMは最初に検討するべきではなく、巧く競合が発生しないように書けないときの最後の手段なのかなと思いました
943 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 16:59:33.11 ID:Ai6xyiAS.net] 物理cpuが四つとかの擬似マルチスレッドではそんなに早くならないと思ってたけど、ものによってはそんなにも早くなるもんなんだな
944 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 21:32:31.29 ID:zxVeK0W2.net] と思ったら3950x gpuでほんとに物理スレッドがたくさんある場合の話か
945 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 23:20:55.55 ID:75xrYyRf.net] >>922 型注釈してないのに、インスタンスとして関数モナドが選択されるのはどうしてですか? getLineが影響していますか?
946 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:58:31.84 ID:3ymQugFf.net] >>934 return 1 getLine は (return 1) getLine だから、 (return 1) が関数(a->b) じゃないと型が合わないんじゃないかな?
947 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 22:57:04.48 ID:MRfRTuXd.net] 関数モナドと同じように、引数一つ取るモナド作ったらambiguousって怒られるかなと思ったんだけど、コンストラクタ書かないとならないからうまくいかない。 この値は関数モナドにしか解決されないのかな
948 名前:デフォルトの名無しさん mailto:sage [2021/10/07(木) 09:52:08.72 ID:AVdaEi5L.net] C++のoperator()()に相当する演算を多重定義できないので曖昧ではない
949 名前:デフォルトの名無しさん [2021/10/17(日) 18:41:32.26 ID:DQz0YbVB.net] なんjでめんだこって言う女装子がhaskell勉強していてdao of functional programmingっていう海外の人が書いた文献がわかりやすいってことでそれ読んでいるらしいが ここの人にもそれ読んでいる人いる?
950 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 20:11:52.85 ID:LTEsEtXo.net] これか The Dao of Functional Programming https://github.com/BartoszMilewski/Publications/blob/master/TheDaoOfFP/DaoFP.pdf 圏論関係の内容だな
951 名前:デフォルトの名無しさん [2021/10/17(日) 20:37:14.39 ID:DQz0YbVB.net] >>939 すまんリンク探させてしまってすまない ワイが貼るべきやった ワイは圏論わからないから読まずじまいだったわ いつか圏論習得できたらその際に読もうかなって思ってる
952 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:08:39.75 ID:LTEsEtXo.net] プログラミングの本質を学ぶには圏論について学ぶ必要があるということらしい 学んですぐ役立つというものではないようで、すぐ役立つ知識がお望みなら他をあたってくれ、とか
953 名前:デフォルトの名無しさん [2021/10/17(日) 23:35:51.47 ID:QqhGhKAl.net] 見せてもらおうか、圏論とやらを。
954 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 00:33:18.04 ID:BIt/UTxD.net] >>939 同じ著者の Category Theory for Programmers https://github.com/hmemcpy/milewski-ctfp-pdf/releases
955 名前:デフォルトの名無しさん [2021/10/18(月) 02:49:04.06 ID:mrfOLNSK.net] また圏論か もういいよ
956 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 12:08:52.29 ID:7GcdH/zA.net] さあ ねがいを いえ
957 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 15:15:47.20 ID:r9t2S6+p.net] https://www.youtube.com/watch?v=E-48ent631o https://bangumi.ouj.ac.jp/v4/bslife/detail/156936813.html
958 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 12:14:30.91 ID:9P3eVRHd.net] Free monad とは何か? の、シンプルかつ的を射た説明がsrackoverflowにあった。 (John Wiegley の回答) https://stackoverflow.com/questions/13352205/what-are-free-monads これを読んでから他の色んなFree monadの記事を読むと、すんなり理解できる。 これ、本質がよく解っている人の回答だよね。 こんな格好良く回答ができるよう精進したい。
959 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 21:20:57.92 .net] UTF-8 のHaskell ソースコードに書き込んだ日本語文字列を通信先に渡す為に Shift_JIS の String にしたいのですが module Main where import Data.Text.ICU.Convert as ICU import Data.Text as T import Data.ByteString.Char8 as BS main :: IO () main = do conv <- open "Shift_JIS" Nothing let utf8txt = T.pack "皆は、赤ちゃんしゅきぃ?" sjis_bs = fromUnicode conv utf8txt この sjis_bs をどうしたら Shift_JIS の String になるんですか? BS.unpack だと ツ皆ツづ債、ツ静板つソツづ。ツづアツつオツづ」ツつォツつ。ツ? になってしまいます
960 名前:デフォルトの名無しさん [2021/10/22(金) 23:18:21.74 ID:5ielnrPe.net] haskellってpythonに影響与えてるんやな どおりで雰囲気似てる感じするんか
961 名前:デフォルトの名無しさん [2021/10/23(土) 01:09:52.51 ID:o3xA5lbA.net] レイアウトと呼ばれるインデントスタイルは、Pythonが1991年に最初にリリースであり、85年以前にあった Mirandaを参考に1990年にHaskellは登場したはず。
962 名前:デフォルトの名無しさん [2021/10/29(金) 12:55:32.45 ID:SqmTIce6.net] 不動点演算子がわからなくて泣ける 再帰呼び出しになってないのに再帰になってるのはわかるんだけど
963 名前:デフォルトの名無しさん mailto:sage [2021/10/29(金) 18:35:44.90 ID:ZN5Hp6rJ.net] >>951 何が分からないのか分からない
964 名前:デフォルトの名無しさん [2021/10/29(金) 18:40:46.51 ID:uCUCIWXe.net] >>952 なんでわかるんや? 才能か? 後不動点定理がわからん 勉強しろって言われてるけど
965 名前:デフォルトの名無しさん mailto:sage [2021/10/29(金) 20:05:05.45 ID:1mMf/Evz.net] 遅延評価の才能がないと x = f x を思いつかないんだよな y f = f (y f) しか分からない
966 名前:デフォルトの名無しさん mailto:sage [2021/10/29(金) 21:04:54.17 ID:ZN5Hp6rJ.net] >>951 の何もかもが、こちらには分からない。 愚痴を言いたいだけなのか、それとも何か質問をしたいのか。 後者なら、質問内容は何か。 >>953 > 後不動点定理がわからん それだけなら、勉強してくださいとしか言いようがない。 勉強しろと言われているのなら、何か資料が配られたり、 参考文献が挙げられたりしていないのか? そういうのが既にあるのなら、取りあえず全てに当たって、 今分かる部分と分からない部分を徹底的に細かく仕訳してみればいいのでは?
967 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 06:38:08.04 ID:UB8UVAT8.net] >>951 分からないのは何故再帰処理してるのかじゃなくて(そこは定義的に明らかだし)、 どうして無限ループせずに終了するのかでいいのかな
968 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 05:07:45.42 ID:HK5ctRa0.net] やっと Monad クラスから return が消えるよ まだ計画段階たけど https://github.com/fumieval/Haskell-breaking-changes
969 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 21:26:09.61 ID:bsdXePE0.net] なんで消すの?
970 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 02:14:35.96 ID:jBQU3T8q.net] >>958 Applicativeクラスにpure関数があるから。 Monad則やApplicative則を満たしてるなら、 まず間違いなく pure = return だから片方で充分。 それにreturnって名前があまりに実態とかけ離れてるしね。
971 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 12:46:13.83 ID:KyLp+2Ep.net] 初歩的な質問ですが、複数の設定ファイル読み込みするのに readFile で全体取得してから処理するのと withFile で hGetLine しながら処理するのではどちらがいいとかありますか? 主に処理速度の点について聞きたいです。
972 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 18:22:40.27 ID:W9vQbDtp.net] >>960 そういうのは、自分で実験すればすぐに確かめられるのでは?
973 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 21:51:56.85 ID:NLyY6NK4.net] >>959 Applicativeにpureがあるのはなんで? Monadのreturnだけにするのは変ですか? 零元がApplicativeの責務なのがピンときてないんです。Monadだと何と合わないんでしょう
974 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 02:22:00.49 ID:EE8p/B0u.net] >>962 できるだけ一次情報に当たりましょう。 >>957 のリンク先の Planned: remove return from Monad の項目の Proposal のリンク先を読んで下さい。 (更にその先の dudcusdion なども) それが最も正確で、かつ、分かりやすいです。
975 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 21:38:06.78 ID:au51kzu/.net] 正確に綴ってくれ
976 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 22:40:31.75 ID:t6DDIn3B.net] 読んでみたけどよくわかんないなあ。AMPを満たすためにApplicative m => Monad mが必要ってことは書いてあるようだけど Monadからreturnを削除して、pureに統一する理由って書いてあるかな? 読み飛ばしたかもしれんけど。 return = pureだから、統一しても同じっていうのは分かるんだけど、Applicativeにpureが必要な理由がわからない。 Applicativeの4つのルールを満たすためにpureが必要なことは、Applicativeの定義に書いてあるけど、圏論わかんないから、このルールが何で必要なのか分からん。 Monoidal Functor?とかいうやつの表現のために単位元(零元じゃなかったね)が必要なんだろうけど、圏論わからんないから分からん。 Monoidと関係あるんだろうか。それなら加法のために単位元が必要なのはわかるんだけど。
977 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 22:42:08.60 ID:t6DDIn3B.net] 誰か噛み砕いて教えて下さい
978 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 06:46:33.09 ID:4zMdVbrs.net] より抽象度の高い方であるApplicativeのpureを生かすのは 私はごく自然に感じるけど mappendと<>も機能的にダブってるから 将来Monoidからmappendが消えるよって Monoidのドキュメントに書いてあるけど もしかしてそれも疑問だったりする? Semigroupの方から<>を消して、 Monoidのmappendを残すんじゃダメなの? って
979 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 08:05:13.47 ID:fLzDfeGp.net] >>965 圏論は一切関係なく、いかに誤りの無いプログラムが書けるか、 またソースコードが読みやすくなるかという実用的な理由です。 そういう観点でもう一度読んでみてください。 Haskellは実用的な汎用プログラミング言語であることを目指して作られました。 なので、今回のような理由での提案は個人的にはすごく納得できるし、大賛成です。
980 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 12:44:32.78 ID:f9gix7Cx.net] コメントありがとです。 Semigroupは半群、Monoidは単位元付きの半群ですよね。 言われてみると、<>に統一してmappendは消しても自然な気がする。 すごいHでログ文字列がmappendで追加されていく、サンプルを読んだことがあるので、Monoidは受け入れやすいんです。 Semigroupに単位元がないことは不思議に思わないです。半群というものを聞いたことがあったのと、 ログの例に戻ると、文字列なしのログはありえないと考えれば、単位元がないMonoidがあってもあまり不思議に思わないです。 言ってることが上と変わってきてるかもしれないですが、Applicativeが不思議に思うのは、ここに単位元?(というか単位元を生成する)pureがあること。 Applicativeの結合<*>って持ち上げられた型だけで構成されてます: f (a -> b) -> f a -> f b。 圏論何も知らないで言いますが、単位元pureは持ち上げられた型f aが自然な気がするんです。a -> f aではなく。 雰囲気でそう感じてるだけですが。 そんでもって、a -> f aが登場するのって、Monad.(>>=)だよなあってことで、だったら、returnがMonadにあるのは自然なんじゃないかな、と思うわけです。 そうすると、pureってなんのためにあるんだろう。同じ型ならMonadだけあるほうが自然だなと感じたわけです。 たぶんこれは圏論を知っていれば、変に思わないのかなと思って、そう言ったわけです。 推敲できてない感ありますが、伝わりますかね?
981 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 12:50:22.84 ID:f9gix7Cx.net] ちなみに自分は、自分の価値観に反してるから却下すべきだと言ってるのではなくて、 どうしてこういう構造が正しいの?実際の理論やコードでの利用例に照らしてどんな利点や意味があるのと知りたいだけです。
982 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 15:59:19.97 ID:oGkdvxh0.net] そもそもapplicativeなるものが数学の圏論的に何意味するかよくわからんのだよな monadの方はwikiのmonad (category theory)の項があってキッチリ解説されてるし https://en.m.wikipedia.org/wiki/Monad_(category_theory) Tがcategory C上のmonadであるときfmap Tをμ。η_Tで定めればコレがfunctor C→Cを定義するのもわかるんだけど、applicativeについておんなじような解説が中々見当たらない どっかでDescartes closed categoryがどうたらいうのを見た事あるんだけど誰か知りません?
983 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 16:59:55.76 ID:fpCU2YNN.net] 「アプリカティブ関手はモノイド圏における強laxモノイド関手だよ、何か問題でも?」 https://blog.miz-ar.info/2018/12/applicative-functor/
984 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 17:27:50.45 ID:f9gix7Cx.net] >>971 多分これの概要部分は見てるんですよね。 https://en.m.wikipedia.org/wiki/Applicative_functor 後ろの方はさておき、概要部分は自分はさっぱりでしたが。
985 名前:デフォルトの名無しさん [2021/11/30(火) 20:23:52.94 ID:SegqCGCa.net] haskell勉強しようかなって思ってるんですけどおすすめ書籍ってなにかありませんか? ちなみにocamlでプログラム書いたことあります 型システム入門を原文で7割ほど読破しました ちなみに大学受験の数学はそこそこ自信あります 一階述語論理の記号扱って解いていました 圏論の知識はありません
986 名前:デフォルトの名無しさん [2021/11/30(火) 20:27:04.88 ID:SegqCGCa.net] ちなみにモナドは日本語版wikipediaの記事を読んだのみです 型クラスはわかります MaybeまではわかりましたがIOモナドで躓きました ocamlとは違って参照型がない言語だってことは意外に思いました
987 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 00:19:03.82 ID:c82IwjxK.net] (>>=)がただのデータコンストラクタだったらモナドはただの構文木なのに data M b = Bind (M a) (a -> M b) | ... みたいな定義ができない型システムだから 代数的データ型を使わないでラムダをたくさん使うことになってみんな躓く
988 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 13:13:42.19 ID:kpMV/tat.net] そりゃそうやろ? データコンストラクタと展開されるべき関数の違いをプログラマが指定しなければ処理系は与えられたexpressionをどこまで展開すべきか決定できんやろ?
989 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 14:49:59.14 ID:ISSe07L0.net] >>974 Haskellを始める前に仕入れたそのような知識やOCamlの経験が、 Haskellの学習にいったいどんな影響を与えるのか、 楽にするのか、それとも邪魔にしかならないのか、正直まったく分からん。 Haskellで何をしたいのか、目的や目標も分からんし。 なので、Haskell入門者という観点だけで次の2点をすすめる。 さっと要点を学んで早くアプリを作り始めたいのなら、薄い入門書で十分。 「Learn You a Haskell for Great Good!」 が良いと思う。 ガッツリ学びたい、かつ、時間と根気があるのなら、 「Haskell Programming from first principles」 がおすすめ。 詳しくはどちらも公式サイトを参照して。 なにで学習するにしても、手や頭を動かす(プログラミングする)のが主で、 本やドキュメントを読むのは従であることを忘れずに。
990 名前:デフォルトの名無しさん [2021/12/02(木) 17:56:37.45 ID:35Q5ApkZ.net] >>978 すみません 関数型言語って敷居が高そうなイメージあってやるにはある程度数学の素養が求められるのかなって思っていろいろ自分なりの知識があるところ挙げてみました 特に型システム入門は型推論の理論とか分かっていたほうがいいのかなと思って読んでいました まずはLearn youの方を読んで見ようと思います ありがとうございました
991 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 20:33:40.95 ID:c82IwjxK.net] >>977 ただし、IOモナドは「展開」できない方がいい そうすれば処理系がexpressionをどれだけ「展開」しても副作用がない
992 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 12:11:46.65 ID:78Ep1iUH.net] あの伝説の岡部健が復活!! https://twitter.com/ken74047924 (おまけ情報) Quoraでも有名だった岡部健、2021年12月にTwitterのアカウントまたまた永久凍結される。 当時のアーカイブは多少ネットに残ってるらしい https://twitter.com/KenSmooth5 https://i.imgur.com/Ws4RM1o.png (deleted an unsolicited ad)
993 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 12:13:53.75 ID:l8dEnSpn.net] 毛の壁から国民を守る党 72議席目 https://lavender.5ch.net/test/read.cgi/net/1615613906/
994 名前:デフォルトの名無しさん [2021/12/14(火) 12:34:07.62 ID:iFoIKYew.net] IQ145の人?
995 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 12:57:57.79 ID:IE9oyXDX.net] >>983 よく覚えてるな 最近はkensmoothってアカウントを連番で取得して、ネトウヨムーブを連発してたんだけど全部凍結されて今のアカウントになってる あのネトウヨ投稿はなんだったんだろう
996 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 17:15:27.20 ID:Ad592Fxk.net] >>981 うわあ
997 名前:デフォルトの名無しさん [2021/12/14(火) 17:39:35.08 ID:iFoIKYew.net] >>981 なにこの一覧
998 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:35:50.33 ID:SgMFGeMD.net] 岡部健、Twitter再開してたのねw Newbieとはご無沙汰してたから知らんかったわw
999 名前:デフォルトの名無しさん [2021/12/14(火) 19:46:12.10 ID:oL+i1N1M.net] ツイッター再開おめでとうございます! 来年はべーやんの年になる! と良いですね!
1000 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:17:24.22 ID:8Kmj5/YX.net] >>981 こはひどい
1001 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:19:44.63 ID:3V9aUzHV.net] 岡部の最近凍結されたアカウントのツイートみっけた https://archive.ph/7pepg
1002 名前:デフォルトの名無しさん [2021/12/14(火) 22:22:42.89 ID:oL+i1N1M.net] べーやんは論客なんだな。
1003 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:38:20.35 ID:sz+GbZW0.net] UCLAを卒業したという話は封印したみたいね なぜ?
1004 名前:デフォルトの名無しさん [2021/12/14(火) 22:53:00.93 ID:oL+i1N1M.net] たまたまでは?
1005 名前:デフォルトの名無しさん [2021/12/14(火) 23:06:41.51 ID:dwtzMOq3.net] Quoraでいろいろ回答しているがモナドの解説は見事だぞ
1006 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 23:16:06.08 ID:NLEjPnNU.net] こんな話で勢いづいてるんじゃないよ君ら
1007 名前:デフォルトの名無しさん [2021/12/14(火) 23:42:04.31 ID:iFoIKYew.net] >>994 ハラデイ
1008 名前:デフォルトの名無しさん [2021/12/15(水) 00:16:47.05 ID:Xb4w9/yA.net] 「モナドについて学んでいるのですが、mapやflatMapは圏論ではどの概念にあたるのですか?」 具体的に例示していてわかりやすい。
1009 名前:にしやま@大阪大学 mailto:sage [2021/12/15(水) 07:25:32.70 ID:/l12wr0Z.net] 嘘つきケンちゃん、相変わらずですねww 久々にわたくしも腹筋がミシミシと鍛えられました しばらくわたくしも加勢いたします
1010 名前:デフォルトの名無しさん [2021/12/15(水) 08:55:33.56 ID:fP8nqGj3.net] Hugs> take 10 fibs where fibs = 0 : 1 : zipWith (+) fibs (tail fibs) [0,1,1,2,3,5,8,13,21,34] GHCi Prelude> take 10 fibs where fibs = 0 : 1 : zipWith (+) fibs (tail fibs) <interactive>:6:14: error: parse error on input ‘where’ 言語仕様が微妙に異なる? オレメモ、バッチファイル stack ghci を目的のディレクトリ下(例、e:\haskell)に作ってディスクトップにはバッチファイルへのリンクを作っておくと ghci起動後カーソルが消えない 貴重なHaskellスレがもう過ぐ1000行く
1011 名前:デフォルトの名無しさん [2021/12/15(水) 10:41:42.68 ID:BDga5vqT.net] >>981 ぎゃっはっはっはっは
1012 名前:デフォルトの名無しさん [2021/12/16(木) 08:29:00.48 ID:kVJbCKwy.net] 令和の時代に毛の壁ふたたび
1013 名前:デフォルトの名無しさん [2021/12/16(木) 21:29:13.60 ID:k4b05O9+.net] 自分でキャラ演出してるだろ
1014 名前:デフォルトの名無しさん [2021/12/16(木) 21:38:27.93 ID:Y2CVy/MB.net] https://togetter.com/li/773846 ちょまど氏が首突っ込んでるけど、社名背負ってよくこんな書き込み出来るもんだと、驚いた。
1015 名前:デフォルトの名無しさん [2021/12/16(木) 21:46:42.96 ID:OBc86cw8.net] 他の人も叩いているから便乗して死体蹴りしようか的な精神が見て取れる
1016 名前:デフォルトの名無しさん mailto:sage [2021/12/16(木) 21:55:44.07 ID:iDMhxZSI.net] >>1003 毛の壁氏、ですか、なつかしいですね
1017 名前:デフォルトの名無しさん [2021/12/16(木) 21:55:47.51 ID:Y2CVy/MB.net] それはマイクロソフト社の公式見解ですか?って突っ込み入れて欲しいわ。
1018 名前:デフォルトの名無しさん [2021/12/16(木) 22:06:47.71 ID:Y2CVy/MB.net] 教祖だの洗脳だの言いがかりも甚だしいし、「学術的な真理ではないし」云々という自身の書き込みがそのままブーメランだと思うけど。 これを社名背負ってやるんだから頭おかしいわ。
1019 名前:デフォルトの名無しさん [2021/12/16(木) 22:08:34.93 ID:OBc86cw8.net] 誰か次スレ立てろよ
1020 名前:デフォルトの名無しさん [2021/12/16(木) 22:42:52.47 ID:k4b05O9+.net] 結局モナドってなんなのかわからんということにすべて起因してる希ガス 話題になってからもう二十年くらい立つのに結論でないし、数学者でもない限り一生わからんのだろうな
1021 名前:デフォルトの名無しさん [2021/12/17(金) 13:01:29.30 ID:NPioGyUL.net] 新スレを立てました。当スレ(Part33)が埋まってからの利用をお願いします。 関数型プログラミング言語Haskell Part34 https://mevius.5ch.net/test/read.cgi/tech/1639713446/
1022 名前:デフォルトの名無しさん [2021/12/18(土) 00:42:46.36 ID:om0zr0Am.net] >>1009 結論だせる個人は存在するけど 組織になるとなぜか、結論だせない奴が代表者を気取ってるだけじゃん
1023 名前:デフォルトの名無しさん [2021/12/18(土) 11:05:05.98 ID:1fj0JYV9.net] >>1011 結論出せる個人て岡部氏のことっしょ? そういう勢いでどうこうじゃなくって皆を納得させるような結論はないっていうこと
1024 名前:デフォルトの名無しさん [2021/12/18(土) 11:23:52.39 ID:9ehaErM5.net] 納得が遅い
1025 名前:デフォルトの名無しさん [2021/12/20(月) 09:52:36.40 ID:ZumN5JOf.net] https://qiita.com/mod_poppo/items/a6317294ba1e39b1c3b3 コメント欄に毛の壁現る。
1026 名前:デフォルトの名無しさん [2021/12/20(月) 09:52:54.51 ID:ZumN5JOf.net] また誹謗中傷してるので通報よろ
1027 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 678日 15時間 35分 18秒
1028 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています