[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/10 00:15 / Filesize : 342 KB / Number-of Response : 1029
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型プログラミング言語Haskell Part33



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/

388 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 21:54:00.05 ID:jqjR96Dg.net]
>>382
まず、Types and programming languages とSteve Awodey の Category Theory 読んでからや。

Haskell の話するのは。

389 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 22:04:09.80 ID:mrCar2cd.net]
Haskellは魔窟の巣窟や 近寄るものは内臓から食い散らかされるデー

初心者はPythonが最適やろ〜

390 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 17:36:03 ID:CFLjXFs2.net]
>>383-384
ありがとうございました。

Types and programming languagesというのが比較的新しい本なので、興味を持ちました。

391 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 18:54:59.27 ID:CFLjXFs2.net]
クイックソートを行う関数を作ったのですが、エラーが出ます。どこが間違っていますか?

quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = (quicksort [t | t <- xs, t <= x]) ++ [x] ++ (quicksort [t | t <- xs, x < t])

392 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 19:01:32.08 ID:QJrG17W6.net]
>>387
Haskell初心者に限った事柄ではないけれど、
こうした場で質問する者の心構えとして
出てしまったエラーメッセージをコピペする
といった、当たり前の行動は身につけるべきだと思うよ

393 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 19:03:19.26 ID:CFLjXFs2.net]
>>388
ありがとうございます。
エラーメッセージは以下です。

Prelude> :r
[1 of 1] Compiling Main ( baby.hs, interpreted )

baby.hs:153:1: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
153 | quicksort :: (Ord a) => [a] -> [a]
| ^
Failed, no modules loaded.

394 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 19:05:47.77 ID:CFLjXFs2.net]
インデントも間違っていないと思いますし、カッコも問題ないと思うのですが。

395 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 20:38:28.08 ID:0Q701Csj.net]
>>390

>>387 をコピペしたら、俺の環境では動いたよ。
取り急ぎ。

396 名前:デフォルトの名無しさん mailto:sage [2020/08/18(火) 02:46:50.61 ID:rj5JRKyz.net]
153行より前の部分がおかしいんでしょ



397 名前:デフォルトの名無しさん mailto:sage [2020/08/18(火) 10:50:34 ID:QANbTDtx.net]
>>391-392
ありがとうございました。
>>392
ご指摘どおりでした。ありがとうございました。

398 名前:デフォルトの名無しさん [2020/08/19(水) 15:58:22.36 ID:FHOhxH/M.net]
(1)と(2)で同じ関数だそうです。

add :: Int -> Int -> Int

add :: Int -> (Int -> Int)
と等価だそうです。

だとするならば、

(1)のほうが理屈の分かる書き方のように感じます。
(2)はadd' :: Int -> Int -> Intであると宣言しておきながら、その中身の表現を見ると、2つのInt型の引数を受け取ってその和を返す関数にしか見えません。
それにもかかわらず、add' 1は1引数の関数で引数に1を足す関数を表しています。非常に違和感を覚えるのですが、(2)は一体どういうことなのでしょうか?
わかりにくいです。

(1)
add :: Int -> Int -> Int
add n = \x -> x + n
(2)
add' :: Int -> Int -> Int
add' n m = n + m

399 名前:デフォルトの名無しさん [2020/08/19(水) 15:59:38.45 ID:FHOhxH/M.net]
単なる表現方法と割り切ればいいのでしょうか?

400 名前:デフォルトの名無しさん [2020/08/19(水) 16:07:34.77 ID:FHOhxH/M.net]
nに対して、「mにn+mを対応させる関数」を対応させる関数の表記法として、
add' n m = n + m
を採用するというのが非常に不自然に思います。

401 名前:デフォルトの名無しさん mailto:sage [2020/08/19(水) 16:24:31.96 ID:amUamLwq.net]
入門書のカリー化の箇所を読めばいいんじゃね
haskell内での関数は一変数関数として扱えて、
add' n m = (add' n) m
というだけ

402 名前:デフォルトの名無しさん [2020/08/19(水) 16:31:52.13 ID:FHOhxH/M.net]
>>397
ありがとうございます。
(1)の表記法だけ許してほしいと思うんです。(2)だけみたらまるで2変数関数のように見えますから。

403 名前:デフォルトの名無しさん mailto:sage [2020/08/19(水) 20:35:34.21 ID:1ghAy1sC.net]
(今は結合性と優先順位は無視していいので)
n + m

(+) n m
と同じ意味になる。

つまり(2)は
add = (+)
に変数を明示して右辺の演算子を中置記法に戻しただけ

むしろ変数増やしたのが見にくい原因

404 名前:デフォルトの名無しさん mailto:sage [2020/08/20(木) 07:58:20.18 ID:mQjEXV61.net]
>>394
(1) の展開は中途半端で、ちゃんと書くならこう

(0)
add :: Int -> Int -> Int
add = \n -> \m -> n + m

これを(1)や(2) のように書いてもよいというのはHaskellの決め事
慣れないうちは常にこう書いていてもよいが
書くのも読むのも段々面倒になってくると思う
慣れればあまり意識せずに読み替えられるので

ついでに言うと
真の2変数関数が必要ならタプルを用いてこう書く
add'' :: (Int, Int) -> Int
add'' (n, m) = n + m

これらは確かに厳密には区別しなくてはいけないが、
ゆるく同一視しておくほうが便利なことも多いので
Haskellでは(2)のような書き方が許されている、と自分は理解している

405 名前:デフォルトの名無しさん mailto:sage [2020/08/20(木) 08:57:36.69 ID:LuBKaaMH.net]
>>399-400
ありがとうございます。
>>400
(0)
add :: Int -> Int -> Int
add = \n -> \m -> n + m
この書き方が本質的で一番わかりやすいですね。
ありがとうございます。

406 名前:デフォルトの名無しさん [2020/08/20(木) 11:51:35 ID:LuBKaaMH.net]
圏論入門 Haskellで計算する具体例から
雪田修一 (単行本)

図書館に購入リクエスト済みです。楽しみです。



407 名前:デフォルトの名無しさん [2020/08/20(木) 14:53:48.13 ID:uVfTx7sc.net]
>>1 simulationライブラリで純粋な関数式プログラミングをする ttp://x0000.net

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip

408 名前:デフォルトの名無しさん [2020/08/21(金) 10:45:55 ID:VIa1N6p8.net]
関数の合成をする関数(.)を以下のように誤って書きました。
(x -> f (g x))はラムダ関数なので(\x -> f (g x))と書かないといけないと思います。
ですが、以下のコードでちゃんと動作しました。なぜでしょうか?

(.) :: (b -> c) -> (a -> b) -> a -> c
. = \g -> f -> (x -> f (g x))

409 名前:デフォルトの名無しさん [2020/08/21(金) 11:35:07.30 ID:VIa1N6p8.net]
あともう一つ質問があります。

「すごいHaskellたのしく学ぼう!」に「関数合成は右結合なので、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
と書いてありますが、左結合だったとしても、同様に一度にたくさんの関数を合成できるはずです。
左結合だったとしてもf (g (z x))は(f . g. z) xと等価であることに変わりはないはずです。

これは一体何が言いたいのでしょうか?

410 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 18:51:58.39 ID:3Xa4QDEo.net]
>>405
左結合だと等価にならないよ

411 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 18:53:55 ID:VIa1N6p8.net]
(f . g) . z = f . (g . z)だから等価だと思ったんですけど、間違っていますか?

412 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 20:51:03.06 ID:3LvfPoDL.net]
通常の関数適用は左結合だから
f g z x は ((f g) z) x と同じ意味になって
コンパイルエラーになっちゃうけど
関数合成演算子を使うと括弧が減るよ、ということが言いたいはず

関数合成自体は結合的だからそこの向きは確かに関係ないね

413 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 22:34:08.88 ID:nqLClnr+.net]
>>405
単純に
>f (g (z x))は(f . g. z) xと等価です。
は、数学と同じ優先順位ですよってことじゃない?
それ以上の疑問は抱かんかったけど

試してないけど、俺も>>406に同意
多分整数演算で除算演算の関数を関数合成すれば、いくつか試せば同一にならないのは簡単に見つかるはず
引数をたくさん試すだけでも見つかりそう めんどこっいのでやらないけど

414 名前:デフォルトの名無しさん mailto:sage [2020/08/21(金) 23:19:07.20 ID:nqLClnr+.net]
>>407
それってそうなの?

俺は、数学の本好きで読んでるんだけど、そこまで基本的なことは突き詰めてないw
写像の合成が結合則を満たす ものもたくさんありそうだけど、
写像の合成は必ず結合則を満たすものなの?そこから疑問に思った方がいいんじゃない?
数学の本読んでると、右XXと左XXと区別するものが多いんで、普通に満たさないと思ってたw
いや、俺が間違ってるかもしれんから、そこから調べてくれると俺もうれしい

ちなみに、大学数学レベルなのが 1+1=2 の証明。俺は調べたくないw

415 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 00:32:18.31 ID:75MjfSAz.net]
>>410
位相空間論の入門書には大抵書いてあるよ
あと「Haskellによる関数プログラミングの思考法」にも(証明は無いが)言及があった

((f . g) . h) x
= (f . g) (h x)
= f (g (h x))
= f ((g . h) x)
= (f . (g . h)) x

この等号は計算結果が等しいという意味で
途中の時間・空間計算量の違いは気にしていないので念の為

416 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 00:48:03.06 ID:66roH7xF.net]
>>410
しらんけど、位相空間って連続写像仮定してないか?
プログラミング言語でいう写像とは違う
位相空間論で一般的に言われているのならその定理を示した方がいいんじゃない?
個人的には位相空間論の書籍に限定しているのが気になる。どちらかと言うと代数学の方が一般的と思うが。

>あと「Haskellによる関数プログラミングの思考法」にも(証明は無いが)言及があった
こっちはたぶん書籍持ってるかな?ページ数教えてくれる?
四則演算というか群論でいう、逆元を仮定しているとかそんな感じやない?しらんけど

数学ではよくあるけど、仮定が大事 それを無視するから、結論を間違えるのはよくある
貴方が間違えたかどうかは知らんど
写像の合成で結合則が必ず成り立つのなら、そのような記述はどっかの書籍に必ずある
自分は見たこと無い。あるとすれば、なんらかの仮定で限定されている。



417 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 01:01:19.51 ID:fPcZe606.net]
知らん過ぎ

418 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 01:40:43.87 ID:75MjfSAz.net]

419 名前:rget="_blank" class="reply_link">>>412
> 個人的には位相空間論の書籍に限定しているのが気になる。どちらかと言うと代数学の方が一般的と思うが。
位相空間論の〜っていうのは言い方が悪かったかな、「集合と位相」みたいなタイプのやつ
大抵最初の方で一般の集合論をやるのでそういうつもりで言った

仮定が大事というのはその通りで
もちろん連続性も全単射も仮定しない一般の写像に対する定理

集合A, B, C, D と写像 f: C->D, g: B->C, h: A->B に対して
(f . g) . h = f . (g . h) が成り立つ

> >あと「Haskellによる関数プログラミングの思考法」にも(証明は無いが)言及があった
> こっちはたぶん書籍持ってるかな?ページ数教えてくれる?
P.30 第1章 練習問題Eの解答
こっちはあまりにも簡素に書いてあるので見ても何の参考にもならないかもだが…

ただしHaskellには全域でない関数があるから(headとかtailみたいな例外を返し得るやつね)
そういうのが絡むと結合性が怪しいケースはもしかしたらあるかもしれない
[]
[ここ壊れてます]

420 名前:デフォルトの名無しさん mailto:sage [2020/08/22(土) 12:23:17.90 .net]
ここ三年以内に発売されたハスケルの本は?

421 名前:デフォルトの名無しさん [2020/08/22(土) 13:18:34.82 ID:g0O87mtN.net]
空気読まずに有限集合でやってみる。

``` code
#{-# LANGUAGE ExistentialPython #-}
import math;
import random;
import string;
def none ():
dot = lambda bc, ab: {a : bc [b] for a, b in ab.items ()};
make_map = lambda a, b: dict (zip (a, random.choices (b, k = len (a))));
A = tuple (range (5));
B = random.sample (string.ascii_lowercase, 10);
C = random.sample (string.ascii_uppercase, 8);
D = (math.nan, math.inf, None, (), 'hello', 'world');
ab = make_map (A, B);
bc = make_map (B, C);
cd = make_map (C, D);
assert dot (cd, dot (bc, ab)) == dot (dot (cd, bc), ab);
return ((A, B, C, D), (ab, bc, cd));
out = none ();
```

自分の知る限り、素朴な写像の描像が描けないガジェットに対して「写像」という
言葉は使わないので、写像が結合的かどうかという議論に意味があると思えない。

422 名前:デフォルトの名無しさん [2020/08/22(土) 13:19:16.92 ID:g0O87mtN.net]
``` code
#{-# LANGUAGE FunctionalJupyter #-}
import IPython.display as display;
def none (node, edge):
f = lambda col, a: {key : (row, col) for row, key in enumerate (a)};
nodes = {};
for val in [f (j, a) for j, a in enumerate (node)]: nodes.update (val);
edges = [];
for xy in edge: edges += [(nodes [x], nodes [y]) for x, y in xy.items ()];
node_out = r"""<text class='clazz' x='{x}' y='{y}'>{z}</text>""";
edge_out = r"""<line class='clazz' x1='{x_0}' y1='{y_0}' x2='{x_1}' y2='{y_1}'/>""";
out = '';
w, h, dw = 100, 20, 20;
for key, val in nodes.items (): out += node_out.format (x = w * val [1], y = h * val [0], z = key);
for a, b in edges: out += edge_out.format (x_0 = w * a [1] + dw, y_0 = h * a [0], x_1 = w * b [1] - dw, y_1 = h * b [0]);
style = r"""<style> text.clazz { dominant-baseline: middle; text-anchor: middle; } line.clazz { stroke: black; fill: none; } </style> """.strip ();
svg = f"""<svg width='400' height='300' viewBox='{-20} {-20} {len (node) * w + 20} {max (map (len, node)) * h + 20}'>{out}</svg>""";
display.display (display.HTML (style + svg));
return None;
none (*out);
```

423 名前:デフォルトの名無しさん [2020/08/22(土) 13:31:18 ID:DGMheHKA.net]
それで?
会話や食事の中の唾液飛沫の3次元シミュレーションが出来るんですか?

