1 名前:デフォルトの名無しさん [2012/03/16(金) 21:54:23.92 ] haskell.org ttp://www.haskell.org/ 日本語サイト ttp://www.sampou.org/cgi-bin/haskell.cgi ttp://www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/ Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/ Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/ Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/ Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/ Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/ Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/ Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/ Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/ Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/ Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
255 名前:デフォルトの名無しさん mailto:sage [2012/04/30(月) 23:33:00.05 ] 今まで初心者らしい素朴な質問を見たことがない ・どうやってボタン表示するんですか ・ループが出来ません ・変数変えれないんですけど そんな質問しねーよ、って人ならもう初心者じゃない 具体的に「Haskellでやりたいこと」を見つけて取り組んでくれ 分かんないことがあったらピンポイントで質問してこい あたしらが優しく相手してやる
256 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 00:09:38.80 ] HappyのGLR機能が保守放棄されている(現行のghcで動かない。バグもあるらしい)のですが、 今生きているHaskellのGLRパーサはありませんか?
257 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 03:16:34.46 ] >>255 お、お前……女だったのか……。
258 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 03:22:27.79 ] Haskellでメタプログラミングしたいんですけど, 具体的には今あるコード資産に対してコード変換して,機能拡張したい, そのための便利な仕組みない
259 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 04:32:54.50 ] >>252 いんや? 自分が初心者の頃、親切に教えてもらったぞ? プログラミングHaskellで最初に詰まって、散々悩んだreplicateのリスト内包表記版を作れって問題とか 初心者でも、replicateの再起版はすぐに思いついたんだが、この頃は本当に頭が固かったな・・・ (ヒントがlengthのリスト内包表記版の応用って書かれてても、全然思い浮かばんかった) 回答してもらって、ああ、なるほど、lengthのリスト内包表記版の応用だ。ってやっと納得できたっけ そもそもHaskellはRubyとかと違って、組込み関数も自分で簡単に作れるってのが初心者の頃の自分には言語の理解の助けになった 普段自分の使ってる関数の動きを自分で同じ関数作って確認しながら覚えられるから、あんまり基本的過ぎる質問ってする必要が無かったし、 >>255 同様、初心者らしい質問って、そもそもHaskell(または関数型言語)ってどんな言語?とか以外じゃ見ない(それも最初のスレだけだったような・・・) 当時の自分の質問が一番初心者らしい質問だったと思う
260 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 06:00:09.93 ] [(x,y) | x <- [1..], y <- [1..], 3^x - 2^y == 1] 深さ優先探索なので,(1,1)の後は事実上フリーズします これを深さも幅も均衡して広げて探索していくにはどうしますか?
261 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 06:38:12.34 ] >>260 [(x,y) | x <- [1..], y <- [1..x], 3^x - 2^y == 1 || 3^y - 2^x == 1]
262 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 08:47:38.24 ] >>259 昔のことは知ってるよ。Part3くらいから居る >>231 を馬鹿にする流れを見て、正気か?と思っただけ
263 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 09:44:02.40 ] 馬鹿にしてるってどの辺が?
264 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 15:45:08.13 ] >>261 面白いハックです ありがとうございました
265 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 16:26:57.40 ] 無限モナドリストを受けて 条件を満たす最初の要素を束縛するにはどうしますか?
266 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 17:20:16.04 ] モナドリストって何? [a] ? Monad m => m [a] ? Monad m => [m a] ? 基本はData.List.find (:: (a -> Bool) -> [a] -> Maybe a)と同じで、型に合わせてliftMしたりすればいいと思うよ。 ただ無限リストなので、条件を満たす要素がなかったら計算が終わらない。 これはしょうがない。
267 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 21:56:17.29 ] >>266 後者です findでやってみようと思ったんですが 術語が Int -> IO Bool なんです filterM みたいに findM があればいいと思いますが filterMしてheadって不格好です きっとスマートな解決法がある筈です
268 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 22:03:05.12 ] ああそれからモナドの性質上 無限のモナドのリストを渡すとフリーズしますよね 最初、遅延評価なのになんで正格評価みたいになってんだと首を傾げたのですが 考えてもみれば、順序を保証するんだからfilterMに無限のモナドのリストを渡すと そのリストの最後の評価が済むまで次の行けないですよね 困りました
269 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 22:20:28.35 ] >=> 地味に便利ワロタ
270 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 22:54:51.28 ] [IO a] じゃなくて IO [a] で [a] が無限リストなら どうもならん、諦めろ
271 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 23:45:26.55 ] [IO a]で無限です
272 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 00:06:04.51 ] Data.Listでの実装は find p = listToMaybe . filter p だぞ。別に filterM して head も似たようなもんじゃないか? [IO a]でもIO [a]でも無限リストで要素が無ければ止まらないのは 一緒だと思う。
273 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 00:27:44.81 ] >>272 はい(´・ω・`)
274 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 00:29:59.11 ] filterM して head ってのはこれ? これは要素があっても[IO a]が無限リストなら停止しないよ findM' :: Monad m => (c -> m Bool) -> [m c] -> m c findM' f = head <=< filterM (join . liftM f) 一方、こっちは要素があれば止まる(無ければ止まらない) findM :: Monad m => (a -> m Bool) -> [m a] -> m (Maybe a) findM f [] = return Nothing findM f (x:xs) = do v <- x t <- f v if t then return $ Just v else findM f xs テストしてみれば分かる ms :: [IO Int] ms = map return [1..] main = do --print =<< findM' (return . (> 10)) ms print =<< findM (return . (> 10)) ms
275 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 05:20:09.91 ] ほんとですね 無限リストでfilterMは危険なのか。
276 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 06:33:35.38 ] >>274 ありがとうございました filterMに倣って findM :: Monad m => (a -> m Bool) -> [a] -> m (Maybe a) 版を作って使ってみましたが、何だかソースが汚れた気がします Maybeを取扱う為に一々letやcaseを挿入しないとならなくなったせいでしょうね しょうがないでしょうが ところで何故標準ライブラリに採択されてないのでしょうか
277 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 06:38:59.61 ] >>276 無限リストに使うなら、停止するとき返り値は 必ずJust xなんだからfromJustで取り出せば?
278 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 06:46:35.74 ] join . liftM :: (r -> r) -> r -> r これ何の使い道あるんですか?
279 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 06:57:09.58 ] >>277 そうでした。。。 コードが汚くなったのは別の改変のせいでした 勘違いして findM 導入のせいにしてました
280 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 07:10:28.79 ] >>278 なんの意味もない liftM使って……て書き込み見たんでliftMから書き始めたからそうなった 今は反省している
281 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 07:26:28.96 ] Oh...
282 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 10:41:16.52 ] join . liftM p は p :: a -> m Bool を m a -> m b にするのに必要だけど、(>>= p) でも同じ。
283 名前:デフォルトの名無しさん mailto:sage [2012/05/03(木) 11:17:28.41 ] せっかくの話の流れをぶった切って申し訳ないですが、質問します。 正格性フラグの付いたデータ型のことですが、 data X = X !Int ・・・ let x = X a この場合、x の値が実際に必要になるかどうかに関わらず、 X a の a が評価されるという意味でしょうか。 もうひとつ、 data F = F !(Int -> Int) ・・・ let f = F g この場合、g が評価されたというのは、どういう状態を指すのでしょうか。 と言うのも、関数ではない値なら弱頭部正規形になるまで評価され、 それがどういった形なのか頭の中にイメージ出来るのですが、 関数の評価という意味がいまひとつイメージ出来ません。 もしかして、g w = if v then 関数1 else 関数2 などと場合分けされていた場合に、 f = F g の時点でこの v まで評価されて関数1か関数2かが決定されるということであり、 単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない、 ということでしょうか。
284 名前:デフォルトの名無しさん mailto:sage [2012/05/04(金) 01:11:25.25 ] >>283 どちらの質問もその考え方であってる。 ただ、わかってるかもしれないけど、 >単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない 束縛された値が正規形なのかとか、リテラルかどうかとか判断する術は一般にないから、 それらを基に正格性フラグ付けることに、意味がある、ないを判断することはできないし、意味もないよ。 重要なのは、値なりデータ構造なりがどこで構築されて、どこで正規化された値が必要になるのか?
285 名前:デフォルトの名無しさん mailto:sage [2012/05/04(金) 01:24:42.23 ] Haskellの道は長く険しい
286 名前:デフォルトの名無しさん mailto:sage [2012/05/04(金) 05:16:54.30 ] なら、やめれば? 言語は道具なんだから、習得に時間や労力が必要なら その言語は道具として劣っているんだよ。
287 名前:デフォルトの名無しさん mailto:sage [2012/05/04(金) 05:52:35.82 ] つまり習得に時間がかかる日本語や英語は猿のうなり声より劣っていると
288 名前:デフォルトの名無しさん mailto:sage [2012/05/04(金) 06:47:05.76 ] >>283 > この場合、x の値が実際に必要になるかどうかに関わらず、 > X a の a が評価されるという意味でしょうか。 いや、xの値が必要になるまでは評価されない。 > もしかして、g w = if v then 関数1 else 関数2 などと場合分けされていた場合に、 > f = F g の時点でこの v まで評価されて関数1か関数2かが決定されるということであり、 同上。 > 単に g w = 2+w などという関数であれば正格性フラグを付ける意味はない、 > ということでしょうか。 これはそのとおり。
289 名前:デフォルトの名無しさん mailto:sage [2012/05/05(土) 03:45:27.77 ] forM [1..9] print 1 2 : 9 [(),(),(),(),(),(),(),(),()] この最後のゴミを排除するには >> return () をバインドするのが正統ですか?
290 名前:デフォルトの名無しさん mailto:sage [2012/05/05(土) 03:47:18.16 ] forM_
291 名前:デフォルトの名無しさん mailto:sage [2012/05/05(土) 07:28:01.11 ] あざっす^^
292 名前:デフォルトの名無しさん mailto:sage [2012/05/05(土) 13:36:55.17 ] >>286 C++を窓から放り投げるスレじゃないから
293 名前:デフォルトの名無しさん mailto:sage [2012/05/05(土) 22:21:06.18 ] もしかして、main の中で一行でも IO がつくコードを書いたら、それ以降は絶対に IO は取れないのでしょうか?
294 名前:283 mailto:sage [2012/05/05(土) 23:04:46.88 ] お二人とも、ありがとうございます。 ・・・結局、data X = X !Int の正規化フラグを付けるのと付けないのとで、 何が変わるのでしょうか? data X = X !Int ・・・ let x = X a >>284 > どちらの質問もその考え方であってる。 >>288 > いや、xの値が必要になるまでは評価されない。 どちらが正解なんですか。 それとも、お二方も同じ事を言っているのでしょうか。 a の評価のタイミングはいつなんでしょう? >>284 > 束縛された値が正規形なのかとか、リテラルかどうかとか判断する術は一般にないから、 > それらを基に正格性フラグ付けることに、意味がある、ないを判断することはできないし、意味もないよ。 たしかに。 いや、ライブラリのソースを読んでいて、正規化フラグ付きの関数を持ったデータ型があって、 どういう意図・狙いでフラグを付けたのかなと思いました。
295 名前:デフォルトの名無しさん mailto:sage [2012/05/06(日) 02:26:01.72 ] >>293 main に限らず何かの関数の中で IO を使う関数を利用すれば、その関数の型の出力の部分には絶対に IO が付くという意味なら、 IO は取れない 例外は Debug もしかして、なにか方法あるのかな?
296 名前:デフォルトの名無しさん mailto:sage [2012/05/06(日) 06:18:40.65 ] >>294 trace付けて確認すればいいやん。 import Debug.Trace data X = X !Int data Y = Y Int main = do let x = X (trace "X" 1) let y = Y (trace "Y" 2) print 3 print $ seq x 4 print $ seq y 5
297 名前:デフォルトの名無しさん mailto:sage [2012/05/06(日) 11:10:33.37 ] UnicodeSyntax きもいわー Scala でもこういうの流行ってるようだし
298 名前:デフォルトの名無しさん mailto:sage [2012/05/06(日) 11:19:04.33 ] さぁその気持ちでAgdaのコードを読もうか
299 名前:デフォルトの名無しさん mailto:sage [2012/05/06(日) 12:16:00.88 ] 新人が全角スペースを埋め込んでも怒られない時代
300 名前:デフォルトの名無しさん mailto:sage [2012/05/06(日) 12:17:22.58 ] >>295 一応、標準ライブラリ内に System.IO.Unsafe.unsafePerformIO :: IO a -> a 関数がある が、これは Simon Marlow と Simon Peyton-Jones の2人以外使ってはいけない
301 名前:デフォルトの名無しさん mailto:sage [2012/05/06(日) 15:11:42.01 ] unsafePerformIO ……それは禁断の果実
302 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 22:24:51.66 ] 尼のレビュー見てる限りだと、日本語で出てる入門書では Graham Hutton著・山本和彦訳の「プログラミングHaskell」がいいっぽいけど、実際どうなの?
303 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 22:27:58.33 ] 実際そう 対抗馬になりそうなのが今月出る「すごいHaskellたのしく学ぼう」
304 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 22:32:20.78 ] ゆっくり勉強する時間があるなら、いきなりRWHでいいと思う
305 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 00:22:24.17 ] プログラミングHaskellは8章以降が魔窟
306 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 00:38:56.55 ] 魔窟ってほどではないけどあそこから難易度がすこーんと上がるのは確か ゾウさん本にはその辺期待してる
307 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 00:52:04.11 ] じっくりやるならAlgebra of ProgrammingとかPurely Functional Data Structureみたいな応用の効く(範囲が広すぎて実はあまり役に立たない)内容をですね
308 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 01:06:20.12 ] ゾウ本だとHadoopと紛らわしいから愛称が欲しいな 寿司本?
309 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 01:12:32.86 ] スゴイ級
310 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 01:19:18.62 ] スシボンって書くとセシボンみたいで原題と繋がっていい感じだな いやなんとなく
311 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 01:22:38.35 ] 難しいことを簡単に書くのは無理。
312 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 03:25:04.44 ] すごハスは11章からが面白い
313 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 07:14:00.90 ] すごハスって、基本的にネットで無料で読める原著と内容はほぼ同じ? それとも、大幅に加筆されてる?
314 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 08:22:56.77 ] Real World Haskell P.209に、 fnmatch :: (RegexLike Regex source1) => String -> source1 -> Bool というのがあります。 ここの(RegexLike Regex source1)というクラス制約にある、A B a という形は どのようなクラス宣言をすれば、このような形になるのでしょうか?
315 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 11:56:14.66 ] ソース読んでみそ。 ttp://hackage.haskell.org/packages/archive/regex-base/latest/doc/html/src/Text-Regex-Base-RegexLike.html 多変数型クラスを宣言するにはMultiParamTypeClassesというLANGUAGEプラグマが必要。 ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#idp24691328 また、多変数型クラスを含む型推論のために、多くの場合、関数従属または関連型が使われる。 ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#functional-dependencies ttp://www.kotha.net/ghcguide_ja/latest/type-families.html#assoc-decl
316 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 11:57:01.10 ] ソース読んでみそ。 ttp://hackage.haskell.org/packages/archive/regex-base/latest/doc/html/src/Text-Regex-Base-RegexLike.html 多変数型クラスを宣言するにはMultiParamTypeClassesというLANGUAGEプラグマが必要。 ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#idp24691328 また、多変数型クラスを含む型推論のために、多くの場合、関数従属または関連型が使われる。 ttp://www.kotha.net/ghcguide_ja/latest/type-class-extensions.html#functional-dependencies ttp://www.kotha.net/ghcguide_ja/latest/type-families.html#assoc-decl
317 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 11:59:11.96 ] しまった。ダブりすまん。 ついでに訂正しておくと、多変数型クラスより多引数型クラスのほうが訳語として一般的みたいだ。
318 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 12:45:02.58 ] >>315 d 何故か、hackage.haskell.orgにつながらなくてソースは見られないのですが、 MultiParamTypeClassesというLANGUAGEプラグマをつければ、class宣言に複数の変数を 取ることができるんですね。
319 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 09:10:35.85 ] fact 0 = 1 fact n = n * fact (n - 1) ふと思ったのですが、もし(階乗を知らない人が)負数を突っ込んだら死にますよね。 階乗は例えがアレですけどこういうケースのように、パターンマッチで任意の条件分岐(n < 0とか)できますか?
320 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 09:16:44.54 ] 直接パターンマッチではできない if-then-else式を使って、やりたいことはできる、と思う
321 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 09:17:54.53 ] あーあと、正しくない結果の時のエラーはundefinedという関数を呼ぶと、 エラーが起きる値が返るから、それを使えばいい
322 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 09:36:25.12 ] if-then-elseよかguardの方がよく見る
323 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 09:41:06.61 ] ありがとうございます。ガードの方が意味的に良さそうですね。 fact :: Int -> Int fact (n) | (n < 0) = undefined | (n == 0) = 1 | (n >= 1) = n * fact (n - 1)
324 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 10:17:08.88 ] 見やすさではそんな感じかな。こだわる人だとこう書くかも fact n = case n `compare` 0 of LT -> undefined EQ -> 1 GT -> n * fact (n - 1)
325 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 10:46:13.79 ] なるほどcaseならパターンの網羅性もチェックできる訳ですね。
326 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 10:51:34.61 ] 自分の好みではこう。パターンマッチの上から順に、特殊ケース→一般とする。 fact n | n<0 = undefined fact 0 = 1 fact n = n * fact (n-1)
327 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 10:51:35.52 ] ドメインを広げ過ぎると、また停止性が保証できない問題は出てくるだろうけども。
328 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 11:11:11.43 ] tp://www.amazon.co.jp/gp/product/images/4274068854/ref=dp_image_z_0?ie=UTF8&n=465392&s=books どうしてこうなった…w
329 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 11:53:25.13 ] マイナスかどうかのチェックは最初だけでいい、とか言い出すとどうかな
330 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 15:47:59.33 ] factSafe = check (>= 0) fact check p f n = if p n then f n else undefined fact 0 = 1 fact n = n * fact (n-1)
331 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 16:13:00.23 ] わざわざドメイン定義するならMaybeで返そう
332 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 16:36:37.12 ] check p f n = if p n then return (f n) else Nothing ドメインて何?
333 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 16:57:47.03 ] factSafe = 1 : zipWith (*) [1..] factSafe fact n = factSafe !! n
334 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 17:33:59.09 ] >>332 定義域 例えば浮動小数点や有理数を渡した時に、 コンパイルエラーも含めて健全な定義になっているかということを言っていると思う。
335 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 17:39:05.80 ] fact = (map snd (iterate (succ . fst &&& uncurry (*)) (1, 1)) !!)
336 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 17:59:32.33 ] >>333 >>335 初心者の私に解説してplz
337 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 20:24:45.91 ] >>334 それscanlでできるよ! fact = (!! n) $ scanl (*) 1 [1..] あと(!!)使ったらSafeじゃないだろ…
338 名前:337 mailto:sage [2012/05/11(金) 20:25:54.90 ] すまん >>333 宛だった。
339 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 20:42:03.98 ] 負数入れたらエラーになるけど停止はするな
340 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 21:31:34.77 ] 意味論の上ではどちらも⊥という扱い
341 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 22:47:56.84 ] それにしても335は酷いポイントフリー症候群だな…。
342 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 22:59:19.96 ] ポイントフリーは酷くないが(1,1)がマジックナンバーになってるのが気になる
343 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 23:45:33.49 ] 初心者レベルの質問かもしれませんが、 Haskellの組み込み関数と同等の機能を 練習のために実装してみると、組み込み のものより桁違いに遅い事があります。 組み込みの方の実装を見るためには どうしたらいいでしょうか?
344 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 01:17:34.23 ] hsファイルをそのままインタプリタで実行して遅いなら、hiファイルにした後で実行してみてはどうか
345 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 01:47:10.63 ] >>343 Hackageのリファレンスからソース落とせる。 baseパッケージなら↓の一番下 hackage.haskell.org/package/base-4.5.0.0 大抵は各関数の横にsourceってリンクが付いててHTML化されたソースを見ることができる。(全てのコードが辿れるとは限らないけど) ただまぁ、融合変換とか正格性評価とかアンボックス型とか、かなり上級な内容もてんこ盛り。 他の言語でもそうだけど、基本ライブラリほど難しいっていう…。
346 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 03:31:29.92 ] >>345 有難うございます! hackage.haskell.org/packages/archive/pkg-list.html パッケーリスト(↑)には何に使うのか想像もつかないもの(Conduitとか)が 沢山有りますね。 取り敢えず、ヤル気が持続しそうなもの(Animationなど)を見てみます。
347 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:41:30.61 ] だれか顔文字だけで動くソースを書いてくれ。
348 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 13:47:08.27 ] brainf*ck、Lazy-K亜種にしかならない
349 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 19:38:57.18 ] みんな >=> は使ってるかい?
350 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 19:40:08.85 ] くコ:彡
351 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 22:43:14.15 ] haskell入れようとしたが、重すぎて繋がらない… ttp://www.haskell.org/
352 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 00:31:44.86 ] >>351 今は全く問題なく開くが・・・ まぁ、HaskellPlatform-2011.4.0.0-setup.exe のダウンロードは 確かに遅いと思うけど、繋がらないことはないだろ haskell.org はたまにクソ重いときあるから、 時間をおいて何度か試してみなよ
353 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 00:40:54.91 ] 遅ければtorrent使えばいい
354 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 00:50:09.29 ] exeファイルを落とせない場合は、セキュリティソフトがexeファイルのダウンロードを邪魔してる可能性あり
355 名前:351 mailto:sage [2012/05/13(日) 01:03:27.63 ] アドバイスありがとう ダウンロードどうこうというか、サイトに全く繋がらない状態が続いてる サイトが落ちてるわけじゃないようなので、時間をおいて再試行してみる