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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:17:36.49ID:L6eYQqyh
関数型プログラミング言語 Haskell について語るスレです。

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

前スレ
関数型プログラミング言語Haskell Part32
https://mevius.5ch.net/test/read.cgi/tech/1548720347/
2デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:18:05.22ID:L6eYQqyh
過去スレ一覧
31) https://mevius.5ch.net/test/read.cgi/tech/1506447188/
30) http://mevius.2ch.net/test/read.cgi/tech/1484491434/
29) http://peace.2ch.net/test/read.cgi/tech/1436869629/
28) http://peace.2ch.net/test/read.cgi/tech/1428535861/
27) http://peace.2ch.net/test/read.cgi/tech/1420718555/
26) http://peace.2ch.net/test/read.cgi/tech/1406436392/
25) http://peace.2ch.net/test/read.cgi/tech/1393313450/
24) http://toro.2ch.net/test/read.cgi/tech/1382705669/
23) http://toro.2ch.net/test/read.cgi/tech/1376111807/
22) http://toro.2ch.net/test/read.cgi/tech/1364009659/
21) http://toro.2ch.net/test/read.cgi/tech/1358702176/
20) http://toro.2ch.net/test/read.cgi/tech/1350428908/
19) http://toro.2ch.net/test/read.cgi/tech/1340760070/
18) http://toro.2ch.net/test/read.cgi/tech/1331902463/
17) http://toro.2ch.net/test/read.cgi/tech/1325510368/
16) http://toro.2ch.net/test/read.cgi/tech/1317958045/
15) http://hibari.2ch.net/test/read.cgi/tech/1310199414/
14) http://hibari.2ch.net/test/read.cgi/tech/1299385928/
13) http://hibari.2ch.net/test/read.cgi/tech/1286706874/
12) http://hibari.2ch.net/test/read.cgi/tech/1272536128/
11) http://pc12.2ch.net/test/read.cgi/tech/1252382593/
10) http://pc12.2ch.net/test/read.cgi/tech/1231861873/
09) http://pc11.2ch.net/test/read.cgi/tech/1211010089/
08) http://pc11.2ch.net/test/read.cgi/tech/1193743693/
07) http://pc11.2ch.net/test/read.cgi/tech/1174211797/
06) http://pc11.2ch.net/test/read.cgi/tech/1162902266/
05) http://pc8.2ch.net/test/read.cgi/tech/1149263630/
04) http://pc8.2ch.net/test/read.cgi/tech/1140717775/
03) http://pc8.2ch.net/test/read.cgi/tech/1076418993/
02) http://pc2.2ch.net/test/read.cgi/tech/1013846140/
01) http://pc.2ch.net/tech/kako/996/996131288.html
3デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:18:27.57ID:L6eYQqyh
関連サイト
(英語)
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 (公式サイト内、日本語入門セクション)
https://wiki.haskell.org/Haskell%E5%85%A5%E9%96%80_5%E3%82%B9%E3%83%86%E3%83%83%E3%83%97

Haskell - Wikibooks (上記Wikibooksの同タイトル日本語版。多くの項目が未編集)
https://ja.wikibooks.org/wiki/Haskell

A Gentle Introduction to Haskell, Version 98
http://www.sampou.org/haskell/tutorial-j/

Haskell のお勉強
http://www.shido.info/hs/

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

本物のプログラマはHaskellを使う
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/

[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/feature/01/functional-prog
4デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:28:11.16ID:L6eYQqyh
質問すると埋まりそうだったので新スレ立てさせてもらいました

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

日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp
2020/02/10(月) 20:13:34.39ID:gQeDR86I
>>4
:set -XOverloadedStrings
import Data.Text.Lazy (Text)
import Data.Text.Lazy.Encoding (encodeUtf8)
import Data.ByteString.Lazy (unpack)
length . unpack . encodeUtf8 $ ("あ" :: Text )
-- 3
2020/02/10(月) 21:23:34.40ID:L6eYQqyh
>>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
2020/02/10(月) 22:24:04.13ID:qtoUvtqH
haskellはオワコンなの?
2020/02/11(火) 11:04:03.53ID: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]

簡単な行列で関数を展開してみると何をやっているのかよく分かる。

これ考えたヤツ天才じゃね?
今の俺は他人のソースを展開して理解するので精一杯だけど、
いつかこんな関数定義ができるよう精進したい。
2020/02/11(火) 13:36:26.72ID:TiXBKsVJ
>>9
こんな関数いつ使うん?
11デフォルトの名無しさん
垢版 |
2020/02/11(火) 14:18:49.70ID:d+YF7kv3
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|
+-+---+-----+------+----+--+
2020/02/11(火) 18:22:03.26ID:RQLUpvMq
畳み込み計算(foldじゃなくてconvolutionの方)とかやりたいときにあると便利かも?
2020/02/12(水) 08:25:26.33ID:5WxWkSHH
昔話Project Eulerをhaskellで解くのに同じ役割の関数を自作した記憶がある
2020/02/12(水) 13:37:04.81ID:1ZV1cGD2
そもそも天才じゃないとやりたいことが出来ない言語ってどうなんだ
15デフォルトの名無しさん
垢版 |
2020/02/12(水) 13:53:42.16ID:MDE/KJVl
別に他の言語でも10倍量書けば同じことが出来るんだから使わなければいいだけ
共同作業の時は困るから天才だけでチーム組んでもらえばいい
2020/02/12(水) 14:24:47.66ID:B2qV6LKd
凡才も天才もほぼ同様に書けるpythonのような素晴らしい言語より、
凡才でも拙く書けるけど天才ならシンプルに書けるhaskellのような素人お断りな言語の方が好き。

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

まぁ、仕事の道具としては迷わず前者を使うけど。
17デフォルトの名無しさん
垢版 |
2020/02/12(水) 20:45:42.48ID: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の場合、
プログラミング言語自体が解くための問題になっている感じ。
2020/02/12(水) 22:22:34.78ID:ohhYjydu
Haskellの書き方極めればC言語に匹敵する速度が出せるって聞いたんだけどマジ?
2020/02/13(木) 00:18:51.95ID:00coYSBu
>>18
2020/02/13(木) 02:31:41.26ID:7PHqZJTi
>>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ってなに... 学習コストは他の言語に比べてずっと高い。

>19
> Haskellの書き方極めればC言語に匹敵する速度が出せる
可能だよ
https://chrispenner.ca/posts/wc
2020/02/13(木) 04:40:03.75ID:8j+a4fKo
>>20
それ前にも紹介されてて俺もすげーなと思ったが、よく考えると、
じゃあ今wcやlsのようなLinuxコマンドをhaskellで書きたいかと聞かれれば、
べつにいいやと応える。

もっとこう、せめてSwichやPS4のインディーズゲームや、
窓の杜の人気編集ソフトレベルのアプリで、
Cと張り合う猛者は居ないのかな。

Darcsだって肝心の速度ではgitに敵わなかったわけだし。

前に、ブロック崩しでCと比較した人が居たような気がしたが、
どこのページだったかな。
2020/02/13(木) 16:46:02.30ID:7PHqZJTi
>>21
俺はコマンドラインユーティリティを Haskell で作るのイイナって思ってる。
型の恩恵でヘルプとか書き漏らさないし、単純な計算なら自動でコマンド化できるっぽい。

Haskell 製のゲームは何故かとても少ない。こちらとか
https://store.steampowered.com/app/591640/Light_It/?l=japanese

beatmaniaのような音ゲーを120行で実装するって触れ込みのチュートリアル
http://fumieval.github.io/rhythm-game-tutorial/ja.html
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況