424 名前:デフォルトの名無しさん [2020/08/22(土) 13:35:02 ID:j3K8XBr1.net]
>>404
あれ、これ今日コンパイルしたらエラーが出た。
単にコンパイルしていなくて、ghciで用意されている(.)を使ってテストしていただけみたいです。

以下の合成関数のコードはおそらく正しいと思います。
comp :: (b -> c) -> (a -> b) -> a -> c
comp = \f -> \g -> (\x -> f (g x))

425 名前:デフォルトの名無しさん [2020/08/22(土) 13:36:18.12 ID:j3K8XBr1.net]
圏論入門 Haskellで計算する具体例から (日本語) 単行本 ? 2020/8/19
雪田 修一 (著)

この超人気の本を読んだ人いますか?

426 名前:デフォルトの名無しさん [2020/08/22(土) 13:41:29.64 ID:j3K8XBr1.net]
>>419
この関数の書き方を一度書いたら、
func a b = …
みたいな書き方は気持ち悪くて嫌になりますね。



427 名前:デフォルトの名無しさん [2020/08/22(土) 13:45:41.47 ID:j3K8XBr1.net]
すごいHaskell、やっと5章まで読み終わりました。
この辺りから難しくなりますか?

428 名前:デフォルトの名無しさん [2020/08/22(土) 21:29:49.29 ID:YtG8IJDk.net]
難易度竹。

429 名前:デフォルトの名無しさん [2020/08/22(土) 21:45:32.55 ID:j3K8XBr1.net]
すごいHaskellの6章を読んでいますが、いきなり難しくなりました。

find :: (a -> Bool) -> [a] -> Maybe a
のMaybe aというのは探している要素が見つからなかった場合に返されるNothingが属するような型を用意したかったからですか?

430 名前:デフォルトの名無しさん [2020/08/22(土) 21:46:48.62 ID:j3K8XBr1.net]
もしそうだとして、質問なんですが、Nothingはあらゆる型に属すると約束すればいいだけの話ではないんですか?

431 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 07:53:38.79 ID:m55Vd3Cb.net]
「null安全」でググれ
かつて、あらゆる型に属するnullを導入していた言語が、
nullのない型を別途導入する方向に動いている

432 名前:デフォルトの名無しさん [2020/08/23(日) 10:09:34 ID:ts+Zp8he.net]
ヌルポはどこにバグがあるかを教えてくれるが、
ボトポにはそれさえない。

``` code
bottom :: a
bottom = bottom

dangerous_find :: (a -> Bool) -> [a] -> a
dangerous_find _ [] = bottom
dangerous_find pred (a : as) = if pred a then a else dangerous_find pred as
```

ただ役に立たないというだけでなく、
危険なほど役に立たない関数も作りたければ作れる。

433 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 11:59:38.54 ID:PT3WAMjf.net]
>>405
これ、左結合が出来ないからじゃない
考え方としては左結合はありなんだろうけど、
実質無いということ

f.g.h x で左結合やろうとしても、

関数適用と合成の優先順位で関数適用の方が優先される
結果として右結合にしかならない。

434 名前:デフォルトの名無しさん [2020/08/23(日) 12:29:03 ID:hbFjgy0U.net]
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip

435 名前:デフォルトの名無しさん [2020/08/23(日) 13:32:54.91 ID:41ZiKAKU.net]
>>428
「関数合成は、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
だったら、違和感がないんですが、
「関数合成は右結合なので、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
には違和感を感じます。

一度にたくさんの関数を合成できる理由が関数合成が右結合だからというのはやはりおかしいと思います。

436 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 13:36:29.73 ID:41ZiKAKU.net]
Function composition is right-associative, so we can compose many functions at a time.
The expression f (g (z x)) is equivalent to (f . g . z) x.

これが原文です。翻訳がおかしいわけではないようですね。



437 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 13:53:55.24 ID:PT3WAMjf.net]
関数適用を合成より優先順位上げる条件のもと
合成を左結合でλ式に落とし込こんでみればいいんじゃない

出来るのなら俺の間違い 出来ないのなら
左結合では合成が出来ないのだから、文章も間違ってない

と思っただけ

438 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 16:12:09.03 ID:ZATaa76b.net]
>>430
確かに俺も疑問に思ってた
結局何が言いたいんだ?ってなってそのまま放置してたわ

439 名前:デフォルトの名無しさん [2020/08/23(日) 16:16:46.30 ID:41ZiKAKU.net]
>>426
ありがとうございました。検索してみようと思います。

>>427
ちょっと何を言っているのか分かりませんでした。

440 名前:デフォルトの名無しさん [2020/08/23(日) 23:06:04.74 ID:ts+Zp8he.net]
ごめん、関係ないと書いておくべきだった。
今後は、自分の投稿は全て無視して欲しい。
誰かの質問に答えているつもりはなくて、
プログラミングのネタを拾っているだけ。

ついでなので、前回のペーストビンにアップしたネタについて書く。

まず、タプル、状態、継続以外の随伴はちゃんとしていない。
アウェイの圏をちゃんと書こうとすると泣きが入る。Haskellは集合の圏では
超強力だが、それ以外の圏に対しては並になる。中は見てないが、
[species](https://hackage.haskell.org/package/species)では、
圏をほぼフルスクラッチで作っているんじゃないかと思う。
で、コードにする段階でウソをついているのだが、素直にウソをつけば、
上手く行くことがあるということがあそこで得た教訓。

あそこに書いたモナドでパラメーター対象を2つ持つモナドは全て`R p (L p a)`
という形をしているが、コードでは型宣言を省略しているので、結局、
非対角成分を含めた`R p (L q a)`という形の関手についてのKleisli合成が
得られている。それがレンズが出てきた理由の一つ。
書いたときは知らなかったのだが、非対角成分を含めた関手を
[インデックスモナド](https://stackoverflow.com/questions/28690448/what-is-indexed-monad)
というらしい。パラメーター対象をもつ随伴からKleisli合成を計算すれば、
自然とインデックスモナドになってしまう。ただし、圏論プロパーに
インデックスモナドと言っても通じないと思う。Haskellでの専門用語だと思う。

441 名前:デフォルトの名無しさん [2020/08/25(火) 10:01:02.60 ID:d4SFWo3v.net]
Data.Mapについて質問です。

キーがOrd型でないといけないという制約があります。

これは、Mapの実装でキーのデータ構造がハッシュではなく、2分探索木のようなものだからでしょうか?

442 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 18:47:32.02 ID:NgJQjBWI.net]
>>436 ドキュメントにそれっぽいことが書いてあるけど
https://hackage.haskell.org/package/containers-0.6.3.1/docs/Data-Map-Strict.html

> The implementation of Map is based on size balanced binary trees (or trees of bounded balance) as described by:

> If you don't care about ordering, consider use Data.HashMap.Strict from the unordered-containers package instead.

443 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 20:49:35.22 ID:d4SFWo3v.net]
>>437
ありがとうございました。

444 名前:デフォルトの名無しさん mailto:sage [2020/08/27(木) 10:07:06.62 ID:TufIdPw/.net]
Jupyter NotebookでHaskell使うならこれ
環境構築の手間が省けるのでおすすめ
Chromebook、iPad、Windows 10 Sモードなどで使えるかは知らない
https://mybinder.org/v2/gh/gibiansky/IHaskell/master

IHaskell
https://github.com/gibiansky/IHaskell
> You can now try IHaskell directly in your browser at CoCalc or mybinder.org.
Alternatively, watch a talk and demo showing off IHaskell features.

445 名前:デフォルトの名無しさん mailto:sage [2020/08/27(木) 11:10:22.56 ID:sFui1x5L.net]
やっぱ最近新しい言語勉強するときはjupyter note book重宝する

446 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 11:44:03.31 ID:8bIwySwM.net]
ついにメンテのされてないgladeが最新のghcじゃビルドできなくなった
シコシコGUI作るの面倒くさくて意気消沈



447 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 12:26:16.24 ID:5nZNKLNm.net]
はすけらはjs嫌いだろうけど(偏見)elmかpurescriptなら使えるだろ

448 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 12:57:36.50 ID:lCzdfIoX.net]
デスクトップGUIアプリの大半はWebブラウザアプリで代替できる。
これを機に、一度こだわりを捨ててみるのも良いかも。

449 名前:デフォルトの名無しさん [2020/08/28(金) 13:05:48.93 ID:LLs1s+XQ.net]
Webブラウザアプリの大半はデスクトップGUIアプリの方が使い易い。

450 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 14:56:59.18 ID:5nZNKLNm.net]
だよな。はすけらならpurescriptでelectronだよ。

451 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 15:48:19.78 ID:jEdLmLEr.net]
pureselectか

452 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 16:04:05 .net]
書いて三日以内のコードをビルドしました

453 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 11:24:16 ID:uCpf8zkM.net]
質問です
次のプログラムが走りません
Ratio Integer型の割算です
mainの最後の行を受け付けてくれません

import Data.Ratio
import Data.Complex

(///) (x:+y) (z:+w) = let
d = z^2 + w^2
in ((x*z-y*w)/d):+((x*w+y*z)/d)

x :: Ratio Integer
x = 1%1
y = 3%1
z = 2%1
w = 4%3

main = do
print $ (x:+y) /// (z:+w)
print $ x / (z^2+w^2)
print $ (x:+y) /// ((z:+w) + (x:+y))

454 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 11:24:49 ID:uCpf8zkM.net]
エラーメッセージは以下です
何がダメかどなたかわかりませんか?

Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow

Compiling your program...

[1 of 1] Compiling Main ( prog.hs, prog.o )

prog.hs:23:25: error:
• No instance for (RealFloat (Ratio Integer))
arising from a use of ‘+’
• In the second argument of ‘(///)’, namely ‘((z :+ w) + (x :+ y))’
In the second argument of ‘($)’, namely
‘(x :+ y) /// ((z :+ w) + (x :+ y))’
In a stmt of a 'do' block:
print $ (x :+ y) /// ((z :+ w) + (x :+ y))
|
23 | print $ (x:+y) /// ((z:+w) + (x:+y))
| ^^^^^^^^^^^^^^^

455 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 11:27:13 ID:uCpf8zkM.net]
あ、11行目は
in ((x*z-y*w)/d):+((-x*w+y*z)/d)
でした
でも同じエラーメッセージ出てきます
何故でしょう?

456 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 14:19:38.49 ID:ubwYKL6u.net]
>>448
自己レスです
もしかしてこの型制限ですかね?

RealFloat a => Num (Complex a)

Complex a型がNumクラスに入れるのはaがRealFloat型の時しかダメだからでしょうか?
この制限はなんでこんなにキツイんだろ
足したり引いたりしたいだけなのに



457 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 15:28:05 ID:0W5gc2Gs.net]
>>451
自作のComplexクラスをNum型クラスのインスタンスにしてみようとすると気づくんだけど
Numってなぜかabs関数を実装しないといけないんだよね
それで複素数の妥当な絶対値関数を書くにはsqrtが必要だけど
Numだと計算できないので…という理屈のはず

Haskellの標準の数値型に対する不満はちょくちょく見かけるけど
歴史的経緯もあって現状はしょうがないということになってるはず

458 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 15:32:06 ID:mGp/4vHZ.net]
>>451
https://downloads.haskell.org/~ghc/latest/docs/html/libraries/base-4.14.0.0/src/Data-Complex.html
でData.ComplexのソースコードでNumクラスのインスタンス定義を見たところ
メソッドabsとsignumの実装に
magnitude :: (RealFloat a) => Complex a -> a
を使ってるからみたいだね

本当に足したり引いたりしたいだけならNum制約は強すぎる
数のクラス体系の問題点について詳しくは
https://blog.miz-ar.info/2016/06/haskell-num-class/

459 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 17:39:55.49 ID:z5he+9Sw.net]
>>452
>>453
ありがとうございます
まぁabsが必須ならしょうがないですね
なんか考えます

460 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 00:20:32.36 ID:XlY0VH6O.net]
Complex RationalにNumのinstance宣言できないかと思って以下のようにしてみました

instance Num (Complex Rational) where
(x:+y) + (x':+y') = (x+x') :+ (y+y')
(x:+y) - (x':+y') = (x-x') :+ (y-y')
(x:+y) * (x':+y') = (x*x'-y*y') :+ (x*y'+y*x')
negate (x:+y) = negate x :+ negate y
abs z = undefined
signum z@(x:+y) = undefined
fromInteger n = fromInteger n :+ 0

結果以下のようにそれは無理と怒られます
何かてはないでしようか?

Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow

Compiling your program...

[1 of 1] Compiling Main ( prog.hs, prog.o )

prog.hs:7:10: error:
• Illegal instance declaration for ‘Num (Complex Rational)’
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use FlexibleInstances if you want to disable this.)
• In the instance declaration for ‘Num (Complex Rational)’
|
7 | instance Num (Complex Rational) where
| ^^^^^^^^^^^^^^^^^^^^^^

461 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 11:01:46.76 ID:rDcCtqL6.net]
知らんけどコンパイラの言う通りFlexibleInstances使ったら?

462 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 13:16:55.43 ID:m1GQ7XMv.net]
意味も分からずコンパイラの指示に従ってばかりいても、
初心者の域は抜けられない

でも、コンパイルできなきゃモチベーションが下がるから、
取りあえず従っとけ

463 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 17:00:23.04 .net]
でた!おまじない!

464 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 17:10:43.28 ID:rDcCtqL6.net]
標準のhaskellだと

instance 型クラス 型構築子
instance 型クラス (型構築子 型変数1)
instance 型クラス (型構築子 型変数1 型変数2)


って形式のインスタンス宣言にしか対応してないからな

instance 型クラス (型構築子 型構築子)

って書きたいなら言語拡張使えって言われる

言語拡張使うか、あるいは、もっと一般的なインスタンス宣言
instance Num a => Num (Rational a)
とかにしたら?

465 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 18:26:13.20 ID:mkAi3PX1.net]
皆さんご助言ありがとうございます
実は家のパソコン壊れててHaskellはオンラインHaskellコンパイラというので当座を凌いでるんですがコレコンパイラオプションもインラインプラグマ?とかいうのも使えないっぽくてFlexible Instanceとか使いたくても使えないんです
Num Rationalは標準で入ってます
入れられなくて困ってるのはNum (Complex Rational)なんです
Num a=>Num (Complex a)
は二重定義でダメだと怒られます

prog.hs:55:12: error:
Duplicate instance declarations:
instance Num a => Num (Complex a) -- Defined at prog.hs:55:12
instance RealFloat a => Num (Complex a)
-- Defined in ‘Data.Complex’
|
55 | instance Num a => Num (Complex a) where
| ^^^^^^^^^^^^^^^^^^^^^^^^

