1 名前:デフォルトの名無しさん [04/02/10 22:16] Haskellの公式HP www.haskell.org/ 日本語サイト www.sampou.org/cgi-bin/haskell.cgi www.teu.ac.jp/kougi/koshida/Prog6/index.html 過去ログ、関連スレは>>2-5
52 名前:デフォルトの名無しさん mailto:sage [04/02/19 18:26] >>48 なるほど、dropはnが大きすぎると[]を返すんだね。 きれいなやりかただ。 で、35の関数はわかりやすさと効率を考えると 以下のものがいいということになる? 38とほぼ同じ。少し見やすくしてみた。 効率がいいのはこれなのかな。 それとnum < 0のときはデフォルトのエラーを起こすようにした。 k num = mapMaybe (takeOfMine num) . tails takeOfMine 0 _ = Just [] takeOfMine n [] = Nothing takeOfMine n (x:xs) = maybe Nothing (Just . (x:)) $ takeOfMine (n-1) xs
53 名前:デフォルトの名無しさん mailto:sage [04/02/19 18:39] >>52 そんなもんかな。 # 個人的にはtakeOfMineは>>43 のtakeJustのほうが # Haskellらしくて好きだけどね。(48 == 43だったりする:-)
54 名前:デフォルトの名無しさん mailto:sage [04/02/19 19:02] >>53 Maybe Monadってやつね。 僕も好きだな。 でもこっちのほうが好き。 takeJust n (x:xs) = do xs <- takeJust (n-1) xs return (x:xs) なんか手続き型言語に擬態してるかんじが好き。
55 名前:デフォルトの名無しさん mailto:sage [04/02/19 19:08] なんだろ、インデントが重要な言語だと、困るよね。 どうしたらいいんだろう。 上の例ではreturn (x:xs)はxs <- takeJust ...にきっちり合わせないとエラー。
56 名前:by Chalice mailto:sage [04/02/19 19:30] >>55 > なんだろ、インデントが重要な言語だと、困るよね。 いや、困らん。 …でも困る人は{...;..;.}って書けばいい。 とここまでかいて、他の人はIEとかで プロポーショナルフォントでみているのだと気づいた。困るかも。
57 名前:デフォルトの名無しさん [04/02/19 21:47] k 0 がポイント: k 0 xs = [[]] ++ [[]|x <- xs] k n xs = [x:y|(x,y) <- zip xs (k (n-1) (tail xs))]
58 名前:デフォルトの名無しさん mailto:sage [04/02/19 22:00] >>56 インデントを掲示板でちゃんと表示できたらいいと思ったからさ。 > takeJust n (x:xs) = do xs <- takeJust (n-1) xs > return (x:xs) こう書けばいいのかな。
59 名前:デフォルトの名無しさん mailto:sage [04/02/19 23:27] >> 57 同じトピック内で同名関数が定義されたため、参照透明性が破られてしまいますた。 は冗談として、 m 1 xs = [[x] | x <- xs] m n xs = [x:xs | (x,xs) <- zip xs $ m (n-1) $ tail xs] でどうだろう。
60 名前:デフォルトの名無しさん mailto:sage [04/02/20 06:33] >>57 ,59 かなりきれいな解法だと思う。 いままでで一番いいかも。
61 名前:デフォルトの名無しさん [04/02/20 13:47] >>59 いや,f 0 にはそれなりの根拠があるので生かしておいて f n [] = [] f n xxs@(x:xs) = top n xxs ++ f n xs top 0 xs = [[]] top n [] = [] top n (x:xs) = map (x:) $ top (n-1) xs
62 名前:デフォルトの名無しさん [04/02/20 13:52] xxs@(x:xs)は不要なパターンでした f n [] = [] f n xs = top n xs ++ f n (tail xs) top 0 xs = [[]] top n [] = [] top n (x:xs) = map (x:) $ top (n-1) xs
63 名前:デフォルトの名無しさん mailto:sage [04/02/20 16:24] >>61 take* n ≒ top だね。map, ++ の使いかたあたりが微妙に遅そうにみえる。 >>57 が綺麗でよさそう。 # k 0 xs = []:[[]|x <- xs] # k n xs = zipWith (:) xs (k (n-1) (tail xs))
64 名前:デフォルトの名無しさん [04/02/20 16:29] zipWith ... 忘れていたよ。
65 名前:35 mailto:sage [04/02/20 17:03] >>36-64 みなさまありがとうございますm(_ _)m 私じゃぜんぜん思いつかないエレガントな解で、惚れ惚れいたしました。
66 名前:デフォルトの名無しさん [04/02/21 16:44] どういたしまして。もう一つ: f n xs = zipN $ take n $ tails xs zipN xss = if any null xss then [] else map head xss : zipN (map tail xss) ただし f 0 xs で暴走。
67 名前:(define (´∀`) 'マターリ) mailto:sage [04/02/22 10:08] 処理系が落ちてこないので、試さずに挑む。 f n xs = [[xs !! (x + y) | y <- [..n-1]] | x <- [..(length xs)-n]]
68 名前:デフォルトの名無しさん mailto:sage [04/02/22 11:23] >>67 たぶん、 × [..n-1] [..(length xs)-n] ○ [0..n-1] [0..(length xs)-n] でしょう。 この場合、僕がはじめに作った関数同様、 無限配列で使えないので解としては、やや劣ると思われます。 それと、いちいち(!!)を使うのは効率上どうなんだろうか。 処理系なしで作ったのならしかたないか。 普段はlispを使っているようですね。 はじめにいれる処理系はhugsがおすすめ。 多少なじんできたら、がんばってghcをいれるといいかも。 >>66 いいね。 これもわりと感動もんかも。 単純な処理だと思っても以外と奥が深いもんだな。 以下は別に新しい考えかたは何もないですが、 上のほうで作っていた関数を見やすくしてみました。 p n xs = if drop (n-1) xs == [] then [] else take n xs : p n (tail xs) dropとtakeを両方使ってるあたりが泥臭いかも。 無限配列を扱えるもののなかで最も素直な解だと思う。どうかな。
69 名前:デフォルトの名無しさん mailto:sage [04/02/22 11:38] >>68 しまった。 書き込んでから気付いたのだが、これだと p :: Eq a => Int -> [a] -> [[a]] になってしまう。 まあ、素直な解ということで許してほしい。
70 名前:デフォルトの名無しさん mailto:sage [04/02/22 11:53] もうひとつ素直な解を。 # q n = filter ((==n).length) . k n # where k _ [] = [] # k n xs = take n xs : k n (tail xs) どうだろう。
71 名前:(define (´∀`) 'マターリ) mailto:sage [04/02/22 12:31] f n xs = take ((length xs)-n+1) [take n x | x <- tails xs] f n xs = filter ((==n).length) [take n x | x <- tails xs]
72 名前:デフォルトの名無しさん mailto:sage [04/02/22 17:17] >>70 >>44 の#と一緒。
73 名前:デフォルトの名無しさん [04/02/22 17:48] >>71 > f n xs = filter ((==n).length) [take n x | x <- tails xs] でも素直でわかりやすい。同じだけど: f n xs = filter ((==n).length) $ map (take n) $ tails xs 「関数のn乗」って関数はなかったんでしたっけ: f n xs = (iterate chop $ map (take n) $ tails xs) !! n chop (x:xs) = if null xs then [] else x : chop xs f n xs = map (take n) $ chopn n $ tails xs chopn n xs = fst $ foldr _chopn ([], n) xs where _chopn x (xs, n) = if n > 0 then (xs, n - 1) else (x:xs, 0)
74 名前:デフォルトの名無しさん mailto:sage [04/02/22 18:12] >>73 「関数のn乗」 -> ない。 chop -> init > f n xs = map (take n) $ chopn n $ tails xs > .... 無限リストに使えん。 気持ちは分かるんだが、 新しい良いアイディアが含まれていなかったり、 明らかに良くない方法だったりするものを 無闇に書き込むのは止めないか?(せめて欠点を併記するとか) 他の初心者が無分別に使うかもしれないし、 いいアイディアのものが埋もれる。 中級者以上(?)には面白くないし。
75 名前:デフォルトの名無しさん [04/02/22 18:59] >>74 > 「関数のn乗」 -> ない。 なぜないんでしょう,あってもよさそうなのに。 > chop -> init ありがとう。では直しておきます。 f n xs = (iterate init $ map (take n) $ tails xs) !! n これは無限リストで大丈夫ですね。 > 新しい良いアイディアが含まれていなかったり、 > 明らかに良くない方法だったりするものを > 無闇に書き込むのは止めないか?(せめて欠点を併記するとか) 欠点を併記するというのはいいですね。でも,今まで前を拾うこ とばかりしいたから,今度は後ろを落としてみたらどうかという 発想なので「無闇に」というのとは違いますよ。
76 名前:デフォルトの名無しさん mailto:sage [04/02/22 19:20] > 「関数のn乗」 手許に処理系ないんだけど、foldl とか (.) とかで簡単に作れそうな。
77 名前:74 mailto:sage [04/02/22 20:18] >>75 > 発想なので「無闇に」というのとは違いますよ。 失礼。 あなただけに書いたわけではなくて、>>70-71 などを指していた。 > 「関数のn乗」 (iterate f x) !! n が普通なんだろうけど、 自分でtail recursiveな nest :: (a -> b) -> a -> Int -> b nest' :: (a -> b) -> a -> Int -> b -- strict あたりを書いたほうが、速くていいね。 標準にあったほうがいいというのに同意。 > 手許に処理系ないんだけど、foldl とか (.) とかで簡単に作れそうな。 foldlは無駄な処理をするのでまずい。 composition f n = foldr (.) id $ replicate n f あたりか。
78 名前:74 mailto:sage [04/02/22 20:18] 最後は>>76 宛。
79 名前:74 mailto:sage [04/02/22 20:19] なんどもすまん。 nest :: (a -> a) -> a -> Int -> a だね。
80 名前:デフォルトの名無しさん [04/02/23 21:34] >>77 > 標準にあったほうがいいというのに同意。 ですよね。標準でないのは f^n は複数の n に対して評価する 可能性があるのでリストにキャッシュしておけ,という主張か とも思ったのですが。あっても悪くない気がします。 f n xs = (transpose $ map inits $ tails xs) !! n (制限:n は xs のサイズ以下,無限リスト可)
81 名前:デフォルトの名無しさん mailto:sage [04/02/29 06:43] なんとなくテクニックの紹介をしてみる。 Haskellのリストは一つの型しか保持できない。 しかし、複数の型であっても、その間に「関係」があれば、 それらの型をラップし、一つのリストにいれた上で使用することができる。 -------------- {-# OPTIONS -fglasgow-exts #-} -- different types data A = A String deriving Show methA (A x) = length x data B = B Int deriving Show methB (B x) = x -- but they have the methods of the same return type Int data C = forall x. C x (x -> Int) runC (C x f) = f x testC = map runC [C (A "I am A") methA, C (B 100) methB] -- if they belong to the same type class data ShowC = forall x. (Show x) => ShowC x instance Show ShowC where show (ShowC x) = show x testShowC = show [ShowC $ A "I am A", ShowC $ B 100] -- nearly nonsense data X = forall x. X x
82 名前:デフォルトの名無しさん mailto:sage [04/03/03 22:00] sage
83 名前:デフォルトの名無しさん [04/03/23 15:38] GHC-6.2.1 released
84 名前:デフォルトの名無しさん mailto:sage [04/03/23 22:23] Functional Programming With Haskell www.amazon.com/exec/obidos/tg/detail/-/0077093305/ 久々の新刊かも
85 名前:デフォルトの名無しさん mailto:sage [04/03/23 22:46] >>84 豪快に割引されてますな。
86 名前:デフォルトの名無しさん mailto:sage [04/03/23 22:49] 前スレでガイシュツだったのか。 pc2.2ch.net/test/read.cgi/tech/1013846140/ #554 一年以上も前に。
87 名前:デフォルトの名無しさん mailto:sage [04/03/24 12:00] wxHaskell使ってる人っている?
88 名前:デフォルトの名無しさん mailto:sage [04/03/24 16:27] >>84 ペーパーバックで5000円か…
89 名前:デフォルトの名無しさん mailto:sage [04/03/25 06:54] >>87 できあがる実行ファイルがでかすぎる
90 名前:デフォルトの名無しさん mailto:sage [04/03/30 23:30] >>89 Minimulコードでどれぐらい?
91 名前:デフォルトの名無しさん mailto:sage [04/03/31 02:56] >>90 @ Mac OS X 10.3 --- Hello.hs module Main where import Graphics.UI.WX main :: IO () main = start hello hello :: IO () hello = do f <- frame [text := "Hello world!"] quit <- button f [text := "Quit", on command := close f] set f [layout := widget quit] --- $ ghc -package wx -o hello Hello.hs で、helloのサイズが7M強。
92 名前:デフォルトの名無しさん mailto:sage [04/03/31 17:53] stripして3M弱だな。
93 名前:デフォルトの名無しさん mailto:sage [04/04/03 19:31] そりゃすげえな
94 名前:デフォルトの名無しさん [04/04/03 19:37] よくしんねぇけど、 ツールキット全部そんなかに入ってんじゃないの? だったら仕方ねぇと思うけど。 外出しには出来ねぇのかな?
95 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:00] GHC を ports の導入されていない FreeBSD に導入したいんだが どうすればいいのだろう?
96 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:11] make install
97 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:13] a) portsを入れてmake install b) packageを持ってきてpkg_add
98 名前:デフォルトの名無しさん mailto:sage [04/04/07 21:47] みんなまずインタプリタで開発して、 安定してきてリリースする間際にコンパイラに移行するの? インタプリタで正常動作してるけど、コンパイラではうまく動かないってこと多い? Haskellってコンパイル撃遅い(というか長い)ッてきいたけどマジ?
99 名前:デフォルトの名無しさん mailto:sage [04/04/07 22:07] >>96 GHC のコンパイルには GHC バイナリが必要です >>97 ports や package は教育上入れてもらえない学生さんなんですよ
100 名前:デフォルトの名無しさん mailto:sage [04/04/08 14:25] >>99 FreeBSD の ftp サーバの ports/distfiles に ghc-<version>-i386-unknown-freebsd-boot.tar.bz2 があるからこれを展開して, ghc のコンパイル時にこの展開先にある ghc を指定してコンパイルすればok. ちなみに ports も同じことをしている(処理が自動化されてるだけ). >>98 コンパイルはたしかに激遅. プログラマが楽するためにコンピュータに頑張ってもらってる感があるね.
101 名前:デフォルトの名無しさん mailto:sage [04/04/08 15:40] マニュアル印刷したいんだけど、1枚のHTMLにしてくんないかな。印刷しづらい。 www.sampou.org/haskell/report-revised-j/
102 名前:デフォルトの名無しさん mailto:sage [04/04/08 15:53] >>101 そんなのちょこっとスクリプト走らせれば楽勝だろ?
103 名前:デフォルトの名無しさん mailto:sage [04/04/08 19:12] >>98 > みんなまずインタプリタで開発して、 おれはそうしてる。GHCiでときどきHugsでチェック。 > インタプリタで正常動作してるけど、コンパイラではうまく動かないってこと多い? そんな経験は無い。
104 名前:デフォルトの名無しさん mailto:sage [04/04/08 20:10] >>100 ありがとう 試してみてうまくいったらまた報告します
105 名前:デフォルトの名無しさん mailto:sage [04/04/08 22:55] NHCの方が良質のコードを生成するって聞いたことあるけど、 もう今は昔の話なのかな?
106 名前:デフォルトの名無しさん mailto:sage [04/04/08 23:14] このスレでも聞いてみる。 Scheme,OCaml,Haskell,Clean、覚えて「損しない」「一番得」 な言語はどれ。ぶっちゃけ周辺ライブラリーが充実してるのどれ。
107 名前:デフォルトの名無しさん mailto:sage [04/04/08 23:20] >>106 得するのは、全部覚えること。 得しないのは、ひとつしか覚えないこと。
108 名前:デフォルトの名無しさん mailto:sage [04/04/08 23:54] >>106 若いなら全部やれ
109 名前:デフォルトの名無しさん mailto:sage [04/04/09 00:27] >>105 コンパイルは速いけどね。 Hugs/GHC共通のHierachical moduleの多くが使えないのが痛すぎる。 今試しに main = interact id をnhc98(FreeBSD-CURRENT, from ports)でコンパイルしたらbus error....
110 名前:デフォルトの名無しさん mailto:sage [04/04/09 00:34] r抜けてたHierarchical
111 名前:デフォルトの名無しさん mailto:sage [04/04/12 16:54] >>106 統計やるならRが結構ナイスだ。
112 名前:デフォルトの名無しさん mailto:sage [04/04/12 22:37] >>110-111 Rスレはこっちに↓あ〜る = 統計解析フリーソフト R = science2.2ch.net/test/read.cgi/math/1062650510/
113 名前:デフォルトの名無しさん [04/04/14 12:02] 工科大の www.teu.ac.jp/kougi/koshida/Prog6/Text08/index.html の問題1 ですが、 > sigma :: (Int -> Int) -> (Int -> Int) > 上記の関数sigmaを,1) ラムダ記法を使って,2) 関数の部分適用を使って,定義せよ.ただし,sigma fは,自然数nに対して > f 0 + f 1 + ... + f n > を計算する関数とする. lambda 版 は以下のように作成しました。 sigmaLambda :: (Int -> Int) -> (Int -> Int) sigmaLambda f = \x -> sum [f i | i <- [0 .. x]] で、部分適用版ですが、 sigma :: (Int -> Int) -> Int -> Int sigma f 0 = f 0 sigma f n = sigma f (n-1) + f n で、いいんでしょうか。 題意のような関数を返すのですが、部分適用という感じがしません。 出題者がどのような回答を期待しているか知りたいのですが。 (あと、なんか lambda版を、内包表現とか使ってて、出題意図に沿ってないような気がするのです)
114 名前:デフォルトの名無しさん mailto:sage [04/04/14 13:37] >>113 > 題意のような関数を返すのですが、部分適用という感じがしません。 addNum'' n m = n + m に部分適用を使ったといっているのだからそれでいいだろう。 sigmaPartial f n = sum [f m | m <- [0..n]] > (あと、なんか lambda版を、内包表現とか使ってて、出題意図に沿ってないような気がするのです) それなら使わなければいいのでは? sigmaLambda = \f n -> if n == 0 then f 0 else sigmaLambda f (n - 1) + f n
115 名前:デフォルトの名無しさん [04/04/14 14:00] sigma,sigma' :: (Int -> Int) -> (Int -> Int) sigma f = \ n -> foldl (\ s i -> s + f i) 0 [0..n] sigma' f = let iter s x = if x < 0 then s else iter (s+f x) (x-1) in iter 0
116 名前:デフォルトの名無しさん mailto:sage -- "let" sucks! [04/04/14 14:37] import Control.Monad.Fix (fix) -- fix f = f (fix x) sigma = flip fix 0 $ \s t f n -> if n < 0 then t else s (t + f n) f (n - 1)
117 名前:デフォルトの名無しさん mailto:sage [04/04/14 14:38] fix f = f (fix f)ね。
118 名前:デフォルトの名無しさん mailto:sage [04/04/19 19:21] Haskell に例外処理の機構はあるの?
119 名前:デフォルトの名無しさん mailto:sage [04/04/19 19:37] ある。 Haskell98でもIOモナドからthrowできる例外(IOError)があるし、 最近のGHC、Hugsでは普通の関数からも例外(Exception)をthrowできる。 catchはIOモナドの中でおこなう。 参照: Control.Exception
120 名前:デフォルトの名無しさん mailto:sage [04/04/20 23:50] Haskell勉強中なんですけど、 「モナドは継続渡しを提供する」という大雑把な理解でいいでしょうか? ・・・違うかな?
121 名前:デフォルトの名無しさん mailto:sage [04/04/24 22:23] なんで Prelude で (!!) は Integer じゃなくて Int で定義されているの?
122 名前:デフォルトの名無しさん mailto:sage [04/04/25 02:07] >>121 実際問題それ以上使うことはないからだろう。 Haskell 98 Report によると maxBound::Int は少なくとも 2^29-1。 (!!)のインデックスは0-originだから、長さ2^29のリストまで扱える。 これ以上の長さのリストを使う場面は……。
123 名前:デフォルトの名無しさん mailto:sage [04/04/25 12:41] 円周率の世界記録に朝鮮したい人はどうすれば?
124 名前:デフォルトの名無しさん mailto:sage [04/04/25 18:11] >>123 自分で最低義すれ。
125 名前:デフォルトの名無しさん mailto:sage [04/04/26 14:54] >>123 円周率は全桁保持していなくても次を計算できたはず。 >>124 アドレスの制限があるから多くの計算機と既存の処理系では 再定義しても無駄。
126 名前:デフォルトの名無しさん mailto:sage [04/04/26 23:48] >>120 こんなん見つけた ttp://www.jaist.ac.jp/~kiyoshiy/writing/wadler_essenceoffunctionalprogramming.pdf ここの資料はjaistのゼミ資料? 他にはHaskellDBが自分的に興味深い. TorqueとかHibernateなんて目じゃない. Haskellだけど…
127 名前:デフォルトの名無しさん mailto:sage [04/04/27 14:27] >>121 haskell@でもちょうど議論されてるね。 上ででたものの他に、こういう意見があった。 Integer派: * Lazyにcreated/destroyedなデータならアドレスの制限を 受けずに大きいものを利用できるはずだ。 * Intは一般的なケースへの最適化であり、 "Premature optimization is the root of all evil." Integerには反対派: Integerにするのは、巨大なリストという特殊な状況への最適化である。 (Integral b) => がよろしい。
128 名前:デフォルトの名無しさん mailto:sage [04/04/27 18:46] Hanatani さんすげーな。 オレもああいう凄腕Haskellerになりたい。
129 名前:デフォルトの名無しさん mailto:sage [04/04/28 12:39] >>128 なんか凄いもの作ったの?
130 名前:デフォルトの名無しさん mailto:sage [04/05/05 01:32] しばらく見ないうちに「関数型言語」のスレがひどいことになってるな。
131 名前:デフォルトの名無しさん mailto:sage [04/05/05 02:34] >>130 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜 Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜
132 名前:デフォルトの名無しさん [04/06/27 22:34] たま〜にはあげてみる Haskell Support for the Eclipse IDE eclipsefp.sourceforge.net/ 0.3.0はEclipse最新var.(M9〜正式版)に対応しているぞ。
133 名前:デフォルトの名無しさん [04/06/30 18:10] おお. しかしスクリーンショットがほしい所かも. 後でインスコしてみるか… Fudgets www.cs.chalmers.se/Cs/Research/Functional/Fudgets/ 触ってる人いる? これから弄ってみようと思うのだけど. featureのページに, Declarative flavour. While it is possible to enable GUI programming in a functional language by providing an interface to an imperative GUI toolkit and, in effect, using an imperative sub-language within the functional language, Fudgets provide a declarative style of programming also for the construction of GUIs. とある. なんだか期待大.
134 名前:デフォルトの名無しさん mailto:sage [04/06/30 20:48] >>133 使えたら是非おしえてくれ。 Declarative GUI toolkitって数年前から どれもメンテが止まってるっぽいんだよな。 最近ではwxHaskellがスタンダードになりつつあるけど、 やっぱりHaskellならDeclarativeにやりたい。
135 名前:デフォルトの名無しさん [04/07/17 08:42] Haskell Marathon www.sampou.org/cgi-bin/cahier.cgi
136 名前:デフォルトの名無しさん mailto:sage [04/07/18 09:25] Haskell で Marathon を実装するのかとオモタ。
137 名前:デフォルトの名無しさん mailto:sage [04/07/26 01:14] マラソン参加してみようかな。入門ページ読んだくらいで準備はよいだろうか
138 名前:デフォルトの名無しさん mailto:sage [04/07/29 09:20] マラソン直前に台風直撃の悪寒
139 名前:デフォルトの名無しさん mailto:sage [04/08/09 23:33] LL WeekendでのHaskellに対する聴衆の感想は「Haskellのコードはよくわからない」というのが多かったみたいでつね
140 名前:デフォルトの名無しさん mailto:sage [04/08/10 01:19] 5分だか7分だかでわかれという方が無理があるという話がある。発表者陣はよ くやったと思うよ。 「わたしはもうループも書けなくなってしまって……」というのにワロタ。
141 名前:デフォルトの名無しさん mailto:sage [04/08/11 02:33] LL侍はHaskellを斬ったの?
142 名前:デフォルトの名無しさん mailto:sage [04/08/12 01:39] >>141 「Hello, worldもブラックボックス斬り」されてました。
143 名前:デフォルトの名無しさん mailto:sage [04/08/12 13:41] おれはhaskell haskell haskellだ 関数型の haskellだ 短くて 簡潔で 理解しやすいコードを書けるぜ って、言うじゃない だけど 難しくて monad が理解できませんから 残念! 「Hello worldさえブラックボックス」 斬り
144 名前:デフォルトの名無しさん [04/08/12 20:55] むしろHello, worldだから難しいような気がする
145 名前:デフォルトの名無しさん mailto:sage [04/08/12 21:58] main = do putStr "Hello, World!" で済むから、コード自体は特に難しくは見えない。 ただ、入門者が Hello, World に到達するまでの過程が難しいんだよね……。
146 名前:デフォルトの名無しさん mailto:sage [04/08/12 22:00] >>145 そのdoはいるの?
147 名前:145 mailto:sage [04/08/12 23:13] この場合はいらないけど、先々のことを考えたら入れた方がいいかな、とちょっ とだけ思ったのです。 main = do str <- getLine putStr str みたいに。
148 名前:デフォルトの名無しさん mailto:sage [04/08/13 07:57] いきなりIOから入るのがまずい。 fact→fib→qsortあたりから入れば 得体の知れないモナドをとりあえず回避できる。
149 名前:デフォルトの名無しさん mailto:sage [04/08/13 16:25] 再帰とリスト処理しかできないHaskellちゃん がんばってもせいぜい二分木
150 名前:デフォルトの名無しさん mailto:sage [04/08/13 17:34] 膣門です。 "Hindley-Milner" って、何て読むんでつか?
151 名前:デフォルトの名無しさん mailto:sage [04/08/14 01:49] 誰か「モナドだけで書く Haskell プログラミング」を書いてくれい
152 名前:デフォルトの名無しさん mailto:sage [04/08/15 13:29] >>151 Cでも使ってれば?