[過去ログ] 関数型プログラミング言語Haskell Part33 (998レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(1): 2020/02/10(月)18:17 ID:L6eYQqyh(1/5) AAS
関数型プログラミング言語 Haskell について語るスレです。

Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/

前スレ
関数型プログラミング言語Haskell Part32
2chスレ:tech
2: 2020/02/10(月)18:18 ID:L6eYQqyh(2/5) AAS
過去スレ一覧
31) 2chスレ:tech
30) 2chスレ:tech
29) 2chスレ:tech
28) 2chスレ:tech
27) 2chスレ:tech
26) 2chスレ:tech
25) 2chスレ:tech
24) 2chスレ:tech
23) 2chスレ:tech
省22
3: 2020/02/10(月)18:18 ID:L6eYQqyh(3/5) AAS
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
https://en.wikibooks.org/wiki/Haskell

Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
http://learnyouahaskell.com/chapters

Real World Haskell (同名書籍の無料オンライン版)
http://book.realworldhaskell.org/read/

(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
省13
4
(1): 2020/02/10(月)18:28 ID:L6eYQqyh(4/5) AAS
質問すると埋まりそうだったので新スレ立てさせてもらいました

Stringで長さ(文字数)ではなくUTF-8コードとしての総バイト数を知れるような関数はありますか?
5
(1): 2020/02/10(月)20:12 ID:gQeDR86I(1/2) AAS
ご苦労さん。関連サイトがやや古くなっている感があるね。
追加

日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp
6
(1): 2020/02/10(月)20:13 ID:gQeDR86I(2/2) AAS
>>4
:set -XOverloadedStrings
import Data.Text.Lazy (Text)
import Data.Text.Lazy.Encoding (encodeUtf8)
import Data.ByteString.Lazy (unpack)
length . unpack . encodeUtf8 $ ("あ" :: Text )
-- 3
7: 2020/02/10(月)21:23 ID:L6eYQqyh(5/5) AAS
>>6
ありがとうございます!

>>5
リンク切れは修正したのですが全くお気楽じゃないページにリンクしてしまいましたwww

お気楽 Haskell プログラミング入門
http://www.nct9.ne.jp/m_hiroi/func/haskell39.html

お気楽 Haskell プログラミング入門
http://www.nct9.ne.jp/m_hiroi/func/haskell.html
8: 2020/02/10(月)22:24 ID:qtoUvtqH(1) AAS
haskellはオワコンなの?
9
(3): 2020/02/11(火)11:04 ID:GjzPGqUa(1) AAS
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]
省4
10: 2020/02/11(火)13:36 ID:TiXBKsVJ(1) AAS
>>9
こんな関数いつ使うん?
11: 2020/02/11(火)14:18 ID:d+YF7kv3(1) AAS
J言語でも同様の操作は用意されている。
___ a =: >: i. 3 4
1 2 3 4
5 6 7 8
9 10 11 12

___ </. a
+-+---+-----+------+----+--+
|1|2 5|3 6 9|4 7 10|8 11|12|
+-+---+-----+------+----+--+
12: 2020/02/11(火)18:22 ID:RQLUpvMq(1) AAS
畳み込み計算(foldじゃなくてconvolutionの方)とかやりたいときにあると便利かも?
13: 2020/02/12(水)08:25 ID:5WxWkSHH(1) AAS
昔話Project Eulerをhaskellで解くのに同じ役割の関数を自作した記憶がある
14: 2020/02/12(水)13:37 ID:1ZV1cGD2(1) AAS
そもそも天才じゃないとやりたいことが出来ない言語ってどうなんだ
15: 2020/02/12(水)13:53 ID:MDE/KJVl(1) AAS
別に他の言語でも10倍量書けば同じことが出来るんだから使わなければいいだけ
共同作業の時は困るから天才だけでチーム組んでもらえばいい
16
(1): 2020/02/12(水)14:24 ID:B2qV6LKd(1) AAS
凡才も天才もほぼ同様に書けるpythonのような素晴らしい言語より、
凡才でも拙く書けるけど天才ならシンプルに書けるhaskellのような素人お断りな言語の方が好き。

魔法みたいで中二心をくすぐられるし、学ぶ意欲がわく。

まぁ、仕事の道具としては迷わず前者を使うけど。
17
(1): 2020/02/12(水)20:45 ID:DqzYUQ+/(1) AAS
>>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の場合、
プログラミング言語自体が解くための問題になっている感じ。
18
(1): 2020/02/12(水)22:22 ID:ohhYjydu(1) AAS
Haskellの書き方極めればC言語に匹敵する速度が出せるって聞いたんだけどマジ?
19
(1): 2020/02/13(木)00:18 ID:00coYSBu(1) AAS
>>18

20
(2): 2020/02/13(木)02:31 ID:7PHqZJTi(1/2) AAS
>>17
短さはともかく解りやすさは一概には言えないと思う。こんなのはどうかな
l = take 3 . unfoldr (Just . splitAt 4) $ [1..12]
diagonals l = map catMaybes . transpose $ zipWith (<>) (inits . repeat $ Nothing) (map (map Just) l)

> プログラミング言語は問題を解くための道具だが、Haskellの場合、
> プログラミング言語自体が解くための問題になっている感じ。
これは言い得ていると思う。Haskell の色んな所に入り込んだ抽象化のおかげで、
従来、アプリを作る末端のプログラマーが各々処理していた仕事が、ライブラリやコンパイラ側に吸い上げられる。
だから全体としての仕事の総量は少なくなる。でもそのかわり、ある程度書けるためにはベースの抽象に慣れる必要がある。
fmapってなに/モナドってなに/Foldableってなに/Lazyってなに... 学習コストは他の言語に比べてずっと高い。
省4
1-
あと 978 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.314s*