[過去ログ]
関数型プログラミング言語Haskell Part33 (1002レス)
関数型プログラミング言語Haskell Part33 http://mevius.5ch.net/test/read.cgi/tech/1581326256/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
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
10: デフォルトの名無しさん [sage] 2020/02/11(火) 13:36:26.72 ID:TiXBKsVJ >>9 こんな関数いつ使うん? http://mevius.5ch.net/test/read.cgi/tech/1581326256/10
17: デフォルトの名無しさん [] 2020/02/12(水) 20:45:42.48 ID:DqzYUQ+/ >>9 Rなら同様の関数をもっと短く分かりやすく書ける。 diagonals <- function(A) lapply(2:sum(dim(A)), function(i) A[row(A) + col(A) == i]) diagonals(matrix(1:12, 3, 4, byrow = TRUE)) これで [[1], [5,2], [9,6,3], [10,7,4], [11,8], [12]] というベクトルのリストが 生成される。 >>16 そうだな。プログラミング言語は問題を解くための道具だが、Haskellの場合、 プログラミング言語自体が解くための問題になっている感じ。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/17
23: デフォルトの名無しさん [] 2020/02/13(木) 17:49:26.84 ID:0eJoVY/8 >>9 Rubyだと def diagonals(a) m = a.size n = a[0].size a.flatten.group_by.with_index{|v,i| i/m+i%n}.values end http://mevius.5ch.net/test/read.cgi/tech/1581326256/23
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.040s