466 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 18:28:35.47 ID:mkAi3PX1.net]
しょうがないのでとりあえずComplex Rationalを“カプセル化”してみました
複素座標0,3,4i,7/2+7/2iである4点が同一円周上にあるか確認するプログラムです
同じ事をComplex Floatとかでやると丸め誤差で誤判定してくれます
できるんですがちょっと不愉快ですね



467 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 18:28:47.62 ID:mkAi3PX1.net]
import Data.Ratio
import Data.Complex

data ComplexRational = CR (Complex Rational) deriving (Show,Eq)
instance Num (ComplexRational) where
(CR (x:+y)) + (CR (x':+y')) = CR $ (x+x') :+ (y+y')
(CR (x:+y)) * (CR (x':+y'))
= CR $ (x*x'-y*y') :+ (x*y'+y*x')
negate (CR (x:+y)) = CR $ negate x :+ negate y
abs = undefined
signum = undefined
fromInteger n = CR $ fromInteger n :+ 0
instance Fractional (ComplexRational) where
recip (CR (x:+y))= CR $ (x/(x^2+y^2)):+(-y/(x^2+y^2))
toComplex (CR x) = x

i = CR $ 0:+1

onCircle a b c d = (==0) $ imagPart $ toComplex $ ((a-c)/(b-c))/((a-d)/(b-d))

a=0
b=3
c=4*i
d=7/2+7/2*i

main = do
print $(1/2+3/4*i)/(5/6+7/8*i)
print $ onCircle a b c d

-----
CR (618 % 841 :+ 108 % 841)
True

468 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 16:35:31.39 ID:VDk3Uebh.net]
すごいHaskell、7章を読んでいますが、正直、重要ではあるが面白くない内容なので読むペースが遅くなってしまっています。
最後まで読み切ろうと思います。

469 名前:デフォルトの名無しさん [2020/09/03(木) 16:55:07.23 ID:VDk3Uebh.net]
図書館にリクエストした以下の本を買ってもらうことができて、明日、借りられることになりました。
楽しみです。

圏論入門 Haskellで計算する具体例から
雪田 修一 (著)

470 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 20:26:41.82 ID:zDdu0cA6.net]
雪田著『圏論入門』を借りてきました。
圏論、難しい上につまらないです。

471 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 20:35:32.88 ID:4VK1Z/Kj.net]
何を期待して借りたのやら

472 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 21:42:59 ID:W/y0jTmz.net]
圏論はモナドへの近道

473 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 02:01:31.05 ID:hzZ7uEzq.net]
>>460
です
自己レスです
色々調べて一応Complex RationalにNumのinstance入れる方法見つけました
しかしかなり裏技というか、あまり関心しない方法かもしれません
やはり正攻法は>>462のようにカプセル化する方だと思いますけど、せっかく見つけたのでうpします
>>462と同じく0,3,4i,7/2+7/2iが同一円周上にあるか確認するプログラムです
ついでにabsも使えるようにしてあります
absがいらないならsqrt=の部分がなくても動作します

474 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 02:03:13.00 ID:hzZ7uEzq.net]
import Data.Ratio
import Data.Complex

instance (Integral a)=> Floating (Ratio a) where
sqrt = fromRational.toRational.sqrt
.fromRational.toRational
instance (Integral a) => RealFloat (Ratio a) where
floatDigits = floatDigits.fromRational.toRational
decodeFloat = decodeFloat.fromRational.toRational
scaleFloat k x = if k > 0 then x*2^k else x/2^(-k)

475 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 02:03:23.39 ID:hzZ7uEzq.net]
i = 0:+1%1

onCircle a b c d = id
$ (==0)
$ imagPart
$ ((a-c)/(b-c))/((a-d)/(b-d))

(a,b,c,d)=(0,3,4*i,7/2+7/2*i)

main = do
print $(1/2+3/4*i)/(5/6+7/8*i)
print $ onCircle a b c d
print $ ((a-c)/(b-c))/((a-d)/(b-d))
print $ abs $ 2+3*i
print $ abs $ 15+8*i
----
618 % 841 :+ 108 % 841
True
4 % 7 :+ 0 % 1
8118979690322419 % 2251799813685248 :+ 0 % 1
17 % 1 :+ 0 % 1

476 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 13:15:04.05 ID:T3msgi7J.net]
純粋に興味のみからすごいHaskellを読んでいるのですが、みなさんはなぜHaskellを使っているのですか?



477 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 13:35:41.51 ID:EwmIpy36.net]
宣言的に書けた時の気持ち良さがたまらんから

478 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:03:13.58 ID:T3msgi7J.net]
>>472
やはり実用よりは趣味ということですね。

479 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:05:39.74 ID:14+GNjHV.net]
Haskellで書かれた実用的なアプリ無いからな。

480 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 17:37:30.47 ID:acNOQ2m1.net]
『Haskellによる関数プログラミングの思考法』って出たの3年前なのに書籍版はもう絶版なんだな
旧版を元にした『関数プログラミング入門』の方はまだ売ってるけど

481 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 18:22:32.54 ID:r4XBIbpb.net]
3年で消えてもらった方が新しい商品が売れるという実用的思考
永久保存など消費者の趣味だ

482 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 18:33:16.32 ID:mscSzbua.net]
>>474
pandoc は?

483 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 01:05:18.13 ID:lOdtO6cj.net]
>>474
Elmコンパイラは?
PureScriptコンパイラは?
spagoは?

484 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 01:51:45.47 ID:Z433FiXx.net]
HaskellっていうかParsecが優秀なんだろな

485 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 22:23:29.89 ID:YBPAq9+r.net]
>>471
パーサーを書く必要があって使い始めた

486 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 11:55:03.70 ID:xmFuETjj.net]
純粋に興味からです



487 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 17:09:40 ID:6+huFxV7.net]
>>467
マクレーンの圏論とか読んでも果てしなく遠回りするだけだぞ。

488 名前:デフォルトの名無しさん [2020/09/07(月) 17:57:43 ID:kXMphwO9.net]
>>482
ベーシック圏論はどうですか?

489 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 18:10:28 ID:oaoIrH3d.net]
haskellのモナド理解するだけなら圏論いらないからね

ベーシック圏論は内容を限定して敷居の低い例を使っているので相対的には
読みやすいけど、基礎的な数学の知識がないと例が理解の助けにならないのは同じ

490 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 20:28:07.77 ID:xmFuETjj.net]
関手って圏が持つ「対象と射」同志の関連付けのことだよね?
なぜfmap関数を定義すると関手を実装したことになるの?

491 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 21:15:30.28 ID:3sLeGs6G.net]
fmapという名前が変
関手は射と見なせる

492 名前:デフォルトの名無しさん [2020/09/08(火) 01:49:12.47 ID:L2ZCtfX62]
副業、大手も制度着々…コロナ禍、働き手は空き時間活用
https://www.itmedia.co.jp/business/articles/2009/07/news111.html
富士通「年収3500万円」の衝撃 ソニー、NECも戦々恐々の「グローバル採用競争」
https://www.itmedia.co.jp/business/articles/2008/21/news031.html
東大の起業ラッシュは本物か、大学発ベンチャー数日本一の実力
https://business.nikkei.com/atcl/NBD/19/special/00448/
AI研究の第一人者、東大・松尾研でも起業ラッシュ
https://business.nikkei.com/atcl/gen/19/00158/051900002/?i_cid=nbpnb_arc
失敗は認める、多数決はダメ。拡大する「社会起業家集団」の作り方
https://newswitch.jp/p/23033
新卒“即”起業せよ。社会起業家への最短距離に挑む若者たち
https://newswitch.jp/p/23020
人々の共感を得られないと潰される時代。
https://news.yahoo.co.jp/articles/37aef71415e8181ce8451e27feb3983bf1f6f9cd
ゼロから起業するよりも事業承継(小さな会社の買収)が圧倒的に有利である3つの理由
https://honsuki.jp/pickup/17323.html
「エース人材だって起業OK」、NECは挑戦者が集う場をつくる
https://business.nikkei.com/atcl/gen/19/00106/012900003/
NECなど「出向起業」 大企業人材、起業しやすく
https://www.nikkei.com/article/DGXMZO61733720Q0A720C2TJ1000/

493 名前:デフォルトの名無しさん [2020/09/08(火) 01:52:19.60 ID:L2ZCtfX62]
70億円調達のネットショップ作成サービスhey、「我の弱い人同士の組織力」武器にEC市場シェア拡大目指す
https://www.businessinsider.jp/post-219205
【劇団ノーミーツ1】役者も客も会わないオンライン演劇で7000人動員。制作チームは全員20代、半分は会社員
https://www.businessinsider.jp/post-219184
「ガーナのゴミ」がなぜ1点500万円の作品に変わるのか
https://www.businessinsider.jp/post-208314?itm_source=article_link&itm_campaign=/post-219184&itm_content=https://www.businessinsider.jp/post-208314
利用、無料。日本版衛星データプラットフォーム「Tellus」がすごい理由…“宇宙の視点”でビジネスはこう変わる
https://www.businessinsider.jp/post-219279
「起業ブーム」が新たなフェーズに 大学発ベンチャーへの想い
https://forbesjapan.com/articles/detail/35527
かつて学者がやっていたことを、今は起業家がやっている
https://diamond.jp/articles/-/232874
番号やアドレス不要の無料通話アプリRe-mo登場 ドワンゴが配信開始
https://japanese.engadget.com/ios-dwango-re-mo-072853620.html

494 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 09:53:26.80 ID:TuvEFz+K.net]
勝俣「シャー!」

495 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 10:39:29.87 ID:o85d1us6.net]
圏の圏な

496 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 11:37:10.69 ID:sfIbn56V.net]
圏論いらずで、モナド理解するのにどうすりゃいいの?



497 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 12:18:16.37 ID:/Y+BdKRx.net]
do記法が使えるようになる

モナド=>モナド則を満たす=>do記法はモナド則の別バージョン

結局のところ、モナドはdo記法を作りたかった。よって、先頭の話になる。

498 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 12:43:31.80 ID:/Y+BdKRx.net]
ちょっと嘘だな
488は既にあるモナドを使う場合の話で

自分でモナドを作ってみたいのなら
モナド則を満たしていることの確認が必要 
ってことで、モナド則の勉強も必要

個人的にモナドが一番分かり易かったのは、↓かな

サルでもわかるIOモナド@-B
hot-heart-cool-mind.seesaa.net/article/393131366.html

499 名前:デフォルトの名無しさん [2020/09/09(水) 12:59:11.96 ID:7PwBIIdR.net]
モナドというのが何なのか知らないのですが、モナドが何か分かっていないとモナドは使えないものなんですか?

500 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 13:33:56.84 ID:Ss6OMKhc.net]
Haskellで出てくる演算子の読み方一覧ってないですか?

501 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 18:46:46.75 ID:7PwBIIdR.net]
>>494
それともHaskellという言語は何でもかんでもある数学的に説明できるように設計されていて気持ちがいいというだけのことでしょうか?

502 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 18:50:44.11 ID:N/YnHGom.net]
低学歴の数学弱いなのに、頑張ってHaskellで開発の会社に潜り込んで仕事してる人も居るから。

503 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 19:41:50.73 ID:YuHH3QPI.net]
高卒のワイでもプロのHaskellerになれるん?
その方法教えて欲しいわ。

504 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 19:44:40.13 ID:7PwBIIdR.net]
仕事でHaskellを使っている会社があるのですか?
実用面でのHaskellの利点があるということですか?

505 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 19:58:00.07 ID:7PwBIIdR.net]
「Haskellの美しさを知っている人は、人生に絶望することはない。Haskellで世界を変えたい。」などと表紙に書かれているHaskellの本が
ありますが、そんな大げさなものでしょうか?

単なる一プログラミング言語ではないんですか?

506 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 20:15:19.85 ID:+oYkcMI9.net]
型システムが強力ってだけで実用上有利
現実、型がしょぼい言語よりバグ減るし、
型から関数探せるから既存プログラムの再利用性高いし、
ウェイがノリで作る「イケてる」オレオレライブラリなんかにも型の合うある程度まともな設計が求められるし



507 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 20:16:27.76 ID:YuHH3QPI.net]
それは持てる者がほざく絵空事やでw

508 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 20:56:40 ID:/Y+BdKRx.net]
んじゃ、async/awaitがモナドで実装できるんやでー

詳細はしらんけどw

509 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 22:27:03 ID:M9aZojkl.net]
IDEは何がおすすめ?

510 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 02:20:35 ID:6Lrmk0HC.net]
らっきょ

511 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 08:33:57.45 ID:OHVt/ux7.net]
俺も聞きたいけどVScodeじゃ辛い?

512 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 13:10:19.99 ID:he9lsIhb.net]
>>500
理解した途端にこんなしょー

513 名前:烽ネいことでドやってたのかと絶望するよ。 []
[ここ壊れてます]

514 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 22:58:53.84 ID:dNbZ7rGGn]
デキる人ほどフリーランス化する?★働き方改革
https://www.youtube.com/watch?v=ALflcwYOJtQ
年収890万円以下は社会のお荷物★騙される労働者
https://www.youtube.com/watch?v=CAp-ZrJpF54
騙されたくなかったら勉強しろ★他人のルールは損をする
https://www.youtube.com/watch?v=s176O6qKuPw
底辺の99%は一生底辺★10年後が見えない同僚たち
https://www.youtube.com/watch?v=4Mfiwn2sPD8
稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ?
https://www.youtube.com/watch?v=Fi7bILN4wes
サラリーマン思考では儲からない理由
https://www.youtube.com/watch?v=iW6oAo0q0ZI
で、無職は稼いでるの?★YouTube収益はアホにも分かりやすい
https://www.youtube.com/watch?v=md0WPAsfarY

