[過去ログ] 関数型プログラミング言語Haskell Part33 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(1): 2020/02/10(月)18:17 ID:L6eYQqyh(1/5) AAS
関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
外部リンク:www.haskell.org
日本Haskellユーザーグループ - Haskell-jp
外部リンク: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) 2chスレ:tech
21) 2chスレ:tech
20) 2chスレ:tech
19) 2chスレ:tech
18) 2chスレ:tech
17) 2chスレ:tech
16) 2chスレ:tech
15) 2chスレ:tech
14) 2chスレ:tech
13) 2chスレ:tech
12) 2chスレ:tech
11) 2chスレ:tech
10) 2chスレ:tech
09) 2chスレ:tech
08) 2chスレ:tech
07) 2chスレ:tech
06) 2chスレ:tech
05) 2chスレ:tech
04) 2chスレ:tech
03) 2chスレ:tech
02) 2chスレ:tech
01) 2chスレ:tech
3: 2020/02/10(月)18:18 ID:L6eYQqyh(3/5) AAS
関連サイト
(英語)
Haskell - Wikibooks, open books for an open world (ページ内に内容をまとめたPDFあり)
外部リンク:en.wikibooks.org
Learn You a Haskell for Great Good! (『すごいHaskellたのしく学ぼう!』の無料オンライン版)
外部リンク:learnyouahaskell.com
Real World Haskell (同名書籍の無料オンライン版)
外部リンク:book.realworldhaskell.org
(以下、日本語)
Haskell入門 5ステップ - HaskellWiki (公式サイト内、日本語入門セクション)
外部リンク:wiki.haskell.org
Haskell - Wikibooks (上記Wikibooksの同タイトル日本語版。多くの項目が未編集)
外部リンク:ja.wikibooks.org
A Gentle Introduction to Haskell, Version 98
外部リンク:www.sampou.org
Haskell のお勉強
外部リンク:www.shido.info
お気楽 Haskell プログラミング入門
外部リンク[html]:www.nct9.ne.jp
本物のプログラマはHaskellを使う
外部リンク:itpro.nikkeibp.co.jp
[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
外部リンク:gihyo.jp
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
外部リンク: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 プログラミング入門
外部リンク[html]:www.nct9.ne.jp
↓
お気楽 Haskell プログラミング入門
外部リンク[html]:www.nct9.ne.jp
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]
簡単な行列で関数を展開してみると何をやっているのかよく分かる。
これ考えたヤツ天才じゃね?
今の俺は他人のソースを展開して理解するので精一杯だけど、
いつかこんな関数定義ができるよう精進したい。
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ってなに... 学習コストは他の言語に比べてずっと高い。
>19
> Haskellの書き方極めればC言語に匹敵する速度が出せる
可能だよ
外部リンク:chrispenner.ca
21(1): 2020/02/13(木)04:40 ID:8j+a4fKo(1) AAS
>>20
それ前にも紹介されてて俺もすげーなと思ったが、よく考えると、
じゃあ今wcやlsのようなLinuxコマンドをhaskellで書きたいかと聞かれれば、
べつにいいやと応える。
もっとこう、せめてSwichやPS4のインディーズゲームや、
窓の杜の人気編集ソフトレベルのアプリで、
Cと張り合う猛者は居ないのかな。
Darcsだって肝心の速度ではgitに敵わなかったわけだし。
前に、ブロック崩しでCと比較した人が居たような気がしたが、
どこのページだったかな。
22: 2020/02/13(木)16:46 ID:7PHqZJTi(2/2) AAS
>>21
俺はコマンドラインユーティリティを Haskell で作るのイイナって思ってる。
型の恩恵でヘルプとか書き漏らさないし、単純な計算なら自動でコマンド化できるっぽい。
Haskell 製のゲームは何故かとても少ない。こちらとか
外部リンク:store.steampowered.com
beatmaniaのような音ゲーを120行で実装するって触れ込みのチュートリアル
外部リンク[html]:fumieval.github.io
23: 2020/02/13(木)17:49 ID:0eJoVY/8(1) AAS
>>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
24(3): 2020/02/14(金)14:43 ID:3dEdKDtV(1) AAS
Haskellで書かれた他人のコードって詠みにくいと思うのは俺だけか?
型クラスやモナドが難しいというより、何がどこで定義されてるかよくわからんし、どういう動作をする関数なのかがぱっと見でわからん。
25: 2020/02/14(金)16:56 ID:NyO1b3mL(1) AAS
言語というより、可読性に対する意識の問題だと思うよ
みんな薄々読みにくいと思ってるけど、互いに頭悪いと思われてマウント取られるのが怖くて言い出せないから、読みにくいコードはいつまでも読みにくいまま
実用言語では「俺が読めないのは書いた奴が悪い」が基本なので、互いに指摘しあうことで自然と改善されていく
26: 2020/02/14(金)16:59 ID:ONnLM1s9(1) AAS
>>24
千差万別としか言いようがない。
Github や hackage にあるコードを見ても、分かりやすいものもあれば、そうでないものもある。
CやJava、Python などと比べて、特に差は無いように思えるが。
何かが定義されている場所は同じモジュール内か、さもなくばインポートしているモジュール内なんだから、
検索すれば見つかるでしょ。
よくわからん、という意味がよくわからん。
動作がぱっと見でわからんというのは、それこそhaskellに限った話ではないのでは?
言語の習熟度や、そのコードで解いている問題のジャンルにもよるでしょ。
27: 2020/02/15(土)10:44 ID:2OHXNxKd(1/3) AAS
The build process was killed (i.e. SIGKILL). The typical reason
for this is that there is not enough memory available (e.g. the OS killed a
process using lots of memory).
へんなエラーが出来て今までコンパイルできなものが急にできなくなった
Haskellは最悪
もう使いたくない
28: 2020/02/15(土)10:58 ID:ELCuAwaW(1) AAS
頭が悪い奴が作るとすぐメモリ不足になると死んだじっちゃんが言っていた
29: 2020/02/15(土)12:35 ID:2OHXNxKd(2/3) AAS
テンプレートハスケルをつかったでっかいソースだからなるのかな
一つのファイルコンパイルするのに10分位掛かるんだけど
分割するようにすればなおる?
30: 2020/02/15(土)14:01 ID:45cVu0dh(1) AAS
>>24
問題の関数を使っているモジュールをghciにロードして:iコマンド使えば、
それがどのモジュールで定義されているのか分かるが、
そう言うことではなく?
上下前次1-新書関写板覧索設栞歴
あと 972 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.024s