[過去ログ] 関数型プログラミング言語Haskell Part33 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
9(3): デフォルトの名無しさん [sage] 2020/02/11(火)11:04 ID:GjzPGqUa(1)
universe-base パッケージに Data.Universe.Helpers.diagonals という関数があって、
diagonals [[1,2,3,4], [5,6,7,8], [9,10,11,12]] = [[1], [5,2], [9,6,3], [10,7,4], [11,8], [12]]
という、つまり行列を対角線状に走査して並べ直す計算をしてくれる。
で、これの関数定義がかなりシンプルなんだ。
diagonals :: [[a]] -> [[a]]
diagonals = tail . go [] where
go b es_ = [h | h:_ <- b] : case es_ of
[] -> transpose ts
e:es -> go (e:ts) es
where ts = [t | _:t <- b]
簡単な行列で関数を展開してみると何をやっているのかよく分かる。
これ考えたヤツ天才じゃね?
今の俺は他人のソースを展開して理解するので精一杯だけど、
いつかこんな関数定義ができるよう精進したい。
24(3): デフォルトの名無しさん [sage] 2020/02/14(金)14:43 ID:3dEdKDtV(1)
Haskellで書かれた他人のコードって詠みにくいと思うのは俺だけか?
型クラスやモナドが難しいというより、何がどこで定義されてるかよくわからんし、どういう動作をする関数なのかがぱっと見でわからん。
74(4): デフォルトの名無しさん [sage] 2020/03/27(金)07:23 ID:7fKLUCpq(1/4)
そんなに間違ってはないけどな。
haskellの解釈としては「命令列」を構成して返しているから副作用はない!
副作用を起こしているのは実行系だ!
みたいな屁理屈だし。
93(3): デフォルトの名無しさん [] 2020/03/27(金)20:16 ID:adWh10vX(2/3)
まずはっきりさせておきたいが、Haskellのテキストで
「命令列」なるものは出てこんし誰もそんなものを使ってモナドを説明しようとしてない。
あくまで「命令列」とは、>>74が自身でモナドを理解するために有用な概念だと見出し定義した用語と考えるべきだ
だからここで有意義な議論がしたいなら、まず目的を確認する必要がある。
我々は>>74さんの頭の中を理解したいのか?
それともモナドに対してより良い理解を形成したいのか?
208(3): デフォルトの名無しさん [sage] 2020/04/13(月)13:06 ID:pEw+DEbK(1)
タイムアウトのやつ
この問題やってて
https://www.codewars.com/kata/54d496788776e49e6b00052f/train/haskell
通らないコードがこれ
sumOfDivided :: [Integer] -> [(Integer, Integer)]
sumOfDivided xs = map (\x -> (x,foldr (+) 0 (filter ((==0).(flip rem x) ) xs)) ) $ prime_factors ( product xs) 2
where
prime_factors 1 _ = []
prime_factors m n
| rem m n == 0 = n : (prime_factors (quot m n) $ n+1)
| otherwise = prime_factors m $ n+1
こういう感じでコード組み立てるんだけど、他の問題でもしょっちゅうタイムアウト起こしてる
応答の速いコードにするにはどんなふうに変えていけばいいかを知りたい
cで言うと値コピーしてソートしないでポインタでソートすると速いみたいな
338(4): デフォルトの名無しさん [sage] 2020/05/29(金)00:14 ID:Hx2r4buk(1)
haskell興味あるのですがhaskellの長所と短所ってなんですかる
403(3): デフォルトの名無しさん [] 2020/08/21(金)11:35 ID:VIa1N6p8(2/3)
あともう一つ質問があります。
「すごいHaskellたのしく学ぼう!」に「関数合成は右結合なので、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
と書いてありますが、左結合だったとしても、同様に一度にたくさんの関数を合成できるはずです。
左結合だったとしてもf (g (z x))は(f . g. z) xと等価であることに変わりはないはずです。
これは一体何が言いたいのでしょうか?
653(3): デフォルトの名無しさん [sage] 2021/01/20(水)14:24 ID:7SUaJKsz(1)
ついさっき関数的プログラミングの話題してたが
やっぱり通じないな
関数?そりゃ関数くらい普通に書くよねw
副作用?必要なら出ないように書けばいいんじゃないの?どうでもよくない?
純粋関数の考え方?そんなのいらないよねw
部分適用?今までそんなの必要になったことないなあw そんなの何に使うんだ?
まあ言われてみれば誰にでもわかるような利点を提示できないってのは確かにあるが・・
利点がないなら好みの範囲で片付けられちゃったな
703(4): デフォルトの名無しさん [sage] 2021/02/04(木)22:24 ID:w5MK0dgi(1)
>>702
ありがとうございます
参考にさせていただきます
そうですね
もう一つ可読性が欲しい感じがします
元々の問題意識としては私は可読性の高いコードが要求されることが多いのです
例えばFibonacci数列であれば
f n = ( f $ n -1 ) + ( f $ n - 2 )
に可読性においてまさるものはないのですが、もちろんこれでは遅くて使い物になりません
なので実用性も多少はなりとも求めるならある程度は可読性を犠牲にせざるを得ないのですが、どういう方法がいいのだろうというのがテーマなのです
でたまたまFibonacciの場合に
f = 0 : 1 : ( zipWith ( + ) f $ tail f )
というのを見つけてコレ中々いいなと、dpで計算してるのに“メモ”をするための不要な手続きを書く必要がなく、Haskellの“call by need”の機能をうまく利用してdp計算させてるところにちょっと唸ったもので
でどれくらいコレでいけるのかなと二重数列をやってみたらうまくいかなくて、どうしたもんかなと
まぁコレはしょうがないのかもしれませんけど
707(4): デフォルトの名無しさん [sage] 2021/02/05(金)19:44 ID:DBOaHn9B(1/2)
>>703
その遅くて使い物にならない計算を、
可読性をあまり犠牲にしないで爆速にする方法に、
メモ化(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 関数について、
適当な小さな値に適用させたものを
自分でノートに展開してみるといいです。
768(4): デフォルトの名無しさん [sage] 2021/03/19(金)01:58 ID:MuA020tT(1/2)
名前呼び出しの意味が分かりません
874(3): デフォルトの名無しさん [sage] 2021/07/26(月)04:08 ID:FlIQ/SVE(1)
https://cognicull.com/ja
Haskellやるのにこの辺は履修済みであることが求められるの?
Obj-Cだとほぼなくてもアプリは書けるけども
Haskellって数学じゃないのに数学のフリしてるところあるよね
利用者も然りで余計混乱を招いてる気がする
907(3): デフォルトの名無しさん [sage] 2021/09/26(日)07:18 ID:m/60KM4j(1/2)
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 の理解がいっそう深まる。
936(3): デフォルトの名無しさん [] 2021/10/29(金)12:55 ID:SqmTIce6(1)
不動点演算子がわからなくて泣ける
再帰呼び出しになってないのに再帰になってるのはわかるんだけど
966(4): デフォルトの名無しさん [sage] 2021/12/14(火)12:11 ID:78Ep1iUH(1)
あの伝説の岡部健が復活!!
https://twitter.com/ken74047924
(おまけ情報)
Quoraでも有名だった岡部健、2021年12月にTwitterのアカウントまたまた永久凍結される。
当時のアーカイブは多少ネットに残ってるらしい
https://twitter.com/KenSmooth5
https://i.imgur.com/Ws4RM1o.png
https://twitter.com/5chan_nel (5ch newer account)
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.059s