515 名前:デフォルトの名無しさん [2020/09/12(土) 10:38:44.00 ID:A2+hHxph.net]
[分数モナド](https://ncatlab.org/nlab/show/Grothendieck+group+of+a+commutative+monoid)

日常生活でも目にする`2 / 3`のような分数表記はモナドになっている。
吸収元の問題があるので、ネタとしては引き算`2 - 3`の方が扱いやすいが、
引き算の場合、`2 - 3 = - 1`のように計算してしまった結果が使われ、
日常生活では生々しいモナド表記はあまり使われない。その点、分数では、
直積からのコンストラクターをもろに使った漢な表現が
日常生活の中で使われている。

分数は、モナドを使うことと、モナドを理解することは別腹という
良い例になっている気がする。分数がモナドになっていることが生きてくるのは、
システムがそれなりに複雑になってからじゃないかと思う。抽象化には
コストがかかるので、そのコストに見合った見返りが必要になるが、
システムが簡単だと、抽象化のコストをペイできない。

分数モナドは有名な例なので、何処かのブログで紹介されていると思うが、
見たことがないので、書いてみた。ホームが可換モノイドの圏なので、
オレオレモナドになってしまうが、モナド則の`QuickCheck`はできるので、
圏論の練習になるかもしれない。

516 名前:デフォルトの名無しさん mailto:sage [2020/09/12(土) 20:26:45.44 ID:TbuoUVLB.net]
は?何言ってんの



517 名前:デフォルトの名無しさん [2020/09/13(日) 08:12:50.88 ID:Tso/1gLY.net]
ひ?何言ってんの

518 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 14:14:05.81 ID:7XfXIlf2.net]
>>509
return と >>= は何になるんですか?

519 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 15:14:54.14 ID:Gippd8g0.net]
しらないけど
return x = x / x
ぐらいしか定義できなさそう

520 名前:デフォルトの名無しさん [2020/09/13(日) 21:12:53.92 ID:Tso/1gLY.net]
ふ?何言ってんの

可換モノイドの圏は集合の圏の
[部分圏](https://ncatlab.org/nlab/show/subcategory)だが、
集合の圏ではない。したがって、分数モナドは、
Haskellの`Monad`のインスタンスにならない。
例えば、次のような実装を考えると、

``` code
newtype Bunsu a = Bunsu {
runBunsu :: (a, a)
} deriving (Show, Functor)

instance (Eq a, Semigroup a) => Eq (Bunsu a) where ...
instance (Semigroup a) => Semigroup (Bunsu a) where ...
instance (Monoid a) => Monoid (Bunsu a) where ...
instance (Monoid a) => Group (Bunsu a) where ...

bunsu_pure :: (Monoid a) => a -> Bunsu a
bunsu_pure = ...
```

縛り`Monoid a`が邪魔をして、`Bunsu`は`Applicative`のインスタンスに
できない。それでも、通常の関数の形でなら`bunsu_pure`と`bunsu_join`は
書けるので、モナド則のチェックはできる。ただし、`Bunsu`は、
可換モノイドの圏でのモナド則は満たすが、集合の圏でのモナド則は満たさない。

質問への直接の答えは避けるが、可換モノイドの圏で考えないと
答えは得られない。

521 名前:デフォルトの名無しさん [2020/09/13(日) 23:57:07.12 ID:Tso/1gLY.net]
へ?何言ってんの

もしかすると、何言ってんのが前の投稿にかかっちゃったかもしれない。
何も考えずに、何言ってんのおじさんプレイを楽しんでいるだけなので、
気にしないでほしい。

ついでなので。
`return x = x / x`という選択は、集合の圏では、取りうる唯一の選択肢かも
しれない。自分も他に思いつかない。しかし、可換モノイドの圏では、
他にも選択肢がある。それも含めて、
[記事](https://ncatlab.org/nlab/show/Grothendieck+group+of+a+commutative+monoid)
に全て書いてある。他人事なので断言してしまうが、この記事より詳しい
分数モナドの解説は地球上には存在しない。しかし、悲しいかな、
Haskellの解説記事と同じで、

* わかる人にはわかるが、
* わからん人にはなるほどわからん

といういつものパターンになっていると思う。解説案件の宿命かもね。

522 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 02:32:09.85 ID:TxRaIMAU.net]
>>=は何ですか?

523 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 02:44:47.64 ID:SnB9iMGf.net]
圏論わからんからなんもわからん

524 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 16:41:03.56 ID:TxRaIMAU.net]
Monad という概念が数学の圏論の Monad から来るのはよく解説が見つかるんですが、Applicative (≒Monoidal) については数学からの意味付けが見つかりません
コレ数学的にはなんなんですか?

525 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 23:29:35.74 ID:XfiH3m4/.net]
そのままじゃん アプリカティブファンクター
なんだから、そのまま日本語訳でよくね
つまり、関手 プログラマーにとって使いやすくしただけ

ところで、”Applicative (≒Monoidal)”なのか?
こっちの方がい意味不明なんだが
モノイドって意味なら、≒モナド の方

モナイド則=モノイド則 モナドの方は、自己関手って条件が付くだけ

しらんけど

526 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 00:17:11.21 ID:wUKRYY2O.net]
>>519
まだ自分でハッキリ確かめたわけじゃないんですけど
Applicative と Monoidal は同型なんだそうです

https://qiita.com/Guvalif/items/7f893d9a078e03c9e425

まだこっちはどういう意味で“同型”になるのかわかってませんけど
数学的な意味でのMonadは英語のwikiに詳しく説明が載ってて↓
https://en.m.wikipedia.org/wiki/Monad_(category_theory)
このFormal DefinitionがまさにHaskellのモナド則に繋がっていくのは確かめました
問題はApplicativeは圏論のどの概念に該当するのかの説明がサッパリ見つからないんです



527 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 02:19:25.61 ID:PObv6BQ8.net]
(a -> b) -> (m a -> m b)
m (a -> b) -> (m a -> m b)
(a -> m b) -> (m a -> m b)
こいつらは中央の->と左右の->を区別してないから数学的な意味が見えない

returnとjoinは->が一つしかないから問題ないが

528 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 10:15:51.98 ID:TeSbfrM9.net]
>>521
そう、Haskellの圏論がらみの話はその“冪対象”(exponential object)が絡むのがややこしい
しかしFunctorは当然としてMonadも冪対象を用いないで形式化されてる(というより計算論の世界への応用のずっと以前からある)
Applicative(=Monoid?)はどやねんという話なんです
圏論の世界ではなかったものが計算論の世界に導入されてから考え出されたもんなんですかねぇ?

529 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 01:31:29.62 ID:yuR5T5xB.net]
strong lax monoical functor

530 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 22:12:52.40 ID:CfmtxJKj.net]
モノイド圏とかモノイド対象とかあんのだけど、モノイド(モノイダル)関手ってのもあんのね

読む気は無いんだけど、アプリカティブ関手とモノイダルXXが同型ってのは無いと思うが
っておもったけど、関手同士なんだから、いくつか条件つければモナドとモノイドみたいな関係もありうるんかな?

あとは、カン拡張、随伴、普遍性(極限だっけ?) どれかから相互に変換出来るだっけ?みたいなもん?

どちらにしろ、定義の話で面白みは無いとは思うのだが

531 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 10:32:26.07 ID:2a8IoKJu.net]
見つけた

https://qiita.com/Guvalif/items/7f893d9a078e03c9e425

このサイトの人がまとめたpdfに書いてある
とは言ってもやはりclosed categoryは仮定してる
やっぱりapplicativeはmonadと違って“内部ホム”を持たない圏では定義できないんだろな
“内部ホム”もつ圏でmonoidal functorに<*>を定義するのはわりと簡単だけど↓
F(X) × F(Y^X)
→F(X×Y^X) (coherence)
→F(Y) (F(eval))
https://en.m.wikipedia.org/wiki/Monoidal_functor
pureが全然できんなぁと思ってたら“strong”という条件からpureが作れるんだな
まぁHaskellて圏の話するときはHASKて言えればいいんだからコレでわかったことにしよ

532 名前:デフォルトの名無しさん [2020/09/28(月) 01:41:48.03 ID:0EuZ+v5t.net]
[Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise)
の小さい例題の[html](https://pastebin.com/yxSRyg2u)をアップした。
async/awaitはPromiseのお助け文法になっているが、それは扱っていない。実行環境は、
[RStudio](https://rstudio.com/products/rstudio/)から
[Node.js](https://nodejs.org/ja/)を呼び出している。

533 名前:デフォルトの名無しさん [2020/10/12(月) 16:08:54.17 ID:Wx/lfAmjI]
挑戦する馬鹿として生きるか?批判だけする雑魚として死ぬか?
https://www.youtube.com/watch?v=4jlQlo1oC3E
奴隷職に就く★自ら奴隷を選んで不満を言う愚かさ
https://www.youtube.com/watch?v=loD5ukKsZOk
バカは騙され最低賃金でコキ使われる★物価とか関係なし
https://www.youtube.com/watch?v=sQMrMfqdgrQ
勉強しないから奴隷人生★実業と人を残す人生哲学
https://www.youtube.com/watch?v=on2gURXi4Ks
正社員特権が「ブラック社員」を生む★正社員は訴え放題
https://www.youtube.com/watch?v=lSW1vc8-qMg
「で、年収は?」と聞くバカとは合わない社長業
https://www.youtube.com/watch?v=nEELEUhBLDk

534 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 04:31:41.26 ID:+VLXbnA3.net]
>>20
ワードカウントのロジックが不思議ちゃんだと思ったけどワードと空白の関係が
"abc dd "みたいな行儀が良い書式じゃないとだめなんだな
" "一文字スペースでワード数が1になってしまうみたいな
countFile :: String -> (Int, Int, Int)
countFile s =
let (cs, ws, ls, _) = foldl' go (0, 0, 0, False) s
in (cs, ws, ls)
where
go :: (Int, Int, Int, Bool) -> Char -> (Int, Int, Int, Bool)
go (cs, ws, ls, wasSpace) c =
let addLine | c == '\n' = 1
| otherwise = 0
addWord | wasSpace = 0
| isSpace c = 1
| otherwise = 0
in (cs + 1, ws + addWord, ls + addLine, isSpace c)

535 名前:デフォルトの名無しさん [2020/10/31(土) 09:11:59.11 ID:UJYxitvT.net]
walk.northcol.org/haskell/adts/
>代数的データ型(algebraic data type)とは,図のように木構造で表現される値からなるデータ型のことです.

必ず木構造に限定されるんだろうか?
OOPではオブジェクトグラフがありネットワークになりうるが、
Haskellでは絶対に木と考えて良いの?

536 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 12:29:50.75 ID:cEs7BAmA.net]
いいんじゃない?
型の全体は文脈自由文法で規定されるクラスだから木になる希ガス



537 名前:デフォルトの名無しさん [2020/10/31(土) 12:34:33.57 ID:fxcwqRC2.net]
この木なんの木きのこる木

538 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 12:37:07.03 ID:CAmth+XY.net]
見たこともない木ですから
独自実装のバグが出るでしょう

539 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 13:17:41.17 ID:cEs7BAmA.net]
でもよくよく考えたらHaskellのデータ型って「展開できる表現がひとつもないデータ型」もありうるんだな
無限の木になる

data InfiniteSequence = IS {car :: Int, cdr :: InfiniteSequence}

arithSeq a d = IS a $ arithSeq (a+d) d

term 0 (IS x y) = x
term n (IS x y) = term (n-1) y

main = print $ term 10 $ arithSeq 5 3
----
53

540 名前:デフォルトの名無しさん [2020/10/31(土) 13:26:01.44 ID:UJYxitvT.net]
再帰的なデータ型はグラフにできるのでは?

541 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 13:37:30.03 ID:B0ELcd4k.net]
最終的に暴走しないで展開が停止するものだけをデータ型と呼ぶならそうだけど、iterate (+4) 5 ですら無限の木になってしまう

542 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 21:13:27.13 ID:3k5Im+3l.net]
haskellの配列は代数的データ型でばないのか?

543 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 22:07:18.29 ID:XiPKdEPZ.net]
foldrなどの引数のことを代数的と言っていたような気がする
引数は(:)と[]でもいいし
(+)と0でもいい

引数を渡すと関数 [a] -> b が返ってくるが
これは関数というよりOOPの継承関係のような印象

544 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 22:34:53.43 ID:B0ELcd4k.net]
Haskell のデータ型は再帰を許すからな
どうしても「終端記号(大文字から始まるData constructet) を木構造に並べたもの」という説明をしたいなら無限グラフを使わざるをえない

545 名前:デフォルトの名無しさん [2020/11/01(日) 07:14:51.56 ID:fIYIMdhR.net]
walk.northcol.org/haskell/lists/#_%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E7%95%B3%E8%BE%BC%E3%81%BF

1)foldr (+) 0 [1, 2, 3]
(+)とカッコがつく理由は?

2)map' f = foldr (\x a -> f x : a) []
xは[]の各要素?aは何?

546 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 08:58:44.92 ID:Srz4hpJo.net]
1)
walk.northcol.org/haskell/operators/#_%E4%B8%AD%E7%BD%AE%E3%81%A8%E5%89%8D%E7%BD%AE%E3%81%AE%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88

2)
このままだと対応する値が存在しないので、少し書き換える
map' f xs = foldr (\x a -> f x : a) [] xs
xはxsの各要素、aは最後の要素では[]で、
それ以前は後ろの要素に(\x a -> f x : a)を適用した結果



547 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 09:15:58.91 ID:v6ASK7zT.net]
>>539
>
> 1)foldr (+) 0 [1, 2, 3]
> (+)とカッコがつく理由は?

+ がないと+は中置演算子で
(foldr + 0) [1, 2, 3]
になる
(+)があると普通の関数としてfoldrの因数として解釈される

> 2)map' f = foldr (\x a -> f x : a) []
> xは[]の各要素?aは何?

[]はfoldrの第3因数と同じ型の空集合
a は無名函数(\x a -> f x : a)の第2因数
定義に従ってmap' sin [] [5,6]] はわかりやすく(\x a -> sin x : a)を中置演算子++++で書くと(すなわちx ++++ a = (sin x) : aとすると)

map' sin [] [5,6]
= 5 ++++ ( 6 ++++ [] )
= 5 ++++ ( (sin 6) : [] )
= 5 ++++ [ (sin 6) ]
= [ (sin 5) : [ (sin 6) ]
= [ (sin 5) , (sin 6) ]

となる

548 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:14:49.54 ID:1eMkmBeN.net]
因数?引数ではなく?
Haskell用語なのかな

549 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:21:30.53 ID:Srz4hpJo.net]
1)
foldr + 0 [1,2,3]
と書いた場合、「+」より関数適用のほうが優先順位が高いので、
foldr + (0 [1,2,3])
と解釈される。
つまり、0という関数を[1,2,3]という引数に適用したものと、foldrを足し算するという意味となる

2)
具体例
map' f [1,2,3] = foldr (\x a -> f x : a) [1,2,3]
3番目の値
(\x a -> f x : a) 3 [] = f 3 : [] = [f 3]
2番目の値
(\x a -> f x : a) 2 [f 3] = f 2 : [f 3] = [f 2, f 3]
1番目の値
(\x a -> f x : a) 1 [f 2, f 3] = f 1 : [f 2, f 3] = [f 1, f 2, f 3]

