-
プログラム
-
関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
-
UPLIFTで広告なしで体験しましょう!快適な閲覧ライフをお約束します!
関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/...cgi/tech/1428597032/ - コメントを投稿する
-
過去スレ一覧
28) http://peace.2ch.net...cgi/tech/1428535861/
27) http://peace.2ch.net...cgi/tech/1420718555/
26) http://peace.2ch.net...cgi/tech/1406436392/
25) http://peace.2ch.net...cgi/tech/1393313450/
24) http://toro.2ch.net/...cgi/tech/1382705669/
23) http://toro.2ch.net/...cgi/tech/1376111807/
22) http://toro.2ch.net/...cgi/tech/1364009659/
21) http://toro.2ch.net/...cgi/tech/1358702176/ -
20) http://toro.2ch.net/...cgi/tech/1350428908/
19) http://toro.2ch.net/...cgi/tech/1340760070/
18) http://toro.2ch.net/...cgi/tech/1331902463/
17) http://toro.2ch.net/...cgi/tech/1325510368/
16) http://toro.2ch.net/...cgi/tech/1317958045/
15) http://hibari.2ch.ne...cgi/tech/1310199414/
14) http://hibari.2ch.ne...cgi/tech/1299385928/
13) http://hibari.2ch.ne...cgi/tech/1286706874/
12) http://hibari.2ch.ne...cgi/tech/1272536128/
11) http://pc12.2ch.net/...cgi/tech/1252382593/
10) http://pc12.2ch.net/...cgi/tech/1231861873/
09) http://pc11.2ch.net/...cgi/tech/1211010089/
08) http://pc11.2ch.net/...cgi/tech/1193743693/
07) http://pc11.2ch.net/...cgi/tech/1174211797/
06) http://pc11.2ch.net/...cgi/tech/1162902266/
05) http://pc8.2ch.net/t...cgi/tech/1149263630/
04) http://pc8.2ch.net/t...cgi/tech/1140717775/
03) http://pc8.2ch.net/t...cgi/tech/1076418993/
02) http://pc2.2ch.net/t...cgi/tech/1013846140/
01) http://pc.2ch.net/te...o/996/996131288.html -
(英語)
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...86%E3%83%83%E3%83%97
Haskell - Wikibooks (上記Wikibooksの同タイトル日本語版。多くの項目が未編集)
https://ja.wikibooks.org/wiki/Haskell
Programming in Haskell
http://www.sampou.or.../cgi-bin/haskell.cgi
Haskell のお勉強
http://www.shido.info/hs/
Haskell Programming
http://www.geocities...oi/func/haskell.html
本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeib...UMN/20060915/248215/
[入門]関数プログラミング―質の高いコードをすばやく直感的に書ける!
http://gihyo.jp/dev/...e/01/functional-prog -
乙
-
Wikipediaの人工知能に適した言語のリストにHaskellがあったけど、やはり最近流行りの統計的なアプローチがされているのかな
LogicTモナドが使えるらしいけどよく分からない -
適しているという話は聞いても
使われているという話を聞いた事はない不思議 -
ディープラーニングはほぼ完全にPythonに食われちゃった
-
前スレで質問しようとして何か変な風に失敗してしまいました...
再掲させてください
----
aojの問題でわからないところがあるので質問します.
http://judge.u-aizu....cription.jsp?id=0033
二股にわかれた容器に1から10まで番号のついたボールを番号の大小関係の制約を守って並べていけるかを判定する問題なんですが,自分のコードを提出するとruntime errorになってしまいます.
理由も考えたんですがよくわからないので,何がダメなのかアドバイスをお願いしたいです.
main :: IO ()
main = getContents >>= mapM_ (putStrLn . (\arr -> solve (tail arr) 0 (head arr, 0)) . map (read :: String -> Int) . words) . tail . lines
solve :: [Int] -> Int -> (Int, Int) -> String
solve arr index (box1, box2)
| index == length arr = "YES"
| otherwise =
if box1 < box2 then
solve arr index (box2, box1)
else
if arr !! index > box1 then
solve arr (index + 1) (arr !! index, box2)
else
if arr !! index > box2 then
solve arr (index + 1) (box1, arr !! index)
else
"NO" -
競技プログラミングにハマるプログラマのスレ 8
http://tamae.2ch.net.../prog/1483782812/l50 -
まあHaskellの質問だとHaskellスレで聞かないとスルーされるから
回答してあげるのが優しさってもんよ。 -
優しい回答例
エラーの原因を探し出しその場所をピンポイントで変更してあげる
優しくない回答例
面倒だから変更できそうな場所は必要あろうがなかろうが全部変更してみろ -
if arr !! index > box1 then
solve arr (index + 1) (arr !! index, box2)
else
の部分では、box1>box2 なのでどちらの分岐も考えられる
出力の型をBoolに変更し
if arr !! index > box1 then
solve arr (index + 1) (arr !! index, box2) || solve arr (index + 1) (arr !! index, box2)
else
でどうでしょう。で後からTrue,FalseをYES,NOに変えればOK 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) -
訂正
if arr !! index > box1 then
solve arr (index + 1) (arr !! index,box2) || solve arr (index + 1) (box1,arr !! index)
else -
>>15
勘違い。これは原因ではないので無視してください -
皆さん
反応ありがとうございます.
Haskellは周りに聞ける人がいなかったので助かります -
Haskellで競プロは隔靴掻痒という感想
実行制限時間がC++を前提に設定されてるから辛い
しかも Haskell 提出者が少なすぎて、AC 解答を覗いて速いコードを書く知見を獲るということができない
強い Haskeller 先輩各位は競プロサイトにアカウントを作って(競技には参戦しなくてもいいから)暇なときに過去問で誰も Haskell による AC が出てないものを適当に AC していって知見をバラまいてリードしてほしい -
>>10 の問題は実際のアプリ作りのどういうシーンに応用できるの?
-
アプリの有用性ではなく難易度を研究してるんだろう
例えば人工知能が完成したらどれだけ役に立つかではなく
実際に完成する確率は何パーセントくらいかに興味がある -
頓珍漢な質問かもしれませんが
ghciの:sprintでその時点での式の評価の深さを知ることができると思うんですが
評価の深さ自体を扱うプログラムを組むことってできるのでしょうか -
>>22
評価の深さって何?
浅い評価と深い評価の例を挙げてみてくれないか。
評価の深さ自体を扱うって、具体的には何がしたいの?
特に何かしたい訳じゃなければ、どういうプログラムを想定しているか、
に置き換えてもいいんたが、とにかく何か具体例がないと、
何を言っているのか分からん。 -
>>23
考えなしに深さという言葉を使ってしまいました
リストの評価についてです
Prelude> let xs = map (*2) [1..5]
Prelude> :sprint xs
xs = _
Prelude> xs `seq` ()
()
Prelude> :sprint xs
xs = _ : _
Prelude> length xs
5
Prelude> :sprint xs
xs = [_,_,_,_,_]
Prelude> xs !! 2
6
Prelude> :sprint xs
xs = [_,_,6,_,_]
Prelude> xs
[2,4,6,8,10]
Prelude> :sprint xs
xs = [2,4,6,8,10]
といったようになりますが
ある時点の評価について二つのリストが同じになる可能性があればTrue、なければFalseを出力するようなことをしたいと思っています。
例として、[_,_]と[_,_]や、_と[_,_]、_:_と[_,_]、[1,_]と[_,2]などはTrue。
[_,_,_]と[_,_]、[_,1]と[_,2]などはFalseになると言った感じです。
似たようなことがスマートにできる方法があれば教えて頂きたいです。 -
すごいとプログラミングの2冊よんだけど次どうすりゃいいの
本殆ど無いし -
好きなもの作ればいいと思うよ
-
俺は静的型付けをゴリ押しされたのでHaskellをやってみたけど次はC++かな
静的型付けの本がないならHaskellとC++の本を読む -
普段から家計簿をつけないし
毎年年賀状も出さない
作るならもっと実用的なアプリはないか -
麻雀AIを作るばよい
-
Real World Haskell って不人気なの?
-
Real World Haskell ってやつで勉強してみるは!
-
質問
stack でドキュメントも同時に生成するようにビルドすると(haddock: true)、
依存してるstackageのパッケージのドキュメントは生成されるけど、
stack.yamlのextra-depsの項に追加したパッケージの物は生成されなかった。
後者のドキュメントも生成して、
~/.stack/snapshots/<arch>/<lts version>/<ghc version>/doc/
に追加したいのだが、何か方法はないだろうか? -
>>39
うーん、調べてみたけどわからなかった。
stack build --exec CMD でビルド後にドキュメントをコピーするか
stack build --haddock-arguments ARGS でstackからhaddockに渡るパスを上書きするとか
そういうのは思いついたけど、どっちにしても厳しいハックになると思う。 -
なんでStringってshowするときに” “ が付くの?
ダブルクォートが付かない汎用的なshowは無いの? -
show使わなきゃいいだけじゃね
-
実用上全く考えたこともなかったけど
show "ABC"
って
"\"ABC\""
って出力されるんだなwwwwウケる
show $ show "ABC"
"\"\"ABC\"\""
wwwwwwwwwww -
>>42
show 2 と show "2" が区別できないと困るじゃん -
>>42
どうしても欲しいなら作ればいい。
{-# LANGUAGE FlexibleInstances #-}
instance {-# OVERLAPPING #-} Show [Char] where show = id -
id = read . show にするためだゾ
-
>>19
強いHaskeller先輩「(・・・これC++で提出した方が早いな)」 -
スペースリークの問題があってまともなコードには使えないというイメージを持ってるんだが
最近はその辺どうなってるのか知ってる?
自分はホームページ出力とかのメモリリークが問題にならないコードにhaskell使ってる
でもスペースリーク解決したらもっと色んなソフト開発に使ってみたい -
>>49
haskell-masterことtanakhさん! -
tanakhさんは最近はHaskellどころか競プロにRustで提出しだしてるよ…
tanakhさんはHaskellを見捨てたんだ… -
そもそもhaskell-masterと名乗って参加してたのがhaskell使えないTopCoderだったしなtanakhさん
-
>>50
他の言語なら、いらなくなった変数にnullを代入することがスペースリークの解決策
nullを代入することには問題があるというイメージだったが
むしろ解決策じゃね?というイメージに最近変わった
その変化に貢献したのがHaskellだった -
>>50
あなたは何を以てスペースリークが解決されたと見なしてるの?
スペースリークを気にする必要がなくなった=解決なの?
もしそうなら、そんな未来は来ないと思う。
遅延評価を採用している以上、スペースリークは絶対に気にしなければならない。
あるヒープ領域がスペースリークなのかどうか、ランタイムシステムには判断できないんだから。
スペースリークなのかどうかがもっと調べやすくなる未来は来ると思うけどね。 -
これに関しては遅延評価でも並列処理でも同じこと
処理が終わったらメモリ解放されるが途中で止まったら解放されない問題 -
昨日の50だけど具体的には
n=1000とか先頭で決め打ちしといてコード書くのは大丈夫でも
上限を与えられるようにするとリークするので大きなnを与えられなかったり
配列の読み書きのコードを逐一doブロックに書くのはokだったけど
<<=を使って書いたらスペースリークしたこともあるし
いちいちこれはリークするのかとか考えながらコードはかけないなと思った
haskellでproject euler 200問弱といたけどその間に思ったことだよ
えっこれがリーク?みたいなのがある
>>55
明確なスペースリーク対策のガイドラインができたらかなぁ
>>54
俺はあれはクソコードが、と思ってた
javaならweakreferenceを使うという手があって
だから最近のapiは進歩しててandroidならsetBackgroundDrawableが非推奨になって
setBackgroundをつかえみたいになってるnull代入しなくてよくなってるような -
>>58
さすがにそこまでは覚えてないけど後半はコードにスペースリークがあると
すぐセグメンテーションフォルトする
序盤の問題は時間もスペースも気にせず簡単に解ける問題が多いので
その目的なら100番ぐらいから始めた方がいいよ
1番からだとさくさく進んで楽しいけどね -
Project Eulerでの答えを求めるのには十分でも
HackerRankのProject Euler+の同じ問題でTLEしたりしたことある -
say :: Show s => s -> IO ()
say s = “Say, ++ show s ++ “!!”
print 1234
=> Say, 1234!!
print “Haskell”
=> Say, “Haskell”!!
ああああああああ!!!(ブリブリブリブリュリュリュリュ!!!ブッチチブブブチチチブリリリブブブゥゥゥゥッッッ!!!) -
showをユーザー定義する権利を与える代わりに「正しい」定義を決める義務がなくなる
というwinwinの関係 -
法則を満たしてるか静的にチェックする機構をコンパイラに実装することは理論上
?不可能
?可能(だが現実には困難)
?可能(で鋭意開発中)
? -
法則ではなくユーザーの自由意志です
-
instance Show [Char] と書く方法の他に
instance Show Char の中で showList を定義するという方法もある -
最近Haskellの勉強を始めたのですが、
["aa", "bb", f ["cc", "dd"] ] =
["aa", "bb", "cc", "dd"]
となるような関数fはどのように書けるでしょうか
もしくはそのような既存の関数はありますか -
>>68 型が合わないのでかけないと思う
-
普通に++での結合じゃアカンのか?
-
たぶんその前の時点でアプローチがHaskellのやり方じゃないんだろう
-
スタック型言語なら直接68のやり方は可能だと思う
-
アンパックしたいのか
-
どういう文脈でそれをしたくなったのか説明してくれれば
うまい代替案が出てくるかもよ -
文脈は知らないが応用問題を作ればなんとなくわかる
length ["aa", "bb", f xs]
の値がコンパイル時に定数になることを証明せよ
または定数にならないような関数fを書け -
>>76
応用つか全然違う問題じゃないか -
68です
単なる興味本位で出来ないものかと頭を捻らせていたもので -
うーん
そもそも、それ許すとバグの温床になるからこその型だしねぇ。。。 -
Cのプリプロセッサというのを使うというのはどうだろう
-
["a","b"] ++ (id ["c","d"])
あかんの? -
それを許すと何も面白くない駄作の温床になるからね
-
Template Haskellの話題ではないのか
-
haskellだと簡潔に書けるので
-shared で .dll(in windows), .so(in linux) を作って使っているのですが、
import Data.Text (or Data.List.Split.Internals)等で関数を書くと
.hsのコンパイルはいけるんですが
-shared の時に -
定義されていない参照です, とエラーが出ます。
取り敢えず自分で関数書いてるので問題は無いのですが、haskellの勉強も兼ねて解消したいです。
どなたか教えて頂けないでしょうか -
FTPだっけ。あれどうなったか知ってる人いる?
length (4,2) == 1
になっちゃうやつ。 -
path パッケージの Path.parseRelDir 関数で、引数に "." や "../" が指定できないのは何故?
"." や "../" って相対パスちゃうの? -
> "." や "../" って相対パスちゃうの?
カレントディレクトリからの相対パスだが
そのpathパッケージとやらはカレントディレクトリを認識してるのか? -
重城良国
Haskell 教養としての関数型プログラミング
Richard Bird 他1名
Haskellによる関数プログラミングの思考法
Haskell本が今度二冊も出るみたいですね -
>>88
「カレントディレクトリを認識する」ってのがどういう意味なのか分からんのだが。
たとえば filepath パッケージに System.FilePath があるけど、
こっちのはカレントディレクトリを認識してるって言えるの? -
foldrと同じ働きの関数foldr'は
foldr' :: (a -> b -> b) -> b -> [a] -> b
foldr' f v [] = v
foldr' f v (x:xs) = f x (myFoldr f v xs)
で定義できますが、:tで調べるとPreludeのfoldrの型は
foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b
になってます。
foldr'の型宣言を同様に修正するとエラーが出ます。
エラーが出なくするために二行目の空リスト[]を
どう修正したら良いのか分からんとです。 -
訂正
上の myFoldr は foldr' の間違いです。 -
これ見るのはダメなん?
https://hackage.hask...-Foldable.html#foldr -
Foldableは単にfoldr出来ますよーってだけの型クラスだから
リストなどのインスタンスを持ってこないと具体的には定義できない
(==) :: Eq a => a -> a -> Bool
だけでは定義しようがないのと同じ -
FTPはとっくに取り入れられてた。base 4.8.0から。気付かんかったわ
-
stackアップデートできねえぞ
atomでエラーでたぞ
ghciってなんでデフォルト一行なの
勉強用なの?ふつうつかわないの?
atomとそのコマンド、パッケージ選び
Gitって初心者なのに入れるの?
ないとターミナルいれられないんだが
ああめんどい
コマンドプロンプト見にくい
フォントきもい
ターミナル必要なのか
ビルゲイツしね
ターミナルってのないとエディタからコンパイルできないの?
コンパイルなし実行できないの?
ライブラリとはなにか、どこにあるのか
アトムから読めんのか
ライブラリよんで勉強するもんなのか
Windowsのディレクトリなにこれ
ユーザー名フォルダの場所とか意味不明
パスってなに、パスの通し方
こんなんググらせんなよ
よくこんなの考えやがったな
やること多すぎ 時間かかりすぎ
おぼえたくない 時間のムダ
技術じゃなくて雑学だな
自動化しとけまとめとけクソクソうんこ
それでもプログラマか
啓蒙する気ゼロだなほんと -
オブジェクトファイルとインターフェースファイルのこともちゃんとまえもって教えないとダメでしょ
qiitaとか入門云々とかはてなブログとかほんと死ねばいいのよ
なんでもかんでも初心者にググらせてんじゃないよ! -
コンパイラは難しい
昔の古いインタプリタは簡単だった
確率は1/2じゃなくて実際は9割以上が難解な方を選ぶんだろう
↑今すぐ読める無料コミック大量配信中!↑