[過去ログ]
関数型プログラミング言語Haskell Part33 (1002レス)
関数型プログラミング言語Haskell Part33 http://mevius.5ch.net/test/read.cgi/tech/1581326256/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
9: デフォルトの名無しさん [sage] 2020/02/11(火) 11:04:03.53 ID:GjzPGqUa 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] 簡単な行列で関数を展開してみると何をやっているのかよく分かる。 これ考えたヤツ天才じゃね? 今の俺は他人のソースを展開して理解するので精一杯だけど、 いつかこんな関数定義ができるよう精進したい。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/9
24: デフォルトの名無しさん [sage] 2020/02/14(金) 14:43:09.16 ID:3dEdKDtV Haskellで書かれた他人のコードって詠みにくいと思うのは俺だけか? 型クラスやモナドが難しいというより、何がどこで定義されてるかよくわからんし、どういう動作をする関数なのかがぱっと見でわからん。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/24
74: デフォルトの名無しさん [sage] 2020/03/27(金) 07:23:52.96 ID:7fKLUCpq そんなに間違ってはないけどな。 haskellの解釈としては「命令列」を構成して返しているから副作用はない! 副作用を起こしているのは実行系だ! みたいな屁理屈だし。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/74
93: デフォルトの名無しさん [] 2020/03/27(金) 20:16:36.86 ID:adWh10vX まずはっきりさせておきたいが、Haskellのテキストで 「命令列」なるものは出てこんし誰もそんなものを使ってモナドを説明しようとしてない。 あくまで「命令列」とは、>>74が自身でモナドを理解するために有用な概念だと見出し定義した用語と考えるべきだ だからここで有意義な議論がしたいなら、まず目的を確認する必要がある。 我々は>>74さんの頭の中を理解したいのか? それともモナドに対してより良い理解を形成したいのか? http://mevius.5ch.net/test/read.cgi/tech/1581326256/93
208: デフォルトの名無しさん [sage] 2020/04/13(月) 13:06:48.82 ID:pEw+DEbK タイムアウトのやつ この問題やってて ttps://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で言うと値コピーしてソートしないでポインタでソートすると速いみたいな http://mevius.5ch.net/test/read.cgi/tech/1581326256/208
338: デフォルトの名無しさん [sage] 2020/05/29(金) 00:14:38.34 ID:Hx2r4buk haskell興味あるのですがhaskellの長所と短所ってなんですかる http://mevius.5ch.net/test/read.cgi/tech/1581326256/338
403: デフォルトの名無しさん [] 2020/08/21(金) 11:35:07.30 ID:VIa1N6p8 あともう一つ質問があります。 「すごいHaskellたのしく学ぼう!」に「関数合成は右結合なので、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」 と書いてありますが、左結合だったとしても、同様に一度にたくさんの関数を合成できるはずです。 左結合だったとしてもf (g (z x))は(f . g. z) xと等価であることに変わりはないはずです。 これは一体何が言いたいのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1581326256/403
653: デフォルトの名無しさん [sage] 2021/01/20(水) 14:24:39.71 ID:7SUaJKsz ついさっき関数的プログラミングの話題してたが やっぱり通じないな 関数?そりゃ関数くらい普通に書くよねw 副作用?必要なら出ないように書けばいいんじゃないの?どうでもよくない? 純粋関数の考え方?そんなのいらないよねw 部分適用?今までそんなの必要になったことないなあw そんなの何に使うんだ? まあ言われてみれば誰にでもわかるような利点を提示できないってのは確かにあるが・・ 利点がないなら好みの範囲で片付けられちゃったな http://mevius.5ch.net/test/read.cgi/tech/1581326256/653
703: デフォルトの名無しさん [sage] 2021/02/04(木) 22:24:53.84 ID:w5MK0dgi >>702 ありがとうございます 参考にさせていただきます そうですね もう一つ可読性が欲しい感じがします 元々の問題意識としては私は可読性の高いコードが要求されることが多いのです 例えばFibonacci数列であれば f n = ( f $ n -1 ) + ( f $ n - 2 ) に可読性においてまさるものはないのですが、もちろんこれでは遅くて使い物になりません なので実用性も多少はなりとも求めるならある程度は可読性を犠牲にせざるを得ないのですが、どういう方法がいいのだろうというのがテーマなのです でたまたまFibonacciの場合に f = 0 : 1 : ( zipWith ( + ) f $ tail f ) というのを見つけてコレ中々いいなと、dpで計算してるのに“メモ”をするための不要な手続きを書く必要がなく、Haskellの“call by need”の機能をうまく利用してdp計算させてるところにちょっと唸ったもので でどれくらいコレでいけるのかなと二重数列をやってみたらうまくいかなくて、どうしたもんかなと まぁコレはしょうがないのかもしれませんけど http://mevius.5ch.net/test/read.cgi/tech/1581326256/703
707: デフォルトの名無しさん [sage] 2021/02/05(金) 19:44:21.42 ID:DBOaHn9B >>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 関数について、 適当な小さな値に適用させたものを 自分でノートに展開してみるといいです。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/707
768: デフォルトの名無しさん [sage] 2021/03/19(金) 01:58:47.96 ID:MuA020tT 名前呼び出しの意味が分かりません http://mevius.5ch.net/test/read.cgi/tech/1581326256/768
874: デフォルトの名無しさん [sage] 2021/07/26(月) 04:08:52.62 ID:FlIQ/SVE ttps://cognicull.com/ja Haskellやるのにこの辺は履修済みであることが求められるの? Obj-Cだとほぼなくてもアプリは書けるけども Haskellって数学じゃないのに数学のフリしてるところあるよね 利用者も然りで余計混乱を招いてる気がする http://mevius.5ch.net/test/read.cgi/tech/1581326256/874
907: デフォルトの名無しさん [sage] 2021/09/26(日) 07:18:33.81 ID:m/60KM4j 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 の理解がいっそう深まる。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/907
936: デフォルトの名無しさん [] 2021/10/29(金) 12:55:32.45 ID:SqmTIce6 不動点演算子がわからなくて泣ける 再帰呼び出しになってないのに再帰になってるのはわかるんだけど http://mevius.5ch.net/test/read.cgi/tech/1581326256/936
966: デフォルトの名無しさん [sage] 2021/12/14(火) 12:11:46.65 ID:78Ep1iUH あの伝説の岡部健が復活!! 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) http://mevius.5ch.net/test/read.cgi/tech/1581326256/966
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.546s*