550 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:25:40.23 ID:Srz4hpJo.net]
おっと、具体例の「foldr (\x a -> f x : a) [1,2,3]」は
「foldr (\x a -> f x : a) [] [1,2,3]」の誤り

551 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:36:13.55 ID:B/d//mYI.net]
い・・・引数

552 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:54:46.55 ID:z/eHKN3/.net]
引数です
orz
普段“因数”の方が使う人なのでうっかりしたorz

553 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 11:03:53.67 ID:93fSMn/e.net]
こ・・・因数

554 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 11:05:28.12 ID:z/eHKN3/.net]
こ?

555 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 11:11:25.51 ID:4+fLUvoM.net]
だ…因数

556 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 12:57:34.37 ID:9/8GaKcH.net]
ひきすう



557 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 15:22:11.82 ID:N8AW169o.net]
引数を「ひきすう」と読むのは、同音異義語との混同を避けるための慣用読みだと思ってた
化学(ばけがく)、鼻腔(びくう)みたいな

558 名前:デフォルトの名無しさん [2020/11/01(日) 15:24:45.41 ID:BdB3gM+x.net]
返り血

559 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:34:03.38 ID:S9fsJ+JS.net]
Parameterとargumentsの違いがよくわからない

560 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:44:50.76 ID:5aO2zs3I.net]
https://qiita.com/yuba/items/141bdb2df407ee37417f

だってよ

561 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:59:46.68 ID:S9fsJ+JS.net]
よくわからんし一緒ってことか

562 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 00:43:34.64 ID:TnMF05Pn.net]
質問です
このサイトでNum instanceをDerivingする話が出てました

https://qiita.com/HirotoShioi/items/8a6107434337b30ce457

実際このページの次のコードはうちの環境でも通ります
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

newtype Quantity = Quantity Int
deriving (Eq, Ord, Num, Show)

a = Quantity 2
b = Quantity 6

totalQuantity :: Quantity
totalQuantity = a + b
-- Quantity 8

しかし次は通りません
通す事はできますか?

import Text.ParserCombinators.Parsec
import Text.Parsec (Parsec)

newtype ParserInt = PI (Parser Int) deriving (Num)

563 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 00:43:43.72 ID:TnMF05Pn.net]
---- エラーメッセージ
Haskell Online Compiler [ghc-8.4.4]
Copyright (c) The University of Glasgow

Compiling your program...

[1 of 1] Compiling Main ( prog.hs, prog.o )

prog.hs:6:47: error:
• No instance for (Num (Parser Int))
arising from the 'deriving' clause of a data type declaration
Possible fix:
use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
• When deriving the instance for (Num ParserInt)
|
6 | newtype ParserInt = PI (Parser Int) deriving (Num)
| ^^^

564 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 21:44:04.17 ID:aBc5dqas.net]
こうすりゃ無理やり通すことはできるけど、
そもそもパーサ同士の足し算等々でどう動いて欲しいのか分からんから
まともなインスタンス宣言が書けん

{-# LANGUAGE FlexibleInstances #-}
instance Num (Parser Int) where
 x + y = x
 x * y = x
 abs x = x
 signum x = x
 negate x = x
 fromInteger n = return 0

565 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 23:56:16.57 ID:Zq9JUsOb.net]
>>558
元は別スレに出てた問題で
「与えられた文字列の中で“trickと"treat”どっちが先に出てくるか判定せよ」
なんです
とりあえずparserを与える関数として
makeP = mconcat . map ( manyTill anyChar . char )
でできました
コレを例えば"abc"にapplyするとmtl = manyTill、ac=anyCharとして
(mtl ac $ char 'a') <> (mtl ac $ char 'b') <> (mtl ac $ char 'c'>
というparserになりコレにhiajklbcnという文字列をparseするとhijklとabcが出現するするまでに読み飛ばした文字列を返してくれます
それでお題の答えとしてparseの結果を
lastInd x s = case ( runParser ( makeP x ) () "" s ) of
Left _ -> ( [ 2, 0 ] , x )
Right y -> ( [ 0, length $ x ++ y ], x )
のようにしてlengthで数えたんです
しかしちょっと冗長なかんじがします
そもそも読み飛ばした文字列なんか欲しいわけではなく読み飛ばした文字数が欲しいだけだからほんとは
Parser String 型ではなく例えば
length <$> ( manyTill anyChar ( char 'x')
とかのParser Intで十分です
問題はコレをどうやって繋げて総和を返すコンビネータを作ろうかというところなんです
Parser Stringはmonoid型を持ってるのでmconcat一発で繋げられるんですがParser IntはNum持ってないのでsum一発で繋げるというわけにはいかないんです
なんとかできないかと探してみるとなんか「Numをderivingする」という記事を見つけて、お、コレでいけないかと色々やってみたんですがやはりParser Intにderiving一髪でNum入れる方法見つからなくてなんとかならんもんかと

566 名前:デフォルトの名無しさん mailto:sage [2020/11/03(火) 01:59:40.73 ID:WdkpFDBO.net]
わざわざNumのインスタンスにしなくても、これでいいのでは
makeP = fmap sum . mapM ( fmap length . manyTill anyChar . char )



567 名前:デフォルトの名無しさん mailto:sage [2020/11/03(火) 10:26:04.44 ID:qaG2IpUi.net]
>>560
うん、まぁ別にNumのインスタンス入れなくてもこの問題の話だけならいくらでも方法はあると思うんだけど、そもそもモナドってもこういう時のためにあるんじゃないのかなと思って
例えば(+)なら Num a,Functor f のとき Num (f a)は自然には導出できない、なぜなら fmap (+) は f a -> f ( a - > a ) になってしまう
しかし Applicative f なら lifaA2 (+) がピッタリ f a -> f a -> f a になって自然にキレイに Num (f a) が導出できる
だからすごく理論的には自然なのに方法がないのは何故なんだろうと
というかderiving (...) の (...) にかけるやつとダメなやつの基準がわからない
実用本位でよく使うやつだけ用意されてるに過ぎないのかな?

568 名前:デフォルトの名無しさん mailto:sage [2020/11/03(火) 11:32:34.46 ID:WdkpFDBO.net]
一応、Num (f a)は導出できるけど、それで定義した(+)だと
交換則(x + y = y + x)が成り立つ保証がないからじゃないかねぇ
(パーサの順番を入れ替えた場合を考えるとわかりやすい)

{-# LANGUAGE FlexibleInstances #-}
instance (Num a, Applicative f) => Num (f a) where
 x + y = (+) <$> x <*> y
 x * y = (*) <$> x <*> y
 abs x = abs <$> x
 signum x = signum <$> x
 negate x = negate <$> x
 fromInteger n = pure $ fromInteger n

569 名前:デフォルトの名無しさん mailto:sage [2020/11/03(火) 11:50:57.17 ID:hn8kPJNe.net]
>>562
なるほど、文法的に通っても意味的に文法には出てこない"Num rule"が補償されないからダメって事なのかな?
まぁ今はclassのメンバ関数の自分が利用するやつだけ定義する必要無くなったみたいだから手で書いてもいいんだけど、>>556の例だと

newtype Eval a = Eval (ReaderT Env (ExceptT String Identity) a)
deriving (Functor, Applicative, Monad, MonadReader Env, MonadError String)

とかはmonad translater越しにできるし

newtype Quantity = Quantity Int
deriving (Eq, Ord, Num, Show)

もできるのになんで Parser (Int) はあかんねんと
なんかプラクマつけたらいけんもんかと
Num くらいならいいけど Floating とかだと惨劇になってしまう

570 名前:デフォルトの名無しさん mailto:sage [2020/11/03(火) 18:12:46.66 ID:oSP8TPsC.net]
この話の面白いところは
Parser Intという型を宣言する言語と
そもそも型を宣言しない言語
どっちが生産性高いかってことだよ

571 名前:!id:ignore mailto:sage [2020/11/06(金) 20:16:57.19 ID:uZSEyxFl.net]
stackくんさぁ、コンパイラのダウンロードが200MB強あるんだから、低速回線は途中で切断されるとかよくありそうなことじゃん
サスペンド・レジューム機能搭載は必須じゃないのかね
きょうびyoutube-dlでさえ向こうに切断Forbiddenされても今までダウンロードした分は残ってて、再度ダウンロードを開始した際には途中から残りの部分をダウンロードすように始まるってのにさ
仮に205.86 MiB / 205.87 MiBまで来て切断された場合
リトライすると0 MiB / 205.87 MiB からだなんてお互い不幸になると思わないのか?
こっちは成功するまで永遠に繰り返すんだぞ? むしろそっちの方がそちらにとっても迷惑じゃん
それとも低速回線は死ねっていう差別的思想を持っているのかね?

572 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 11:31:57.94 ID:Bx8aZf2L.net]
一方TeXはisoイメージを使った

573 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 13:05:47.79 .net]
パターンガードの変数の束縛は局所的なのですが、全ての場合で共通して使用してほしい束縛はどうやりますか?

574 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 01:15:49.21 ID:4MQyK7K1.net]
>>567
質問の意味がよく分からないのだが、コード例を出せる?
こんな風に書けたらいいのに、みたいな。

575 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 19:55:38.03 .net]
rootsInternal :: Quadratic -> Double -> Roots

rootsInternal q d

 = let

    two_a   = 2.0 * (a q)

    realpart  = - (b q) / two_a

    dside d  = (sqrt d) / two_a

    dpart   = dside d

    complexpart = dside (-d)

  in if d==0

    then   -- Discriminant is zero, (single) root is real

      Root $ realpart :+ 0

    else

    if d<0

    then   -- Discriminant is negative, roots are complex

      Roots (realpart :+ complexpart) (realpart :+ (-complexpart))

    else   -- Discriminant is positive, all roots are real

      Roots ((realpart + dpart) :+ 0) ((realpart - dpart) :+ 0)


のlet 〜 in みたいなのを

rootsInternal q d
 | d==0   = ...
 | d<0    = ...
 | otherwise = ...

みたいな書き方の時にもやりたいんです

576 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 19:58:42.43 .net]
おっと無用な改行が一々入っちゃった。。。



577 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 20:20:48.18 ID:UhW/CkjO.net]
>>569-570
where で出来なかったっけ?だめだったかな?

578 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 21:00:20.89 .net]
あ、できました。
お騒がせしました(////)

579 名前:デフォルトの名無しさん mailto:sage [2020/11/11(水) 19:20:13.76 ID:qheOKxfd.net]
正格評価について質問です

ひとつの引数しかない関数 f を正格評価するときには

f $! x

でよいようですが2引数の場合はどうするんですか?

( f $! x ) $! y

で x, y を先に展開してくれますか?
良さげなんですがどう確かめたものやら
なんか正格評価と遅延評価で格段に計算量が変わる f の例ってありますか?

580 名前:デフォルトの名無しさん mailto:sage [2020/11/11(水) 21:38:04.29 ID:TR1bVb0l.net]
遅延評価がなくてもGCはメモリ解放を遅らせている
GCをいじるにはIOが必要

$!を使うのにも少なくともモナドが必要と考えるのが自然なのでは?
x' <- return $! x
y' <- return $! y
return $! (f x' y')

581 名前:デフォルトの名無しさん mailto:sage [2020/11/11(水) 22:07:05.86 ID:F87BSTFR.net]
>>574
そうなんですか?
とりあえずモナドで試してみます
兎にも角にも正格評価と遅延評価でこんなに計算の回数が違ってくるってのなんかご存知ないですか?
例えばdpの例でFibonacciを

f 0 = 0
f 1 = 1
f n = (f $ n-1) + (f $ n-2)



f' 0 = (0,1)
f' n = (a+b,a) where (a,b) = f' (n-1)
f = fst . f'

で比べると目に見えて計算量が違うみたいな奴で「正格評価が効いてる」って目に見えてわかるような例があるとありがたいんですが

582 名前:デフォルトの名無しさん [2020/11/12(木) 14:57:12.09 ID:+Y5HOlnE.net]
正格評価と遅延評価で計算量が変わるといえばtaraiじゃね?

583 名前:デフォルトの名無しさん mailto:sage [2020/11/12(木) 23:16:18.57 ID:G64JuFLE.net]
⊥になるものでいいじゃん

584 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 06:27:56.29 ID:ewlhvLCU.net]
trace や unsafePerformIO で評価順を調べられないかな

585 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 12:04:46.50 ID:oAmrFI5R.net]
みなさん情報ありがとうございます
今んとこヒマな時にやってみた実現は

cube x = x*x*x

a x = case x of
0 -> 0
1 -> 1
_ -> ( a $ x -1 ) + ( a $ x - 2 )

main = do
tA <- getCPUTime
print $ cube $ a 38
tB <- getCPUTime
print $ tB - tA



print $ cube $ a 38 → print $ a 38

の比較
結果
----
59722225363795389930809
3801127096000
----
39088169
3514055718000

この程度だとコンパイラが勝手にメモ化してくれるようで差がでないorz
まだタライとかは試して見てません
取り急ぎご報告まで

586 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 23:33:39.07 ID:bCg5e61i.net]
>>573
もうとっくに解決したかもしれませんが、評価の順は trace 関数でも確認できます。

import Debug.Trace

g :: Int -> Int -> Int
g x y = trace ("g") (x + y)

main :: IO ()
main = do
let a = trace ("a") 1
let b = trace ("b") 2
let c = (g $! a) $! b
putStrLn $ show c

これを実行すれば、b a g 3 の順に出力されます。
正格評価されていると言えます。

ちなみに、($!) を ($) に変えれば、g a b 3 の順に出力されます。



587 名前:デフォルトの名無しさん mailto:sage [2020/11/18(水) 01:05:30.21 ID:VzwFaHaO.net]
>>580
イヤ、まだ奮闘中です
おぉ、そんな便利なものが
使ってみます

588 名前:デフォルトの名無しさん [2020/11/21(土) 23:31:14.57 ID:ak7brOTq.net]
Haskellはライブラリの中身を覗くと
Template Haskellを駆使した
グッチャグチャの実質別言語みたいなコードがザラなのがなぁ・・・
水面下の白鳥状態じゃねーか

589 名前:デフォルトの名無しさん mailto:sage [2020/11/22(日) 16:59:26.57 ID:gt3QNmmg.net]
ゴミライブラリ使うのやめて良いやつ作って公開してくれ

590 名前:デフォルトの名無しさん mailto:sage [2020/11/22(日) 17:19:45.03 ID:MRtbpg3I.net]
在学中か学校出たての経験浅い奴しか担い手がいないのだろうからそんなもんなんだろう

純粋関数型言語は学生がかかるはしかみたいなもので
やがて計算機科学の現状に絶望し去ってゆく
現在のコンピューターは手続き型に最適化されているのだ

591 名前:デフォルトの名無しさん mailto:sage [2020/11/22(日) 18:37:00.71 ID:36XuvgN2.net]
単純に関数型言語がわかる人が少なすぎるからじゃないの?

592 名前:デフォルトの名無しさん mailto:sage [2020/11/22(日) 20:14:41.06 .net]
居飛車党と振り飛車党の闘いは続く

593 名前:デフォルトの名無しさん [2020/11/22(日) 23:16:18.31 ID:b60g3zenS]
みずほが週休3日・4日を導入、副業もオッケーに!ただし給料は80%、60%に下がるが、あなたならどうする?
https://www.excite.co.jp/news/article/Jcast_kaisha_396186/
みずほFG 週休3〜4日制導入へ 新型コロナで働き方見直し
https://www3.nhk.or.jp/news/html/20201006/k10012651181000.html
副業OK時代!初心者に人気の副業を試してみて…メリット・デメリットとは
https://news.yahoo.co.jp/articles/2a38649705f3257595512daee1a073c231affc51
「労働時間の見直し」に先鞭をつけた みずほフィナンシャルグループ
https://blogos.com/article/490192/
給料ダウンの危機を副業でカバーしたい…副業している人はどんな仕事でいくら稼いでいるの?
https://news.yahoo.co.jp/articles/e56796283f3e4feea64cb3042ea7b4d7c01714e4
副業を会社に報告しない理由TOP3、3位会社が禁止している、2位告知されていない、1位は?
https://dime.jp/genre/990902/
副業年収1億超のmotoさんに聞いた!「本業」で成果を上げて自分の市場価値を高める方法
https://ddnavi.com/interview/679189/a/
フリーランス向け報酬即日払いサービス『先払い』が大規模リニューアルし正式リリース
https://prtimes.jp/main/html/rd/p/000000042.000047439.html
国内最?級!副業・フリーランスエンジニアに特化した、仕事探しの求?アプリ
『doocyJob(ドーシージョブ)』、iOS版アプリを2020年10月6日(?)リリース
https://prtimes.jp/main/html/rd/p/000000005.000038976.html

594 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 02:58:53.25 ID:v8DPq2Nr.net]
イヤ、まぁ純粋に速度とか効率とか考えたら手続き型言語の方が優位なのはその通りでしょ?
だって現在の計算機がノイマン型の手続き型の処理をするために設計されてるんだから
そりゃバリバリにチューニングしたら手続き型言語には絶対勝てない

595 名前:
その時代時代の最新の計算機の性能をフル活用しないとできないような処理は当面関数型言語の出番は回ってこない
しかしそこまでの処理でないならやはり関数型言語の活躍できる場面も出てはくるだろうけど、しかし例えそうなったとしても手続き型言語も関数型言語も両方臨機応変に使いこなせるようになるとなると中々難しいから、結局どちらか選ぶなら手続き型言語という事になってしまう
しばらくは関数型言語が実務の場面でバリバリ使われるようになるのは中々難しい
当面研究者とか、サンデープログラマーの趣味の世界でしか出番ないかもしれない
[]
[ここ壊れてます]

596 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 03:10:25.23 ID:i6Fa5mHr.net]
並列並行処理を型で表せる辺り、強力なんだけどなぁ



597 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 03:19:37.79 ID:vzAx9TtB.net]
Reditを見てると、Haskellerの求人も結構あるんだが

598 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 12:02:25.91 ID:B9DSaA3p.net]
居飛車と振り飛車というのは危機感が足りない
ガソリン車と電気自動車だ
個人の就職じゃなくて会社が丸ごと潰れるリスクを想定するための研究だよ

599 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 13:19:57.85 ID:XIoHPhIo.net]
一句できた!

『次に来る』
言われ続けて
数十年
(来ない)

600 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 13:27:42.48 ID:izonrGpC.net]
近未来
今となっては
古臭い

601 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 13:29:17.88 ID:XIoHPhIo.net]
>>593
いいね!

602 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 14:40:17.74 ID:B9DSaA3p.net]
新しいなんて嘘つくより古いものは古いものとして扱う歴史や古文の方が正しい

603 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 20:51:18.66 .net]
関数型言語を処理するために設計されたコンピュータってどんな構造なんだろ

604 名前:デフォルトの名無しさん mailto:sage [2020/11/23(月) 21:33:53.00 ID:B9DSaA3p.net]
みんなが数学好きで自己啓発嫌いなのは処理速度じゃなくて
嘘をつかないかどうかの問題

605 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 01:11:11.02 ID:wCic/rFb.net]
>>596
LISPマシンというものがかつてありましたなあ

606 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 03:49:22.53 ID:EBaS3Lgi.net]
JAVAチップが実現されてればスタックマシンだからFORTH最強だったのでは



607 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 21:00:48.17 ID:BgPUrN9t.net]
速度は実はそこまで重要じゃない
飛行機からメンテナンスハッチ取り除いて何kg軽量化しましたって言ったところで、仕事好き定量評価好きなにわかが、わかりやすい数字見て喜ぶだけで、実際はそんな嬉しい話じゃない
というかそもそももっと遅いスクリプト言語は流行ってるし

608 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 21:12:41.51 .net]
Haskell でゲーム開発したいんですが
FRP は死滅しちゃったの?

609 名前:デフォルトの名無しさん mailto:sage [2020/11/24(火) 21:44:37.33 ID:2dUwtFIm.net]
>>601
死滅の意味がよく分からんが、問題なく使える。
stackageにもあるでしょ。

それはそうと、なんで初めから難しいFRPを使おうとするの?
普通に素直に設計して作ってみればいいのに。

610 名前:デフォルトの名無しさん mailto:sage [2020/11/30(月) 15:39:12.43 ID:nSv/4rn0.net]
bind演算子の名前の由来ってなに?
なにも束縛してなくね?

611 名前:デフォルトの名無しさん mailto:sage [2020/11/30(月) 17:26:29.13 ID:+w97lXkL.net]
a >>= b
がdo記法で
do
x <- a
b x
みたいになるからじゃね?

612 名前:デフォルトの名無しさん mailto:sage [2020/11/30(月) 21:06:13.38 ID:qo5X+4ip.net]
(>>) これも bind と言うよ

613 名前:デフォルトの名無しさん [2020/12/02(水) 00:25:53.39 ID:E6FeESB6.net]
ここで聞いていいのかわからないけど…
Nixのいいチュートリアルとかってある?

614 名前:デフォルトの名無しさん mailto:sage [2020/12/04(金) 21:16:59.61 ID:kdWDDBYk.net]
これとかどう?

https://github.com/Gabriel439/haskell-nix

615 名前:デフォルトの名無しさん [2020/12/05(土) 12:39:37.62 ID:Na39OKS5.net]
ブログ書いてたら彼女と無料で海外留学という名のデートに行けた話【影響力やばい】
https://www.youtube.com/watch?v=Y8Q1z3Mi7BQ
若いうちから人を雇ったり、任せるクセをつけるべき理由とは?
https://www.youtube.com/watch?v=6yAvDQxhldI
【対談】インフルエンサーマーケティングに300万円突っ込んでみた結果...
https://www.youtube.com/watch?v=AMjWD0F8PLQ
収入を上げたければ、自分の影分身を作るべし
https://www.youtube.com/watch?v=V3Kc-lUxH88
勉強のために10日間で21個のアプリを作った話【初心者時のプログラミング学習】
https://www.youtube.com/watch?v=JkN5kmR9dgk
学校では教えてくれないことの中にはお宝が眠っている
https://www.youtube.com/watch?v=oq92u9nJ7FY
ブロガーからステップアップしていくために必要なスキル
https://www.youtube.com/watch?v=F6qsOyRIaQE

616 名前:デフォルトの名無しさん [2020/12/05(土) 23:01:31.80 ID:gIoCKCst.net]
>>607
すごい良さげ。ありがとう



617 名前:デフォルトの名無しさん mailto:sage [2020/12/05(土) 23:45:36.72 ID:gZAhFzLL.net]
>>608
すごい良さげ。ありがとう

618 名前:デフォルトの名無しさん mailto:sage [2020/12/06(日) 02:18:39.34 ID:HA18eG30.net]
>>608
グロ

619 名前:デフォルトの名無しさん [2020/12/08(火) 09:15:41.98 ID:VKXi32Vk.net]
実際にちょっとしたプログラム書いてみると
メモリ周りの最適化が困難なんだよなこの言語。

しかも最適化の方向性がアルゴリズムの改良ではなく
言語特有のボトルネックの回避がメインになるから
コードを見ても最適化の意図が分かりにくくて
一見無駄に冗長に記述してるだけに見えるコードが出来上がる。

620 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 11:08:46.52 ID:EAPrHNYX.net]
最適化の意図なんてPythonと同じでいい
ライブラリは全部Cで書いてmainだけHaskellで書け

621 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 12:02:52.73 ID:mZ7rlOd+.net]
一時期あんなにモナドの記事とか書かれまくったのに、最近盛り上がりに欠ける
Haskell製アプリも企業が採用したって話もほとんど聞かないけど、気のせい?
尖ったところで使われてるんかな

622 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 13:07:23.14 ID:EAPrHNYX.net]
言語関係なく企業が作ったアプリを買ったことがほとんどない
個人が書いた本を買うことはある

623 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 13:30:45.48 ID:xvXTXIvz.net]
まぁなんだかんだHaskellは実用性というより、やはり数学研究の一貫の色合いが強いからなぁ

624 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 13:52:48.29 ID:CqCSsxMG.net]
一環では?
数学の前に国語の研究をしたほうがよいのでは?

625 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 15:02:11.16 ID:xvXTXIvz.net]
お前はまず自分の人間性を見直せ
煽りじゃなくマジで

626 名前:デフォルトの名無しさん mailto:sage [2020/12/09(水) 01:52:25.38 ID:6n7tUtuW.net]
Haskell自体は面白くて本や記事も読むけど、なんか書く気起きないんだよな
でも他の言語で関数型由来の機能が追加されたときに「あ、これHaskellでやったところだ!」ってなれる



627 名前:デフォルトの名無しさん [2020/12/17(木) 17:53:27.84 ID:9eI2x+Uu.net]
Haskellでx = x + 1をIORef使わず擬似的に再現。
(実際には代入では無く、結果をラムダ式の同名の変数に渡してるだけ)

main = do let x = 0
print x
x <- inc x
print x
x <- inc x
print x

inc n = return (n + 1)

モナド式の書き方だとこうなる。

main = do let x = 0 in print x >> inc x >>= \x -> print x >> inc x >>= \x -> print x

inc n = return (n + 1)

さらに>>=演算子を()で囲んで関数にするとこうなる。

main = (>>=) ((>>=) (do let x = 0 in print x >> inc x) (\x -> print x >> inc x)) (\x -> print x)

inc n = return (n + 1)

628 名前:デフォルトの名無しさん [2020/12/17(木) 17:53:45.49 ID:9eI2x+Uu.net]
モナド無しだけど、Cで再現するとこんな感じ。(スタック消費するけど)

#include <stdio.h>

int inc(const int);
int f(const int);

int main(void)
{
const int x = 0;
printf("%d\n",f(f(x)));
return 0;
}

int inc(const int x)
{
return (x + 1);
}

int f(const int x)
{
printf("%d\n",x);
return inc(x);
}

629 名前:デフォルトの名無しさん mailto:sage [2020/12/18(金) 19:59:30.35 ID:PXMujPNr.net]
目的が実用だろうが研究だろうがIORefは使っていいぞ
IORefは手段なので、具体的な目的に依存しない

630 名前:デフォルトの名無しさん [2020/12/19(土) 08:53:57.33 ID:56QZYgov.net]
気持ちはよくわかる。自分も初めてdo式の定義を見た時、おぉぉぉとなった。
というわけで、いつdo式パラダイスが登場したのかアヒル体験してみた。
[When was do-notation introduced?](https://www.reddit.com/r/haskell/comments/8rkrgq/)

> Haskell 1.3 adopted Jones’s “do-notation,” which was itself derived
from John Launchbury’s paper on lazy imperative programming (Launchbury, 1993).

自分の場合、Haskellを知る前に、Moggi大先生の論文体験を一撃で敗退した時に
おぉぉぉした覚えがある。

* Notions of computation and monads
in [Eugenio Moggi Publications](https://person.dibris.unige.it/moggi-eugenio/publications.html)

宗教上の理由で、シーケント図が書かれた書物体験はできないが、幸いなことに、
最初のシーケント図にdo式らしきものが書いてある。ナウなヤングの言葉では
次のようになると思う。

``` haskell
kleisli_extension :: (Monad t) => (a -> t b) -> (t a -> t b)
kleisli_extension f c = do
x <- c
f x
```

今も論文に何が書かれているかわからないが、その時は、<em>おぉぉぉ、
プログラミング言語って数学的に捉えられるんだ</em>体験をした記憶がある。
一般に、紙上のプログラミング言語と実働するものとの間には万物の長城が
あるので、Haskellのdo式もすごい発明と思うが、その技法の骨子は、既に
[同時多発的](https://www.youtube.com/watch?v=FMmCJ6-uu3M)に発見されて
いたのかもしれない。歴史絵巻体験では、
[A History of Haskell](https://misreading.chat/2020/10/27/)も面白かった。

631 名前:デフォルトの名無しさん [2020/12/20(日) 18:18:16.88 ID:FMam64CT.net]
ネタを拝借して、次のコードを考える。

``` haskell
inc :: (Applicative f) => Int -> f Int
inc n = pure (n + 1)

lhs :: (Int -> () -> String) -> Int -> IO String
lhs dump x = do
y <- inc x
z <- print y
pure $ dump y z

rhs :: (Int -> () -> String) -> Int -> IO String
rhs dump x = inc x >>= \y -> dump y <$> print y

lhs ((.) show . (,)) 123 >>= print
rhs ((.) show . (,)) 123 >>= print

lhs (const . const "hello") 123 >>= print
rhs (const . const "hello") 123 >>= print
```

632 名前:デフォルトの名無しさん [2020/12/20(日) 18:18:58.94 ID:FMam64CT.net]
IOモナドを恒等モナドに差し替えて、Rに移植する。

``` {r raskell}
do = pure = id = function (a) a;
const = function (a) function (ab) a;
`%.%` = function (bc, ab) function (a) bc (ab (a));
`%$%` = function (ab, a) ab (a);
`%>>%` = function (a, ab) ab (a);

inc = function (n) n + 1;
caty = function (a) cat (a, "\n", sep = "");

lhs = function (dump) function (x) do ({
y <- inc (x);
z <- caty (y);
pure %$% dump (y) (z);
});

rhs = function (dump) function (x) {
inc (x) %>>% (function (y) dump (y) %$% caty (y));
};

lhs (function (y) function (z) list (y, z)) (123) %>>% print
rhs (function (y) function (z) list (y, z)) (123) %>>% print

lhs (const %.% const ("hello")) (123) %>>% print;
rhs (const %.% const ("hello")) (123) %>>% print;
```

Rは関数の引数を問答無用に遅延評価するので、最後の`rhs`だけがHaskellと
異なる動作をする。Rの遅延評価の例としては煩雑過ぎるが、HaskellのIOモナド
とサイドバイサイドに比較できる例になっている。

633 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 09:39:14.86 ID:b/Fw/Z0P.net]
ふと思った。

a型の2次元配列が必要になった時、
[[a]] や Array (Int, Int) a ではなく、
(Int, Int) -> a が真っ先に思い浮かぶなら、
そいつは関数型にどっぷりハマってるな、と。

634 名前:デフォルトの名無しさん [2021/01/08(金) 14:54:16.81 ID:QDat+Qoy.net]
関数型は並列処理に強いという話を聞くけど
fpgaの高位合成がC言語で行われている理由は何ですか?

haskellでの高位合成やgpgpuはどうなっていますか?
実用されていますか?

635 名前:デフォルトの名無しさん [2021/01/08(金) 15:09:45.01 ID:QDat+Qoy.net]
Haskellの人気は横ばいまたは下降気味。
なぜ未来であるはずのHaskellは勢いを持たない?
実際使ってる人達の印象はどうなの?

https://www.reddit.com/r/haskell/comments/iaxx7x/thoughts_on_how_to_measure_haskells_popularity/
https://trends.google.com/trends/explore?q=%2Fm%2F03j_q&date=all#TIMESERIES
https://insights.stackoverflow.com/trends?tags=haskell

636 名前:デフォルトの名無しさん [2021/01/08(金) 15:22:31.00 ID:QDat+Qoy.net]
Haskellはアカデミックな言語だっていうけど
アカデミックな人がやることが多い機械学習でPythonが伸びた
並列処理に強いなら機械学習の行列処理がHaskellで行われても良かったんじゃないの?



637 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 18:33:26.91 ID:rDTYcDTI.net]
Haskellは並行並列を楽に書けるのであって速く書くのに向いているわけではない(滅茶苦茶向いていない訳でもないがハードウェアに近い組には速度で勝つのは大変)
そしてDNNは内部処理がテンソル演算でこそあるけどインターフェイスでそこまでむき出しのテンソル演算をするのは多くない

なによりアカデミックは一枚岩ではなく当然色々幅が広くて
Haskellがアカデミックと呼ばれる所以は言語処理系や型理論、その実装の分野
並行並列が楽に書けるってのはその流れからくる、関数の純粋性とソフトウェアトランザクショナルメモリの成果
機械学習系の源流になる内の画像処理系ではC++やmatlabが、統計系はRやmatlabが使われててnumpyと共に徐々にPythonに移行してきた
ちょっと下のレイヤーのBLASやシミュレーションではC++とFortran、後にGPGPUの独擅場で今ではPythonから呼ばれる形で使われてる訳だ

638 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 00:06:52.64 ID:cFb9Tw8T.net]
機械学習はどっぷり工学分野だからアカデミックという印象は少ないイメージあるが

639 名前:デフォルトの名無しさん [2021/01/09(土) 16:47:47.44 ID:gjIQ6YZR.net]
haskellについて調べてるんだけど
関数の合成は関数Aの返値と関数Bの引数の型が一致するとかの条件が必要?
解説記事に「関数はファンクタです」とか書かれてるんだけど
任意の関数を合成できるわけじゃないよね?

640 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 17:24:37.63 ID:Xoihvk5Y.net]
>>632
関数合成のシグネチャを見れば分かる
(.) :: (b -> c) -> (a -> b) -> a -> c
"bからcへの関数"と"aからbへの関数"を受け取り、"aからcへの関数"を返す関数が関数合成

641 名前:デフォルトの名無しさん mailto:sage [2021/01/10(日) 13:23:32.27 ID:/oGn2fPm.net]
・Functorは高階カインドのクラスです
・二変数の型構築子(->)を部分適用したものがFunctorのインスタンスになります
この説明を省略したら意味がわからないよね

642 名前:デフォルトの名無しさん [2021/01/11(月) 01:34:20.58 ID:OwjnhqSv.net]
超大作過ぎるけど

[Entropy and Diversity](https://golem.ph.utexas.edu/category/2020/12/entropy_and_diversity_on_the_a.html)

643 名前:デフォルトの名無しさん [2021/01/11(月) 11:54:49.85 ID:TrSsUTEh.net]
>>632
関数合成可能性の話と関数が関手であることは全く関係ないぞ

644 名前:デフォルトの名無しさん [2021/01/11(月) 13:43:32.73 ID:nJc/cTVc.net]
Haskell    圏論
=====================
関数      射
Functor    関手
Reader r    Hom関手

645 名前:デフォルトの名無しさん [2021/01/11(月) 16:14:02.10 ID:nJc/cTVc.net]
H本終えたくらいの初心者が、中級上級それ以上を目指すためのロードマップって大体こんな感じ?
わたしは全部マスターしたわけじゃなくて、界隈でよく聞くのでなんか重要そうくらいのノリw

中級
・Freeモナド
・Profunctor optics
・コモナド
・Custom Prelude

上級
・型レベルプログラミング
・Extensible Effects
・Indexed Monads
・Template Haskell

646 名前:デフォルトの名無しさん mailto:sage [2021/01/11(月) 23:19:18.98 ID:N3ahWSVP.net]
まず何より先にアプリ作ろうよ。
先人たちはアプリを作りまくる過程で、
役立つテクニックや概念を編み出してきたのだから。



647 名前:デフォルトの名無しさん mailto:sage [2021/01/12(火) 00:18:20.62 ID:5J1t5Bxr.net]
Haskellは哲学であり、哲学からは何も生まれない

648 名前:デフォルトの名無しさん [2021/01/12(火) 01:04:23.78 ID:exO7rD20.net]
>>639
ここでの問題はHaskellの鉄人になるためのロードマップであって、
Haskellでアプリを作れるようになるためのロードマップではない

649 名前:デフォルトの名無しさん mailto:sage [2021/01/12(火) 01:51:40.85 ID:pX8tczV2.net]
>>641
そうか、余計な事だった、すまない

650 名前:デフォルトの名無しさん mailto:sage [2021/01/12(火) 09:05:11.74 ID:IiGdAufF.net]
哲学からは法が生まれますが…

651 名前:デフォルトの名無しさん mailto:sage [2021/01/12(火) 10:08:30.41 ID:fccMRI32.net]
何かを生まなければならないというのは道徳か?
その道徳から全てが始まるのか

652 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 04:05:16.97 ID:A4IGUr+p.net]
オタクのこういう会話クソキモい

653 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 10:09:05.37 ID:o5CAyZYI.net]
キモいという感情から
感情と知性の分断が生まれる

654 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 10:21:18.95 ID:8kUJEegp.net]
Haskell でカッコよく速いプログラム書きたいんですが、どう言う分野が向いてますか?

655 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 21:12:21.98 ID:DinE+zFR.net]
>>647
パズルソルバー

656 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 22:41:38.73 ID:CNkC++cr.net]
感情は先入観から生じ
先入観を克服することで知性に至る



657 名前:デフォルトの名無しさん mailto:sage [2021/01/14(木) 00:13:44.79 ID:JY+VfWVO.net]
でも先入観のメリットはスピードだから
速度の最適化みたいな建前を用意すれば知性と知性の対等な関係にはなる

建前はキモいとか本音がカッコイイとか言い出さない限り

658 名前:デフォルトの名無しさん mailto:sage [2021/01/14(木) 07:11:45.05 ID:UC/QgsCt.net]
感情のための知性が工学
知性のための知性が理学

659 名前:デフォルトの名無しさん mailto:sage [2021/01/14(木) 08:24:32.45 ID:mp+NLhBe.net]
なんかやたらポエムを書きたがるレスが増えたな

660 名前:デフォルトの名無しさん mailto:sage [2021/01/14(木) 10:42:33.32 ID:ApYxPV7C.net]
音やリズムをデザインしてるのか
音読できない言文不一致言語があれば、デザインと論理的構造を分離できそう

661 名前:デフォルトの名無しさん [2021/01/15(金) 04:12:13.96 ID:NAFJshBl.net]
これ意見割れてるけどどっちが正しいの?
有識者諸君のご意見を伺いたい
https://www.quora.com/Is-functional-programming-most-likely-to-survive-transitions-to-different-CPU-architectures-like-post-von-neumann-ones

662 名前:デフォルトの名無しさん mailto:sage [2021/01/15(金) 10:43:33.32 ID:l3Q+U92p.net]
関数型を信じるというよりオブジェクト指向を疑うべき
オブジェクト間の通信がただの関数呼び出しから軽量スレッドに変わったらどうなるか等

663 名前:デフォルトの名無しさん mailto:sage [2021/01/15(金) 20:09:59.52 ID:SSKXVcKf.net]
>>655
重たくなる。

664 名前:デフォルトの名無しさん mailto:sage [2021/01/16(土) 10:01:48.97 ID:fPN57ROF.net]
fix関数は least-defined な不動点を見つけるそうだけど、
この least-defined ってどういう意味?

665 名前:デフォルトの名無しさん mailto:sage [2021/01/16(土) 10:43:22.09 ID:lq2o0P8I.net]
おれの先入観によるとポインタの循環の周期が最小

666 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 07:45:01.78 ID:0A31ygkk.net]
多分できないんだろうなと思いつつ質問です
あるページで乱数をいっぱい調達する方法でこんなのありました

randIntsList = let
getOne rec = ( return . ( : rec ) )
=<< ( randomIO :: IO Int )
in iterate ( >>= getOne ) ( return [ ] )

main = do
a <- ( return . head ) =<< randIntsList !! 100
print a

コレはもちろんうまく行きました
でもコレちょっと不愉快です
IO [ Int ] とかで例えば

randInts :: IO [ Int ]
randInts = do
hd <- ( randomIO :: IO Int )
tl <- randInts
return $ hd : tl

main = do
a <- ( return . head ) =<< randInts
print a

とかであらかじめ使う数を指定しないで好きなだけとってくるとかできないもんでしょうか?
上のはGHCで参照すると実行時エラー出ます



667 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 14:24:39.71 ID:7SUaJKsz.net]
ついさっき関数的プログラミングの話題してたが
やっぱり通じないな

関数?そりゃ関数くらい普通に書くよねw
副作用?必要なら出ないように書けばいいんじゃないの?どうでもよくない?
純粋関数の考え方?そんなのいらないよねw
部分適用?今までそんなの必要になったことないなあw そんなの何に使うんだ?

まあ言われてみれば誰にでもわかるような利点を提示できないってのは確かにあるが・・
利点がないなら好みの範囲で片付けられちゃったな

668 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 15:57:32.54 ID:ztk5BuHj.net]
いらないと思う人は使わなければいいし気にしなければいいってだけだよね

669 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 16:39:30.61 ID:IzsyJlfZ.net]
>>659
これでどうかな?
randInts2 :: [IO Int]
randInts2 =
iterate ( >>= const (randomIO :: IO Int) ) (randomIO :: IO Int)
main :: IO ()
main = do
a <- head randInts2
print a

670 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 17:07:44.96 ID:aAR5bcpB.net]
>>660
いわれてみればhaskell触るまでこういう特徴が泣くほどうれしいなんて思ってなかったなぁ……

671 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 17:39:40.94 ID:kKr2IDUq.net]
>>660
利点を提示っていうかLispとHaskellの違いを提示する必要がある
Lispの利点を再現するだけならPythonで十分な気がする

しかしHaskellを再現できるものがまだ出てこない
それは関数型じゃなくて静的型の説明をしないと意味が分からないと思うけど

672 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 18:38:17.88 ID:apYLuAz7.net]
>>662
ありがとうございます
そうなんです
今のところそれしか解決策ないんです
しかし希望では IO [ Int ] であって欲しいんです
イメージとしてはこうです
ある関数 f があって乱数で挙動が変わって欲しい
もちろん最終的にはIOモナドを使わないとしょうがない
しかし色々いじってる段階ではモナド被せないで代わりに擬似乱数無限配列 psuedRand :: [ Int ] みたいなのを食わせて

f a b c psuedRand

みたいに呼び出して色々頑張って、最後の最後にIOモナドで実地に

 ( return . f a b c ) =<< realRand

に切り替えるみたいな事ができないかなと思ったんです
f が使用する乱数がある程度わかるので別に無限列でなくてもいいっちゃいいんですけど
今一歩モナドに包まれてる関数いっぱい出てくるの好きじゃないんですよ
通のホムペとか見てるとむしろバンバンモナドでくるんどいた方がいいみたいなのもみるんですけどねぇ

673 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 18:57:39.14 ID:IzsyJlfZ.net]
>>665
そうなのかあ。
すまない、俺では力不足のようだ。

674 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 19:04:15.17 ID:apYLuAz7.net]
>>666
いえいえ、ありがとうございます
考えていただいて感謝です🙏

675 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 20:02:19.54 ID:kKr2IDUq.net]
headやtailの戻り値の型はIOではないって宣言してるから
リスト処理中にrandomIOができなかったとしても不思議ではない
型を宣言するってそういうことよ

676 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 21:15:09.40 ID:jArj32vs.net]
>>665
やりたい事の本質がいまいち分かりません。
2点確認します。

ひとつめ。
結局のところ今は [a] 型の乱数を返す関数を作りたいのでしょうか。
それとも、IO [a] 型の乱数を返す関数を作りたいのでしょうか。
はたまた、両方でしょうか。

ふたつめ。
開発環境では
> f a b c psuedRand

本番環境では
>  ( return . f a b c ) =<< realRand

という事でしょうか。
前者は純粋関数の式、後者は IO モナドを伴う式です。
これは、本番環境で IO モナドな関数を、開発環境では純粋関数で開発するという事ですよね。
開発環境を本番環境にする際には、後者の式を呼び出している外側の関数も、
純粋関数から IO モナドに書き換えるのでしょうか。
あまりお勧めしません。
本番環境で IO モナドな関数は、開発時も IO モナドで開発&テストした方が良いと思います。
環境が違ってもインターフェース(型シグネチャ)はそろえた方が良いです。
事情がおありなので、あくまで私は勧めないというだけですけど。



677 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 21:21:29.93 ID:apYLuAz7.net]
>>668
まぁそうですね
できんもんはできんのでしょうね
ただ出来るか出来ないかの判定がまだまだ自分の実力不足でできないのか、実際禁止されててできないかのか判断がつかないんです

>>669
やはりそうなんでしょうね
まだまだ初心者でいまひとつモナドで包まれてるの馴染みがないので避けれるなら避けたいと思ってしまいます
この場合はモナドで最終的にくるむなら避けられても避けるべきではないのでしょうね

678 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 21:52:28.04 ID:kKr2IDUq.net]
>>670
型を書かない言語も普通に存在するので、型を無視する方法があってもそれも不思議ではない

679 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 23:15:01.74 ID:Sb+ElJSJ.net]
>>671
まぁ今回のは諦めます
出来るのなら見つけたホムペの人が紹介してくれてただろうし

680 名前:デフォルトの名無しさん mailto:sage [2021/01/21(木) 00:38:31.39 ID:HkuQh/W6.net]
>>660
副作用とか純粋関数の話は単体テストの話題と絡めたいね
それが通じなかったら知らん
部分適用というか高階関数の話は
コールバックとかイテレータのような「処理の抽象化」が
極めて書きやすくなるというような話でどうか

681 名前:デフォルトの名無しさん [2021/01/21(木) 06:01:52.78 ID:mwzMDOkA.net]
Haskellで厳しく性能を最適化しようとすると
抽象的なところで実装を意識したコードを書くことになって苦労する
みたいなレビューがあった

Haskellはベンチ結果良いように見えて
その手の「実装を意識したコード」がベンチ用に書かれるからで
実際は割と遅めなんだな

682 名前:デフォルトの名無しさん mailto:sage [2021/01/21(木) 06:07:07.88 ID:LkrjH2wS.net]
>>674
そのレビューのURLを貼っていただけないでしょうか

683 名前:デフォルトの名無しさん [2021/01/21(木) 06:30:57.22 ID:mwzMDOkA.net]
https://stackoverflow.com/questions/35027952/why-is-haskell-ghc-so-darn-fast
この辺
> thanks for the link.
80 lines is what I called "low-level style of programming not much different than
programming in C itself." . "the higher level code",
that would be the "stupid" fmap (length &&& length .
words &&& length . lines) readFile.
If that was faster than (or even comparable to) C,
the hype here would be totally justified then.
We still need to work hard for speed in Haskell as in C, is the point.

>>612もそんなことをかいてる

684 名前:デフォルトの名無しさん [2021/01/21(木) 06:38:11.58 ID:mwzMDOkA.net]
以下の厳密というのは遅延評価じゃなくするという事だろう?
しかも「プロファイルを作成して改善」は一度アプリを書いてから実行の様子を観察して最適化していくという事だろう。
抽象的にHaskellらしく書いていきなり速いというわけではないという事だ。
プロファイラーでボトルネックを特定して特殊なコードに変えていけば速くなる、と。

>はい、怠惰はおそらくナイーブなHaskellが遅い最大の理由であり、
最適化されたHaskellでさえ速度の点で信頼できない可能性があります。
そのため、パフォーマンスが重要なアプリケーションにはお勧めしません。
OCamlの方が適しています。繰り返しになりますが、
HaskellをBangPatternsなどで厳密にすることはそれほど難しくありません。
また、コードの読み取りや保守が難しくなることもありません。
したがって、パフォーマンスが望ましいが、遅いプロトタイプでも問題がない場合は、
Haskellが非常に良い選択です。うまく機能するものを一緒にハックしてから、
プロファイルを作成して改善します。

685 名前:デフォルトの名無しさん [2021/01/21(木) 08:18:51.22 ID:mwzMDOkA.net]
こういう認識
・Haskellはコードだけでは最適化ポイントを見つけれない
・最適化したら変なコードになる
・普通のHaskellコードはベンチで他言語に惨敗する

686 名前:デフォルトの名無しさん [2021/01/21(木) 09:21:08.07 ID:mwzMDOkA.net]
これも
・最適化の方法が処理系(GHC)次第で決まり、プログラマーの認識内に無い。
GHCに対してひたすらトライアンドエラー



687 名前:デフォルトの名無しさん mailto:sage [2021/01/21(木) 21:44:08.46 ID:AWFMWVQb.net]
・Haskellが欲しかったポジションはなんかPythonにとられてしまった

688 名前:デフォルトの名無しさん mailto:sage [2021/01/22(金) 00:20:12.86 ID:IysdrbOG.net]
HaskellとPythonは似ていないから両方使ってもDRYに違反しない

似たもの同士で馴れ合い、異質なもの同士を分断するやつは信用できないが
Pythonは似たもの同士でしっかり競争して生き残ったやつだから信用できる

689 名前:デフォルトの名無しさん mailto:sage [2021/01/22(金) 01:34:45.31 ID:Zh6FWeVu.net]
pythonがなかったとしてもhaskellがそのポジションになることはなかっただろう

690 名前:デフォルトの名無しさん mailto:sage [2021/01/22(金) 02:27:11.57 ID:XLcorGPG.net]
欲しかったHaskell
・型を最大限に活用、バグが無いことを保証しつつ自然にC言語並みの性能も出る

691 名前:デフォルトの名無しさん mailto:sage [2021/01/22(金) 08:04:15.32 ID:RWrydEj5.net]
Haskellerのキモオタ「シグネチャァ」

692 名前:デフォルトの名無しさん mailto:sage [2021/01/22(金) 12:35:37.28 ID:Erx3tlcS.net]
醜悪な表現が得意な奴って、綺麗な表現だとポエムとか言われる恐怖を煽られた結果なのかなと
ふと思った

693 名前:デフォルトの名無しさん [2021/01/22(金) 18:29:59.60 ID:WeFjBpWyB]
デキる人ほどフリーランス化する?★働き方改革
https://www.youtube.com/watch?v=ALflcwYOJtQ
年収890万円以下は社会のお荷物★騙される労働者
https://www.youtube.com/watch?v=CAp-ZrJpF54
騙されたくなかったら勉強しろ★他人のルールは損をする
https://www.youtube.com/watch?v=s176O6qKuPw
底辺の99%は一生底辺★10年後が見えない同僚たち
https://www.youtube.com/watch?v=4Mfiwn2sPD8
稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ?
https://www.youtube.com/watch?v=Fi7bILN4wes
サラリーマン思考では儲からない理由
https://www.youtube.com/watch?v=iW6oAo0q0ZI
「頭使えよ貧乏人」に思う、寝てても金入るシステムを作る人
https://www.youtube.com/watch?v=VEB6M_s6abs

694 名前:デフォルトの名無しさん mailto:sage [2021/01/23(土) 13:17:02.46 ID:u7XOzuV6.net]
>>672
ListT を使えばと思ったけどだめだった。
・参考
https://blog.mudatobunka.org/entry/2018/01/03/233314
・残骸


695 名前: module Rand2 where

-- stack install list-t
-- stack exec ghci

import Control.Monad.IO.Class ( liftIO )
import ListT ( ListT, toList )
import System.Random ( Random(randomIO, randomRIO) )

t1 :: ListT IO Int
t1 = return 3

t2 :: ListT IO Int
t2 = liftIO (randomIO :: IO Int)

t3 :: ListT IO [Int]
t3 = repeat <$> t2

output :: ListT IO [Int] -> IO ()
output t3 = do
li0 <- toList t3
print $ take 10 $ head li0
[]
[ここ壊れてます]

696 名前:デフォルトの名無しさん mailto:sage [2021/01/23(土) 22:12:27.68 ID:u7XOzuV6.net]
>>687
できたー!
module Rand2 where

-- stack install list-t
-- stack exec ghci

import Control.Monad.IO.Class ( liftIO )
import ListT ( ListT, toList, cons, take )
import System.Random ( Random(randomIO) )

t2 :: ListT IO Int
t2 = liftIO (randomIO :: IO Int)

t3 :: ListT IO Int
t3 = do
x <- t2
cons x t3

output :: IO ()
output = do
li <- toList $ ListT.take 10 t3
print li

{-
*Rand2> output
[7616927328998369033,6970782903781268443,-1509938769401207081,-2789264750098693865,-6524417077297424569,8403979199680420436,-3097298192134792937,-2736699795503652525,-4754186463647322678,5658901448509988002]
-}



697 名前:デフォルトの名無しさん [2021/01/24(日) 10:57:12.77 ID:EEhZoft7.net]
自分の理解が根本的に間違ってるかもしれんけど
haskellは宣言型で実効順序が定まっていないみたいな話を聞いたんだけど
do記法は普通に上から下に実行されるというイメージになるの?

main = do
x <- readLn
x2 <- readLn

こういう風に書いた場合、最初に入力したものがxに入り、その順番は入れ替えれないはず
do記法はほとんど命令型じゃないの?

IOモナドとかに入力されていくアクション列はその順番を入れ替えれないよね?
どんな感じでコーディングされてるか知らないけど
副作用があるところでは順番を入れ替えれないはず、即ち命令型と大差ないはず

698 名前:デフォルトの名無しさん mailto:sage [2021/01/24(日) 12:14:30.84 ID:3w4a632B.net]
>>688
おお、できるんですか!?
すげー
残念ながらいまListT使えないので環境整理してやってみます

699 名前:デフォルトの名無しさん mailto:sage [2021/01/24(日) 13:21:27.07 ID:vsDmG4Mq.net]
>>689
do記法という言語機能は、上から下への命令の実行を記述するものではない
モナドの組み合わせ方を宣言しているだけ
IOのようなモナドの定義に対してはたまたま命令型言語のようになるだけ
言語レベルで命令を上から下へ実行しているわけではない

700 名前:デフォルトの名無しさん [2021/01/24(日) 15:49:32.04 ID:EEhZoft7.net]
じゃあ標準入力から来た文字列の1行目と2行目を分けて扱うにはどう書くの?

701 名前:デフォルトの名無しさん mailto:sage [2021/01/24(日) 16:19:42.60 ID:QSDOehpN.net]
ListT.toListの引数には有限のリストしか渡せないんだろう多分
現に
li <- toList t3
print (take 10 li)
ではなく
li <- toList $ ListT.take 10 t3
print li
と書いてある

702 名前:デフォルトの名無しさん mailto:sage [2021/01/24(日) 16:51:40.79 ID:o8L11MsB.net]
>>693
> ListT.toListの引数には有限のリストしか渡せないんだろう多分
> 現に
> li <- toList t3
> print (take 10 li)
> ではなく
> li <- toList $ ListT.take 10 t3
> print li
> と書いてある

確認したところ、おっしゃる通り、
前者では応答が返ってきませんでした。
(ListT.repeat でも同じ結果だったので、t3 が悪いのではないです)

> ListT.toListの引数には有限のリストしか渡せないんだろう多分
これで合っていると思います。

703 名前:デフォルトの名無しさん mailto:sage [2021/01/24(日) 23:50:31.64 ID:3w4a632B.net]
やっぱり無理なんですかねぇ?
例えば以下は通るので ”IO 無限リスト” が原理的に無理なわけではないとは思うんですけど

list = return $ repeat '3'

main = do
x <- list
print $ take 10 x

何がどう違うもんなんでしょう?

704 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 09:17:23.58 ID:xOoQiCMv.net]
すいません
無限ランダム整数列の件ですが方法がありました
というかSystem.Randomの中に最初から用意されてました
自作でランダム有限列作っておられた方のブログ見つけたので無限列なんて用意されてないとすっかり思い込んでました
以下の方法で1〜10の長さ100の乱数列が簡単に作れるようです
第一引数に値の範囲、第二引数に乱数の種を仕込みます
乱数の種は
mkStdGen :: Int -> StdGen

getStdGen :: IO StdGen
newStdGen :: IO StdGenSource
で作成すれば良いようです
乱数の型はIntだけでなくDoubleなどでも作れるようです

----
import System.Random

randomInts :: StdGen -> [ Int ]
randomInts = randomRs (1,10)

main = do
ris <- ( return . randomInts ) =<< getStdGen
print $ take 100 ris

705 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 09:36:17.94 ID:lGPRZ7j1.net]
種が IO だから、
randomRs の戻りは [a] なんだね

706 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 11:51:44.88 ID:crCxtFmd.net]
ライブラリは暗記ですが、数学は暗記ですか?っていう定番のあれだな



707 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 13:32:32.62 ID:/TZZteD8.net]
>>692
newStdGen :: IO StdGenSource
↑ワロタw
コピペするとよくあるわw

708 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 13:33:07.46 ID:/TZZteD8.net]
安価ミス>>696

709 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 00:16:50.20 ID:UiZI3fhW.net]
dp の質問です
haskell でdynamic programing する方法の例でFibonacci数列の計算を

fib = 0:1:( zipWith ( + ) ( drop 0 fib ) ( drop 1 fib ) )

で計算させるというテクニックを紹介しているページがあってなるほどなぁと感心しました
で同じテクニック使ってcomb6 !!i !! jが二項係数C[i, j]になる配列

comb6 = ( ( 1 : ( repeat 0 ) ) : )
$ zipWith ( zipWith ( + ) ) comb6 ( map ( 0 : ) comb6 )

を作ってみました
コレはうまくいきます
comb6 !! 2000 !! 1000
とかも一瞬で計算してくれます
でcomb7 !! i !! j が二項係数C[ i+ j, i ]となる配列comb7を

comb7 = ( ( repeat 1 ) : )
$ zipWith ( zipWith ( + ) )
( comb7 )
( tail $ map ( 1 : ) $ comb7 )

と定義してやってみると、compileまでは通るのですが実行comb!!1!!0すると<<loop>>と言われて止まってしまいます
しかし手計算で展開してみてもloopしてないと思うんですけどどこがおかしいのかわかりません
どなたかわかりませんでしょうか?

710 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 11:32:01.04 ID:fGEABlaN.net]
comb7 = x : xs
xs = zipWith f comb7 ys
ys = tail zs
zs = map g comb7
zs = map g (x : xs)
= g x : map g xs
ys = tail (g x : map g xs)
= map g xs
xs = zipWith f comb7 (map g xs) -- ここで(map g xs)のパターンマッチができない

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に対してモノイドを構成するなら、
(>>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 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<342KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef