関数型プログラミング言語Haskell Part3
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGhttp://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
Http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
過去ログ、関連スレは>>2-5
0002デフォルトの名無しさん
NGNG関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
関数型言語
Part1 http://pc.2ch.net/tech/kako/987/987954395.html
Part2 http://pc3.2ch.net/tech/kako/1007/10073/1007387924.html
Part3 http://pc2.2ch.net/test/read.cgi/tech/1037527388/l50
純粋関数型言語Concurent Clean
http://pc2.2ch.net/test/read.cgi/tech/1075629340/l50
ML!!!!!!
http://pc.2ch.net/tech/kako/1002/10021/1002111468.html
関数型プログラミング言語ML
Part1 http://pc2.2ch.net/tech/kako/1012/10124/1012445015.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1058630709/l50
0003デフォルトの名無しさん
NGNGPart1: http://piza2.2ch.net/tech/kako/987/987169286.html
Part2: http://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part3: http://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part4: http://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part5: http://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part6: http://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part7: http://ruku.qp.tc/dat2ch/0311/20/1042167213.html
Part8: http://pc2.2ch.net/tech/kako/1058/10582/1058263391.html
Part9: http://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part10: http://pc2.2ch.net/test/read.cgi/tech/1075630259/l50
CommonLisp初心者スレ
http://pc2.2ch.net/test/read.cgi/tech/1075464728/l50
Emacs Lisp
Part1 http://pc2.2ch.net/test/read.cgi/tech/1004551074/
Part2 http://pc2.2ch.net/test/read.cgi/tech/1068467385/l50
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG>>1乙。
# MLスレの571他です。
0007デフォルトの名無しさん
NGNGotu!
0008デフォルトの名無しさん
NGNGIO 関係ない関数での引数が気に入らないとかのエラー処理は、Maybe でやるのが Hakell 流なんでしょうか?
それとも容赦なく error が使っちまうべきなんだろうか?
0009デフォルトの名無しさん
NGNG> IO 関係ない関数での引数が気に入らないとかのエラー処理は、Maybe でやるのが Hakell 流なんでしょうか?
Yes. Maybeがモナドであることの有難味がわかるよ。
0010デフォルトの名無しさん
NGNGMaybe だといちいち Just か Nothing か判定して、
fromJust とかしいといけないから、めんどうだと思ったんだけど。
いまいち自分が Maybe を理解してない気もするな。
> Yes. Maybeがモナドであることの有難味がわかるよ。
その有難味を具体的に教えてください。
0011デフォルトの名無しさん
NGNG例えば
-- f, g x, h xのいづれかがNothingを返したとき、value_in_error_caseを返す。
(f >>= g >>= h) `maybeCatch` value_in_error_case
ここで
maybeCatch = flip . fromMaybe
# ヒントをもらったら答えを聞く前に自分で考えてみるようにしたほうがいいと思う。
しかし、本当に
> 引数が気に入らない
が問題だというなら、より正しい対処は(適切な抽象型をもちいるなどして)
そんなことがおこらないようにすること。
何か計算の結果が不確定である場合はしかたがないが。
アボートしていいプログラムやassertionならそもそもIOでのcatchもtryもいらない。
errorでいいし、時にはパターンマッチの失敗だけでいい。
f x | validity_check x = ...
0012デフォルトの名無しさん
NGNG> その有難味を具体的に教えてください。
いちいち Just か Nothing か判定したり、
fromJust とかしなくていいところ。
0013デフォルトの名無しさん
NGNG(Just x) >>= k = k x
Nothing >>= _ = Nothing
とかで、気にせず Maybe 付いたままでいけばいいんだね。
どうもありがとう。
0014デフォルトの名無しさん
NGNG小さなことだけど。
× flip . fromMaybe ○ flip fromMaybe
ですよね。
0015デフォルトの名無しさん
NGNGHaskell で bank accounts を実装するとどうなるのでしょうか。
0016デフォルトの名無しさん
NGNGbank accountsと一口にいわれてもよくわからないが…
こういうこと(カプセル化)でないなら、
期待しているものが載ってるURLをくれ。
ポリモルフィズムはtype class。
継承は難しい。
# OOA, OODが全てではない。
-- テストしてない
module BankAccount (
-- Do not export any constructor.
name, money, newAccount
--, query, ...etc
) where
data Account = Account String Integer
name (Account s m) = s
money (Account s m) = m
newAccount (s, m) = Account s m
-- data Database = Database [Account]
-- query (Database as) nm = filter ((== nm).name) as
0017デフォルトの名無しさん
NGNG> OO 言語だと、最初は大体 bank accounts の説明から始まりますよね。
考えが古典的過ぎるのでは?
C の構造体がどうのこうのとか。
0018デフォルトの名無しさん
NGNGこういうのをお願いします。アカウントを複数作れて、それぞれに withdraw, deposit
可能な感じです。
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#%_sec_3.1.1
>>17
状態遷移を扱う例が他に思いつかなかったもので。OO かどうかにはこだわっていません。
0019デフォルトの名無しさん
NGNGdepositだけ実装。
どうしても
> (withdraw 25)
> 75
> (withdraw 25)
> 50
こんなことがしたい、という意味?
それとも、こういう機能があればいいのか?
例:
$ ./a.out
>> Status: [(0,100),(1,1000),(2,300)]
Deposit 1 300
Deposit 2 400
>> Status: [(0,100),(1,1300),(2,700)]
^D
前者なら、
make_withdraw :: IORef Account -> Money -> IO Money
make_withdraw ref money =
do {x <- readIORef ref; writeIORef ref (x - money); readIORef ref}
というのを作っておいて、
ref_account <- newIORef newAccount
let withdraw = make_withdraw ref_account -- :: Money -> IO Money
とする。
後者なら、普通は前者のような設計はしない。
0021デフォルトの名無しさん
NGNG× make_withdraw :: IORef Account -> Money -> IO Money
○ make_withdraw :: IORef Money -> Money -> IO Money
0022デフォルトの名無しさん
NGNGどうもありがとうございます。
毎回出力する必要は無いので、後者だと思います。
0023デフォルトの名無しさん
NGNG> 毎回出力する必要は無いので、後者だと思います。
なんかずれてるような。
> (withdraw 25)
> 75
> (withdraw 25)
> 50
このwithdrawは(同じ引数に対して別の値をかえすので)
関数じゃないというのはわかってる?
だから、
withdraw :: Int -> Int
ではなくて
withdraw :: Int -> IO Int
になる。別にIO Intにしたからって毎回出力するわけじゃないよ。
0024デフォルトの名無しさん
NGNGdepositだけ実装。
============================
module Main where
import Data.FiniteMap
import Data.Maybe
type Database = FiniteMap Int Int
-- errors are silently ignored.
deposit :: Database -> (Int, Int) -> Database
deposit db (nm, mon)
= fromMaybe db (lookupFM db nm >>= return . addToFM db nm . (+ mon))
testDB :: Database
testDB = listToFM [(0, 100), (1,1000), (2, 300)]
data Cmd = Deposit Int Int | Withdraw Int Int | Print | Error
deriving Read
============================
続く
0025デフォルトの名無しさん
NGNGmain = loop testDB
where
loop db = do s <- getLine
cmd <- catch (readIO s) (\e -> return Error)
case cmd of
Deposit i m -> do loop $ deposit db (i, m)
Print -> do putStrLn $ ">> Status: " ++ show (fmToList db)
loop db
_ -> do putStrLn ">> Sorry, not implemented"
loop db
============================
終わり
0026デフォルトの名無しさん
NGNGどうもありがとうございます。
>このwithdrawは(同じ引数に対して別の値をかえすので)
>関数じゃないというのはわかってる?
なるほど。感覚的に難しいですね。頂いたコードはじっくり読ませて頂きます。
初心者なもので、時間がかかりそうですが。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGサイトはありますか?
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGhttp://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=Haskell
UNIXコマンドのHaskellでの実装が多数あります。
というか、僕が書いたものが多いですが。
wikiなので勝手に書きこんじゃいました。
解説はしてませんが、短いコードが多いです。
参考になればうれしいです。
それと、メール欄にsageと書いておくことをようやく学びました。
0031デフォルトの名無しさん
NGNGPreludeの関数を書く、ついてくるPreludeを読むのがお薦め。
0032デフォルトの名無しさん
NGNGuniq 改良版(getArgs...はかわらないのでstdin用)
--
import Data.List
main = interact $ unlines . map head . group . lines
--
basename, wcあたりも面白そうだ。
0033デフォルトの名無しさん
NGNGやられた。
そうか、groupが使えたか。
ちょっと悔しいな。
改良版も加えておきます。
003428
NGNGいろいろなコードをちまちまハックしたいと思います。
Haskell はまだリファレンスだけでは全くかけないので。
0035デフォルトの名無しさん
NGNGf 3 a => [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
といった値を返す関数 f が欲しいのですが、
Haskell に標準であるでしょうか?
0036デフォルトの名無しさん
NGNG無いとは言いきれないけどね。
いちおうお求めの関数は
f :: Int -> [a] -> [[a]]
f num lst
| length lst >= num = take num lst : f num (tail lst)
| otherwise = []
でいいとは思います。
0037デフォルトの名無しさん
NGNGf num lst以下の2文はインデントを深くしないと、だめです。
いちおう念のため。
0038デフォルトの名無しさん
NGNGg :: Int -> [a] -> [[a]]
g num lst = mapMaybe (myTake num) (tails lst)
これだとlst >> numでもOK
0039デフォルトの名無しさん
NGNGmyTake n _ | n < 0 = Nothing
myTake n _ | n == 0 = Just []
myTake n (x:xs) = case myTake (n-1) xs of
Just xxs -> Just (x:xxs)
Nothing -> Nothing
myTake _ [] = Nothing
0040デフォルトの名無しさん
NGNGtakeMaybe n []
| n == 0 = Just []
| otherwise = Nothing
takeMaybe n (x:xs)
| n < 0 = Nothing
| n == 0 = Just []
| otherwise = takeMaybe (n-1) xs >>= \r
-> Just (x:r)
0041デフォルトの名無しさん
NGNGdata は複数形、単数は datum.
-- 知っててやってるんだったら無視して下さい。
-- (data って変数名使えないから、とか。)
あと下から4行目の data は datas の typo でしょう。
0042デフォルトの名無しさん
NGNGimport List
h num lst = [ take num x | x <- tails lst, length x >= num ]
i num = map (take num) . filter ((>=num) . length) . tails
0043デフォルトの名無しさん
NGNG#############################
import Data.Maybe
-- 再帰で書いてみた
f n xs = catMaybes $ f' n xs
where
f' n [] = []
f' n xxs@(x:xs) = (takeJust n xxs):f' n xs
-- AKA myTake and takeMaybe
takeJust 0 xs = Just []
takeJust n [] = Nothing
takeJust n (x:xs) = takeJust (n - 1) xs >>= \xs -> Just (x:xs)
0044デフォルトの名無しさん
NGNG>>36(無限リストにつかえない、何度もlengthを求める)よりは
いいけど、takeとlengthを両方使うのは無駄がおおいのでいまいちかと。
-- テストしてない。多分遅い。
h num lst = filter ((== n) . length) $ f' num lst
where
f' num [] = []
f' num lst = take num lst:f' num (tail lst)
0045デフォルトの名無しさん
NGNG訂正
>>36(無限リストにつかえない、何度もlengthを求める)よりは
と同じだね。
0046デフォルトの名無しさん
NGNGそうか、そういえばそうだったな。
datasなんて単語はないのか。
指摘してくれてありがとう。
ま、いまのところは和製英語ってことで...。
そのうち直します。
日本人だと変数名には苦労するよね。
タイプミスは直しておきました。
0047デフォルトの名無しさん
NGNGなるほど。
lengthを軽々しく使わないほうがいいのかもな。
じゃあ、こんなので
j num = map (take num) . filter (biggerOrEqual num) . tails
biggerOrEqual :: Int -> [a] -> Bool
biggerOrEqual 0 _ = True
biggerOrEqual n [] = False
biggerOrEqual n (x:xs) = biggerOrEqual (n-1) xs
0048デフォルトの名無しさん
NGNG無限リスト対応問題のほうはそれでいけるね。
> biggerOrEqual :: Int -> [a] -> Bool
こういうのが欲しくなることは結構ある。おれは
大体再帰で頭を落としていくようにくむから、[]との比較ですむけど。
書くならこうかな。
biggerOrEqual n xs = [] /= drop n xs
004948
NGNG0050デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGなるほど、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
0053デフォルトの名無しさん
NGNGそんなもんかな。
# 個人的にはtakeOfMineは>>43のtakeJustのほうが
# Haskellらしくて好きだけどね。(48 == 43だったりする:-)
0054デフォルトの名無しさん
NGNGMaybe Monadってやつね。
僕も好きだな。
でもこっちのほうが好き。
takeJust n (x:xs) = do xs <- takeJust (n-1) xs
return (x:xs)
なんか手続き型言語に擬態してるかんじが好き。
0055デフォルトの名無しさん
NGNGどうしたらいいんだろう。
上の例ではreturn (x:xs)はxs <- takeJust ...にきっちり合わせないとエラー。
0056by Chalice
NGNG> なんだろ、インデントが重要な言語だと、困るよね。
いや、困らん。
…でも困る人は{...;..;.}って書けばいい。
とここまでかいて、他の人はIEとかで
プロポーショナルフォントでみているのだと気づいた。困るかも。
0057デフォルトの名無しさん
NGNGk 0 xs = [[]] ++ [[]|x <- xs]
k n xs = [x:y|(x,y) <- zip xs (k (n-1) (tail xs))]
0058デフォルトの名無しさん
NGNGインデントを掲示板でちゃんと表示できたらいいと思ったからさ。
> takeJust n (x:xs) = do xs <- takeJust (n-1) xs
> return (x:xs)
こう書けばいいのかな。
0059デフォルトの名無しさん
NGNG同じトピック内で同名関数が定義されたため、参照透明性が破られてしまいますた。
は冗談として、
m 1 xs = [[x] | x <- xs]
m n xs = [x:xs | (x,xs) <- zip xs $ m (n-1) $ tail xs]
でどうだろう。
0060デフォルトの名無しさん
NGNGかなりきれいな解法だと思う。
いままでで一番いいかも。
0061デフォルトの名無しさん
NGNGいや,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
0062デフォルトの名無しさん
NGNGf 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
0063デフォルトの名無しさん
NGNGtake* n ≒ top だね。map, ++ の使いかたあたりが微妙に遅そうにみえる。
>>57が綺麗でよさそう。
# k 0 xs = []:[[]|x <- xs]
# k n xs = zipWith (:) xs (k (n-1) (tail xs))
0064デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGf 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 で暴走。
0067(define (´∀`) 'マターリ)
NGNGf n xs = [[xs !! (x + y) | y <- [..n-1]] | x <- [..(length xs)-n]]
0068デフォルトの名無しさん
NGNGたぶん、
× [..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を両方使ってるあたりが泥臭いかも。
無限配列を扱えるもののなかで最も素直な解だと思う。どうかな。
0069デフォルトの名無しさん
NGNGしまった。
書き込んでから気付いたのだが、これだと
p :: Eq a => Int -> [a] -> [[a]]
になってしまう。
まあ、素直な解ということで許してほしい。
0070デフォルトの名無しさん
NGNG# q n = filter ((==n).length) . k n
# where k _ [] = []
# k n xs = take n xs : k n (tail xs)
どうだろう。
0071(define (´∀`) 'マターリ)
NGNGf n xs = filter ((==n).length) [take n x | x <- tails xs]
0072デフォルトの名無しさん
NGNG>>44の#と一緒。
0073デフォルトの名無しさん
NGNG> 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)
0074デフォルトの名無しさん
NGNG「関数のn乗」 -> ない。
chop -> init
> f n xs = map (take n) $ chopn n $ tails xs
> ....
無限リストに使えん。
気持ちは分かるんだが、
新しい良いアイディアが含まれていなかったり、
明らかに良くない方法だったりするものを
無闇に書き込むのは止めないか?(せめて欠点を併記するとか)
他の初心者が無分別に使うかもしれないし、
いいアイディアのものが埋もれる。
中級者以上(?)には面白くないし。
0075デフォルトの名無しさん
NGNG> 「関数のn乗」 -> ない。
なぜないんでしょう,あってもよさそうなのに。
> chop -> init
ありがとう。では直しておきます。
f n xs = (iterate init $ map (take n) $ tails xs) !! n
これは無限リストで大丈夫ですね。
> 新しい良いアイディアが含まれていなかったり、
> 明らかに良くない方法だったりするものを
> 無闇に書き込むのは止めないか?(せめて欠点を併記するとか)
欠点を併記するというのはいいですね。でも,今まで前を拾うこ
とばかりしいたから,今度は後ろを落としてみたらどうかという
発想なので「無闇に」というのとは違いますよ。
0076デフォルトの名無しさん
NGNG手許に処理系ないんだけど、foldl とか (.) とかで簡単に作れそうな。
007774
NGNG> 発想なので「無闇に」というのとは違いますよ。
失礼。
あなただけに書いたわけではなくて、>>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
あたりか。
007974
NGNGnest :: (a -> a) -> a -> Int -> a
だね。
0080デフォルトの名無しさん
NGNG> 標準にあったほうがいいというのに同意。
ですよね。標準でないのは f^n は複数の n に対して評価する
可能性があるのでリストにキャッシュしておけ,という主張か
とも思ったのですが。あっても悪くない気がします。
f n xs = (transpose $ map inits $ tails xs) !! n
(制限:n は xs のサイズ以下,無限リスト可)
0081デフォルトの名無しさん
NGNGHaskellのリストは一つの型しか保持できない。
しかし、複数の型であっても、その間に「関係」があれば、
それらの型をラップし、一つのリストにいれた上で使用することができる。
--------------
{-# 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
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGhttp://www.amazon.com/exec/obidos/tg/detail/-/0077093305/
久々の新刊かも
0085デフォルトの名無しさん
NGNG豪快に割引されてますな。
0086デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ #554
一年以上も前に。
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGペーパーバックで5000円か…
0089デフォルトの名無しさん
NGNGできあがる実行ファイルがでかすぎる
0090デフォルトの名無しさん
NGNGMinimulコードでどれぐらい?
0091デフォルトの名無しさん
NGNG@ 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強。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNGツールキット全部そんなかに入ってんじゃないの?
だったら仕方ねぇと思うけど。
外出しには出来ねぇのかな?
0095デフォルトの名無しさん
NGNGどうすればいいのだろう?
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNGb) packageを持ってきてpkg_add
0098デフォルトの名無しさん
NGNG安定してきてリリースする間際にコンパイラに移行するの?
インタプリタで正常動作してるけど、コンパイラではうまく動かないってこと多い?
Haskellってコンパイル撃遅い(というか長い)ッてきいたけどマジ?
0099デフォルトの名無しさん
NGNGGHC のコンパイルには GHC バイナリが必要です
>>97
ports や package は教育上入れてもらえない学生さんなんですよ
0100デフォルトの名無しさん
NGNGFreeBSD の ftp サーバの ports/distfiles に
ghc-<version>-i386-unknown-freebsd-boot.tar.bz2 があるからこれを展開して,
ghc のコンパイル時にこの展開先にある ghc を指定してコンパイルすればok.
ちなみに ports も同じことをしている(処理が自動化されてるだけ).
>>98
コンパイルはたしかに激遅.
プログラマが楽するためにコンピュータに頑張ってもらってる感があるね.
0101デフォルトの名無しさん
NGNGhttp://www.sampou.org/haskell/report-revised-j/
0102デフォルトの名無しさん
NGNGそんなのちょこっとスクリプト走らせれば楽勝だろ?
0103デフォルトの名無しさん
NGNG> みんなまずインタプリタで開発して、
おれはそうしてる。GHCiでときどきHugsでチェック。
> インタプリタで正常動作してるけど、コンパイラではうまく動かないってこと多い?
そんな経験は無い。
0104デフォルトの名無しさん
NGNGありがとう
試してみてうまくいったらまた報告します
0105デフォルトの名無しさん
NGNGもう今は昔の話なのかな?
0106デフォルトの名無しさん
NGNGScheme,OCaml,Haskell,Clean、覚えて「損しない」「一番得」
な言語はどれ。ぶっちゃけ周辺ライブラリーが充実してるのどれ。
0107デフォルトの名無しさん
NGNG得するのは、全部覚えること。
得しないのは、ひとつしか覚えないこと。
0108デフォルトの名無しさん
NGNG若いなら全部やれ
0109デフォルトの名無しさん
NGNGコンパイルは速いけどね。
Hugs/GHC共通のHierachical moduleの多くが使えないのが痛すぎる。
今試しに
main = interact id
をnhc98(FreeBSD-CURRENT, from ports)でコンパイルしたらbus error....
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG統計やるならRが結構ナイスだ。
0112デフォルトの名無しさん
NGNGRスレはこっちに↓あ〜る
= 統計解析フリーソフト R =
http://science2.2ch.net/test/read.cgi/math/1062650510/
0113デフォルトの名無しさん
NGNGhttp://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版を、内包表現とか使ってて、出題意図に沿ってないような気がするのです)
0114デフォルトの名無しさん
NGNG> 題意のような関数を返すのですが、部分適用という感じがしません。
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
0115デフォルトの名無しさん
NGNGsigma 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
0116デフォルトの名無しさん
NGNGsigma = flip fix 0 $ \s t f n -> if n < 0 then t else s (t + f n) f (n - 1)
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNGHaskell98でもIOモナドからthrowできる例外(IOError)があるし、
最近のGHC、Hugsでは普通の関数からも例外(Exception)をthrowできる。
catchはIOモナドの中でおこなう。
参照: Control.Exception
0120デフォルトの名無しさん
NGNG「モナドは継続渡しを提供する」という大雑把な理解でいいでしょうか?
・・・違うかな?
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNG実際問題それ以上使うことはないからだろう。
Haskell 98 Report によると maxBound::Int は少なくとも 2^29-1。
(!!)のインデックスは0-originだから、長さ2^29のリストまで扱える。
これ以上の長さのリストを使う場面は……。
0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNG自分で最低義すれ。
0125デフォルトの名無しさん
NGNG円周率は全桁保持していなくても次を計算できたはず。
>>124
アドレスの制限があるから多くの計算機と既存の処理系では
再定義しても無駄。
0126デフォルトの名無しさん
NGNGttp://www.jaist.ac.jp/~kiyoshiy/writing/wadler_essenceoffunctionalprogramming.pdf
ここの資料はjaistのゼミ資料?
他にはHaskellDBが自分的に興味深い.
TorqueとかHibernateなんて目じゃない. Haskellだけど…
0127デフォルトの名無しさん
NGNGhaskell@でもちょうど議論されてるね。
上ででたものの他に、こういう意見があった。
Integer派:
* Lazyにcreated/destroyedなデータならアドレスの制限を
受けずに大きいものを利用できるはずだ。
* Intは一般的なケースへの最適化であり、
"Premature optimization is the root of all evil."
Integerには反対派:
Integerにするのは、巨大なリストという特殊な状況への最適化である。
(Integral b) => がよろしい。
0128デフォルトの名無しさん
NGNGオレもああいう凄腕Haskellerになりたい。
0129デフォルトの名無しさん
NGNGなんか凄いもの作ったの?
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNGAranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜
Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜
Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜
Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜
Aranskさま〜〜早くこのスレにも御光臨してくださいませ〜〜
0132デフォルトの名無しさん
NGNGHaskell Support for the Eclipse IDE
http://eclipsefp.sourceforge.net/
0.3.0はEclipse最新var.(M9〜正式版)に対応しているぞ。
0133デフォルトの名無しさん
NGNGFudgets
http://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.
とある. なんだか期待大.
0134デフォルトの名無しさん
NGNG使えたら是非おしえてくれ。
Declarative GUI toolkitって数年前から
どれもメンテが止まってるっぽいんだよな。
最近ではwxHaskellがスタンダードになりつつあるけど、
やっぱりHaskellならDeclarativeにやりたい。
0135デフォルトの名無しさん
NGNGhttp://www.sampou.org/cgi-bin/cahier.cgi
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNGくやったと思うよ。
「わたしはもうループも書けなくなってしまって……」というのにワロタ。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG「Hello, worldもブラックボックス斬り」されてました。
0143デフォルトの名無しさん
NGNG関数型の haskellだ
短くて 簡潔で 理解しやすいコードを書けるぜ
って、言うじゃない
だけど
難しくて monad が理解できませんから
残念!
「Hello worldさえブラックボックス」
斬り
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNGで済むから、コード自体は特に難しくは見えない。
ただ、入門者が Hello, World に到達するまでの過程が難しいんだよね……。
0146デフォルトの名無しさん
NGNGそのdoはいるの?
0147145
NGNGとだけ思ったのです。
main = do str <- getLine
putStr str
みたいに。
0148デフォルトの名無しさん
NGNGfact→fib→qsortあたりから入れば
得体の知れないモナドをとりあえず回避できる。
0149デフォルトの名無しさん
NGNGがんばってもせいぜい二分木
0150デフォルトの名無しさん
NGNG"Hindley-Milner" って、何て読むんでつか?
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNGメール出して聞いたら?
ttp://www-maths.swan.ac.uk/staff/jrh/ J. Roger Hindley
ttp://www.cl.cam.ac.uk/~rm135/ Robin Milner
0157デフォルトの名無しさん
NGNGもちつけ
0158デフォルトの名無しさん
NGNGそりゃ当然、Cにする前にプログラム変換するだろ
それに大抵のCCには-foptimize-sibling-callsみたいなのがあるだろうし
0159デフォルトの名無しさん
NGNGユーザーレベルで言語をマスターするっつーのは、ある処理系を骨までしゃぶり
尽くすことだろ。リスパーのように自作こそ最強だが、複雑な言語ではそこまでは
まあ、なかなか出来るもんでもないしな。
GHCのことについて詳しい奴がいないのを見ると、誰もHaskellでまともに
プログラム書こうとしてないように見える。結局おまいらは、話のネタに
関数型言語を選んでるだけなんだよ。
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGAranskはいちゃもん言うだけでプログラムすら書かんだろ?
0163デフォルトの名無しさん
NGNGサンプルプログラムのBouncingBalls.hsでセグメンテーションフォールトが
起きます。(http://wxhaskell.sourceforge.net/quickstart.html)
プログラムを起動し、'p'などのアルファベットを入力することで生じます。
そこで小さなプログラムを作って試してみたのですが、
やはり同様な現象が起ります。
$ cat test.hs
import Graphics.UI.WX
main :: IO ()
main = start test
test :: IO ()
test = do f <- frame []
p <- panel f []
set f [layout := widget p]
set p [on(charKey 'a') := print "test ok"]
$ ghc -package wx test.hs -o test
$ ./test
(ここでキーボードの'a'を入力)
セグメンテーション違反です
環境
wxhaskellのバージョンは0.7
wxGTKのバージョンは2.4.2
OSはlinux
他の環境でもこのバグが再現するでしょうか。
0164デフォルトの名無しさん
NGNG特に問題発生せず
環境
wxHaskell 0.8
wxWidget 2.5.2
MacOS X 10.3
$ ghc -package wx test.hs -o test
$ /usr/local/wxhaskell/bin/macos-app -v test
できたtestをFinderからダブルクリックで起動
真っ白いパネルが出てくる
'a' 押すと「コンソール」に "test ok"
とりあえずバージョンアップしてみれば
0165デフォルトの名無しさん
NGNGどうもありがとうございます。
0166デフォルトの名無しさん
NGNGf (+) [1 2 3] [4 5 6] => [5 7 9]
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG関数はどう書くのがいいでしょう。
f n g [x11, x12, ...] [x21, x22, ...] ... [xn1, xn2, ...]
=> [(g x11 x21 ... xn1), (g x12 x22 ... xn2), ...]
みたいな。lispのmapってこんな感じですよね。あちらは
関数のarityがわかるからnは不要ですけど。
0170デフォルトの名無しさん
NGNGHaskellはよく知らんので、hogeをどうやって書くのか調べてもよく分からん。
0171デフォルトの名無しさん
NGNG何か方法あったっけ?
0172デフォルトの名無しさん
NGNGzipWith (+) [1, 2, 3] [4, 5, 6]
0173デフォルトの名無しさん
NGNG別に可変個の引数は必要ない。
1引数の関数のリストと引数のリストを受け取って適用して返す演算子をつくればOK。
演算子をxとすると
[f, f, f] x [x11, x12, x13] x [x21, x22, x23]
とか。Haskellの細かい文法知らんのでこう書けるかどうかは知らないけど。
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNGこんなもんでどうでしょうか。
0176デフォルトの名無しさん
NGNG[a->b]->[a]->[b]かな?
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG[5,7,9]
ナルホド。
0179デフォルトの名無しさん
NGNGそれとも( )じゃワケがわからないから($)と書けるように
目に見える演算子として用意されているだけ?
0180デフォルトの名無しさん
NGNG0181145
NGNG>>179 何も代わらない。関数適用のための演算子だから。
本来の利用法は >>178 みたいなものなのかな(個々の要素にそれぞれ適用する
ためには、関数適用の演算子があると便利)。
f $ g x と書くと、演算子の優先度の関係上 f(g x) と同じことになるので便
利、ついでに結合性の関係で f $ g $ h x とか書ける、というのが個人的に
は嬉しい。カッコの省略にも使える。
関数合成はあくまで関数の合成の演算子なので、 f . g . h x とは書けない。
(f . g . h) x なら書けるけど。
0182デフォルトの名無しさん
NGNGFunctional Pearl "Do we need dependent types?"
Daniel Fridlender and Mia Indrika, 2000 J. Functional Programming,
vol. 10, July.
ttp://www.cs.chalmers.se/~indrika/publication.html
に載っているので興味があるひとは読んでみるべし。
0183デフォルトの名無しさん
NGNG> 只の関数適用(f x)と(f $ x)って何か違うところあるの?
ある。$はただの関数だから、引数の型がそこで固定される。
f :: a -> (forall b. b -> b) -> a
f x g = g x
とすると、f 0 id はOKだが、f 0 $ id はだめ。
ST Monadなんかをつかっていると結構引っかかる。
0184デフォルトの名無しさん
NGNGinfixl 2 <$>
infixl 1 <->
(<$>) = map
(<->) = zipWith ($)
-- 例
-- (\x y z -> x + y + z) <$> [3,4] <-> [5,6] <-> [7,8]
----------------------------
-- 可変引数
ncat :: NCat b => b
ncat = ncat' id
class NCat a where
ncat' :: (String -> String) -> a
instance NCat String where
ncat' f = f ""
instance NCat b => NCat (Char -> b) where
ncat' f x = ncat' (f . (x:))
-- 例
-- ncat 'a' 'b' 'c'
# >>183の171は179の間違い。
0185デフォルトの名無しさん
NGNG型指定が要った。
ncat 'a' 'b' 'c' :: String
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG「そのうち出る」 = 「そのうち出版される」という意味か。
「テキストの候補に挙がる」ではなく。
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG近刊とあってまだ出てないようだ。
ttp://www.kyoto-su.ac.jp/~hxm/hxm.cc/research.ja.html
0193デフォルトの名無しさん
NGNG(length (hoge xx yy zz)) < 3
とかで困る。かも。
0194デフォルトの名無しさん
NGNG> 末尾再起すると、遅延評価されないですね。
そんなことはない。
> (length (hoge xx yy zz)) < 3
> とかで困る。かも。
lengthがstrictだからhogeがlazyでも意味がないとはいえるが、
末尾再帰とは無関係なので、意味がわからない。
なにを誤解してるのですか?
0195デフォルトの名無しさん
NGNG『末尾再帰の最適化』をすると遅延評価できない(或いはその逆)、のことを言いたいのかな。
それだったら解る。
あ、でも例 (length (hoge xx yy zz)) < 3 の意味はやっぱりわからない。
0196デフォルトの名無しさん
NGNG> 『末尾再帰の最適化』をすると遅延評価できない(或いはその逆)、のことを言いたいのかな。
詳しく説明きぼんぬ。
gotoでジャンプするコードにするとサンクが作れないのかな?
0197デフォルトの名無しさん
NGNGtake n 末尾再帰関数(無限リスト)
みたいなのが出来ないということでは?
0198197
NGNGtake n (末尾再帰関数 無限リスト ・・)
です。
0199193(初心者)
NGNG>197さんの言うとおりです。
例は適当にかいたらだめでした。
0200デフォルトの名無しさん
NGNGなにができないと?
take' 0 xs = xs
take' n (x:xs) = take' (n - 1) xs
take n (take' 10 [0..])
0201197
NGNG返値も無限リストの場合です。
nub0 :: Eq a => [a] -> [a]
nub0 = nub0' []
nub0' l [] = l
nub0' l (x:xs)
| elem x l = nub0' l xs
| otherwise = nub0' (x:l) xs
take 10 (nub0 [1..])
0202デフォルトの名無しさん
NGNGnub0 [1..]自体がbottom(無限リストではない)なんだから
末尾再帰も糞もないですよ。
nub0' :: [Int] -> Int
nub0' = foldr (+) 0
だって同じこと。
0203197
NGNGnub0 を末尾再帰で定義したから、nub0 [1..] が
bottomになったわけで、Hugsでの定義の
nub l = nub' l [] where
nub' [] _ = []
nub' (x:xs) ls
| x `elem` ls = nub' xs ls
| otherwise = x : nub' xs (x:ls)
のようにすれば nub [1..] は無限リストになる、という意味です。
0204デフォルトの名無しさん
NGNG関数型言語のキモは副作用とのコラボレーションなんだし
0206デフォルトの名無しさん
NGNGモナドは数学上はモノイドといって単位元を持つ半群のこと。
一応簡単な説明。
(X * X ) * X = X * ( X * X ) といった「結合側」が成り立つ演算*があって
(E * X ) = ( X * E ) = X となる単位元Eを持つようなXのこと。
X が整数だとすれば * は足し算 E は 0
もちろん * を掛け算 E は 1としてもいい。
* を文字列の結合 , Eを空文字列 "" とすれば文字列もモノイドとみなせる。
で、HaskellのIO型には
上の文字列モナド(モノイド)の1文字づつの代わりにOSのシステムコール呼び出しの機械語が
入っていると思えばいい。
IOモナドA( [キー入力] ) >> IOモナドB( [画面出力] ) を適用すると
IOモナドC( [キー入力]の次に[画面出力] ) になる
みたいな。
で どんどん >> や >>=で繋いでいくわけ。
もちろん結合則も成り立つ。
ちなみにreturn 関数が返すIO型が単位元になってる。
これはreturnの返すIOには何もシステムコール?が含まれてないから
上の文字列モナドの空文字列みたいな感じ
これで宜しいでしょうか>>204
0207デフォルトの名無しさん
NGNGMonoidだと思って話すなら:
結合法則: (a * b) * c = a * (b * c) を満たす演算*が定義されていて、
単位元 e (e * a = a * e = a をみたす) を持つような集合を
Monoid(以下、単に半群という)といいます。
例えば"行列"や"微分方程式の解作用素"は半群になっています。
*** Point(1): a * b /= b * a。順序は変えられない
この半群の集合への作用(注1)の仕方を定めたものがMonadです。
return == e で、あとは * にあたるものが >>= となります。
そういうと、return :: a -> M a (M "a" なのは単位元だから) なんだから、
>>= :: (s -> M t) -> (t -> M u) -> (s -> M u)
じゃないのかと思うかも知れませんが、
>>= :: M t -> (t -> M u) -> M u
でもいいのです。
というのは、(c * d)' x = c' (d' x)なので、*を決めることと、
M sの任意の元(d' x 等)をどこにうつすかを決めることは同じことだからです。
続く。
0208207
NGNG*** Point(2): x /= y ならば a' x と a' y は等しくなくてもよい
さて、例えばIOモナドなら、putStr :: String -> IO ()
は上のaやらbやらにあたります。ではgetLine :: IO Stringはというと、
元を一つしか持たない集合をUとしてgetLine :: U -> IO String の省略記法
なのです。元が一つしかないのだから、わざわざU->を考える必要はありません。
Point(1)、(2)がIOの、順序を変えられない、毎回違う答えが帰るかもしれない
という性質を満足させてくれます。
main = getLine >>= putStr は、(putStr * getLine) と同じもので、
実行するのは putStr' (getLine' world) を計算することです。
getLineが毎回異なる文字列をputStrに>>=で与えても、それはworld
が違ったからだと思えばなにも問題はありません。
*1 (作用)
行列をベクトルにかけるとベクトルができますが、これと同じように、
半群(M)の元(a, b, ..)をある集合(S)の上の関数とみなすことができます。
好き勝手に関数とみなすのではなく、次の性質をみたすとき、
半群MがSに作用している、ということにします。関数とみなすときには'をつけます。
(a * b)' x = a' (b' x) (x は S の元)
# monoidとmonad (triple)はどちらも数学の概念で、似ていますが別物です。
0209デフォルトの名無しさん
NGNGの()の意味はなんだ?
単に型が合うかどうかか?演算の時間的な順番か?
0210デフォルトの名無しさん
NGNG演算の順序。
代数の本を読めばどしょっぱなに書いてあるよ。
0211デフォルトの名無しさん
NGNG最初に出力してくれるのかい?
0212デフォルトの名無しさん
NGNGCで {{f(); g();} h();} と {f(); {g(); h();}} が同じ結果になる
みたいなものだ。
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGモノイドの説明だとしたら、その式はそうとしか言えないのでは。整数上の加
算について考えると、
(1+2)+3 = 1+(2+3)
が結合則。
1+0 = 0+1 = 1
が単位元の性質ということ。数学の話だよ。
モナドだとすれば、 >>207-208 じゃないのか。
(f * (g * h)) x = ((f * g) * h) x = f(g(h(x)))
という風に理解したんだがこれは当ってる?
Haskell の記法を使えば、
x >>= (\x -> x >>= h >>= g) >>= f = x >>= h >>= (\x -> x >>= g >>= f)
かな?
モナドというのは、「評価の順序を保証するもの」という風に考えているんだ
が、その事を「結合則は成立するが、交換則は成立していない」という事で表
現しているということなのでは。
副作用の話は 208 の方に書いてあると思うんだが、こっちはよくわからない……。
0215デフォルトの名無しさん
NGNG> 「結合則は成立するが、交換則は成立していない」
「交換則は必ずしも成立するわけではない」のほうが適当では?
0216デフォルトの名無しさん
NGNGどういう風に括弧をつけても関数Xの適用順序は
左から右、右から左と一定であるって意味でいいの?
0217デフォルトの名無しさん
NGNGああその通りですね。失礼しました。
>>213=216
まあその通りといえばその通りではないかと思います。
*を関数の合成みたいな演算だと考えればよいのでは。
0218デフォルトの名無しさん
NGNG> *** Point(2): x /= y ならば a' x と a' y は等しくなくてもよい
はわかるとして、 GetLine :: U -> IO String であり、 U が一点集合なのだ
としたら、これは x = y である(にもかかわらず a' x /= a' y になりうる)
例のように読めてしまったのですが、どこで間違えているんでしょうか?
getLine' world というのは、常に world が与えられるが、 world が毎回異
なるので返り値が異なることがあるっていうこと? でもそれって一点集合な
んでしょうか?
0219デフォルトの名無しさん
NGNG*** Point(1): a * b /= b * a。順序は変えられない
*** Point(2): x /= y ならば a' x と a' y は等しくなくてもよい
Point(1)、(2)がIOの、順序を変えられない、毎回違う答えが帰るかもしれない
という性質を満足させてくれます。
っていうのは普通の関数とどこが違うの?
普通の関数でもそういうのあるんだから、
モナドとかいわずに普通の関数と一緒に扱えばいいじゃない。
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG小学校でやる一般的な算数にある?
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGperl -e '$op="-"; print eval "(4 $op 3) $op 2"'
これ、答えが違っちゃうけど、、なんか間違ってます?
0225デフォルトの名無しさん
NGNG> っていうのは普通の関数とどこが違うの?
> 普通の関数でもそういうのあるんだから、
どこの世界の関数だそれは(w
0226デフォルトの名無しさん
NGNGx /= y ならば a' x と a' y は等しくないんちゃう?
0227デフォルトの名無しさん
NGNG> この半群の集合への作用(注1)の仕方を定めたものがMonadです。
0228デフォルトの名無しさん
NGNG逆で、関数でそういう性質が成り立って、文字列の連結や状態遷移でもそういう性質が成り立つからそれらを抽象化してモナドにしたってこと。
連結リストや配列リストの性質を抽象化してリストとして扱うようなのと同じ。
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNGx = y で a' x = a' y でなくても構わないっていうのは数学的にはおかしい
気がしますが。
プログラム的には副作用が起きているなら成立すると思いますが、その副作用
を上手く扱うのがモナドなんじゃないの?
0231デフォルトの名無しさん
NGNG処理系はエラーを出さず理論的にもきちんとまとめられるってことか?
0233デフォルトの名無しさん
NGNG普通の関数だと、たとえば
f(g(x), h(y))
がどの順番で評価されるかは不定。でも、モナドを使えば、その順序を確定さ
せることができる。
……副作用とかいう話じゃなくて、順序を確定させることが重要なのかなあ。
順序が確定的だから、副作用が起きるコードでもOKみたいな感じ?
0234デフォルトの名無しさん
NGNGa * bだったらaやbがモナド?それとも*がモナド?
0235207
NGNG順序と、引数返り値に直接アクセスできないところが味噌です。
type IO a = world -> (a, world)
なら、main world0 = let (s, world1) = getStr world0 in print s world0
とかやってしまえないようになるところ。
>>234
a, bと*の組みです。
行列群が、行列と行列のかけ算の両方がないと考えられないのと同様に。
0236デフォルトの名無しさん
NGNG*は各式の関係を表す演算子
0237207
NGNGモナドは雰囲気はモノイドなんですがやっぱりモノイドとは
みなせそうにないので、これも嘘です。
> この半群の集合への作用(注1)の仕方を定めたものがMonadです。
予想と違って、正しいかもしれないものだと素直に読んだ方が
多かったようで、申し訳ないです。
0238デフォルトの名無しさん
NGNGIOのような実行の順序が重要な意味をもつ関数を(順序不定で)合成しても
合成された関数は一意的な順序でIOが実行される関数になるということか?
順序を保つ合成が結合法則を満たすのは分かったが、
結合法則を満たす合成は全て実行の順序を保つでいいのか?
0239デフォルトの名無しさん
NGNG順序不定には合成できないから、明示的に順序をつけることを強制できる。
putStr (getLine, [getChar])
でなく
getLine >>= (\s -> getChar >>= (\c -> putStr (s, [c])))
か
getChar >>= (\c -> getLine >>= (\s -> putStr (s, [c])))
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGhoge getLine getCharから
getLine >>= (\s -> getChar >>= (\c -> putStr (s, [c])))と
同じ動作を定義できるのか?
0242デフォルトの名無しさん
NGNGこれは成り立たないと思う。
モナドの結合法則の概念と順序は本来関係ないんじゃないかな。
たまたま順序を組み立てるのにモナドが使えるってだけだと思う。
http://www.sampou.org/haskell/a-a-monads/html/introII.html
↑のListモナドとかは
順序とは関係なさそうだし。(関数から複数の遅延込みの非正格値を返すためのもの?)
モナドの用途は順序の決定のみにあらずってとこか。
0243デフォルトの名無しさん
NGNGhoge :: IO String -> IO Char -> IO ()
hoge f g = f >>= \s -> g >>= \c -> putStr (s, [c])
getLine :: String、getChar :: Char だったら無理。
0244デフォルトの名無しさん
NGNG> List モナドは非決定性をもつ計算の連鎖を、演算をそれぞれのステップで可能なすべての値に適用することで、合成する戦略を内包しています。
だけなら、モナドでなくてもいいね。
------------
module MList where
data MList a = a :*: (MList a) | MNull deriving (Eq, Show)
infixr 3 :*:
instance {- Broken -} Monad MList where
(x :*: xs) >>= f = merge (f x) (xs >>= f)
where
merge (x :*: xs) ys = x :*: merge ys xs
merge MNull ys = ys
MNull >>= f = MNull
return x = x :*: MNull
fail s = MNull
toMList xs = foldr (:*:) MNull xs
(>=>) = (>>=) -- 2ch : ">> が多すぎます!"
(>=>) :: Monad m => m a -> (a -> m b) -> m b
test f = test1 f == test2 f
test1 f = f [1,2] >=> \x -> f [3, 4] >=> \y -> f [5, 6]
test2 f = (f [1,2] >=> \x -> f [3, 4]) >=> \y -> f [5, 6]
0245デフォルトの名無しさん
NGNGモナドが「暗黙の引数world」と「関数のeagerな評価」を意味するだけなら,結合法則はなくてもよい。
0246デフォルトの名無しさん
NGNG話の流れから多少それるのかもしれませんが、
IOモナドの僕のとらえかたは以下のような感じです。
putStrはStringを引数としてとり、
「その文字列を表示する動作」を返す関数。
であり、putStr "Hello " >> putStr "World"
とした場合、putStr "Hello "とputStr "World"のそれぞれが評価される
順番は問題ではない。
putStr "Hello "が評価された時点では、
"Hello "は出力されずに、「"Hello "を出力する動作」が
決定するだけである。
そして、putStr "Hello " >> putStr "World"は、
"Hello "を出力した後に"World"を出力する動作として評価される。
この時点では何の出力も生じない。
この動作は、main = ...というように、mainに代入されることにより、
評価器とは切り離された装置によって出力に変えられる。
つまり、putStr "Hello " >> (putStr "World" >> putStr "\n")
とした場合、putStr "World >> putStr "\n"の部分が先に評価されて、
「"World"を出力した後に、"\n"を出力する動作」となり、
その後に、putStr "Hello "と結び付けられて、
「"Hello "を出力した後に「"World"を出力した後に"\n"を出力」する動作」
となる。
これは、
「「"Hello "を出力した後に"World"を出力」した後に"\n"を出力する動作」
と等しい。
0247デフォルトの名無しさん
NGNGありがとう、やっとすっきりした。
つまり継続を渡しているわけね。
0248デフォルトの名無しさん
NGNG> であり、putStr "Hello " >> putStr "World"
> とした場合、putStr "Hello "とputStr "World"のそれぞれが評価される
> 順番は問題ではない。
順番は問題。これは左から評価しないと(されるように>>が定義されてないと)、
putStr "Hello ">> error "Error." 等が正しくうごかない。
> この動作は、main = ...というように、mainに代入されることにより、
> 評価器とは切り離された装置によって出力に変えられる。
上とも関連して、出力しながら内部の式を評価するわけで、
評価し終わったものを実行するのでは「ない」のだから、
main world を評価すると考えるほうがいいのでは。
上で自分でもただStateモナドのようにかいてしまったけれど、
IO a = World -> (a, World) {- ただしStrict -} と思うことにして。
(正則性と関連して実はIOはモナドの結合法則を満たしていなかったような)
> つまり、putStr "Hello " >> (putStr "World" >> putStr "\n")
> とした場合、putStr "World >> putStr "\n"の部分が先に評価されて、
ここも左から評価される。
あとは大体OKと思う。
0249デフォルトの名無しさん
NGNG>順番は問題。
>>256は
> putStrはStringを引数としてとり、
>「その文字列を表示する動作」を返す関数。
という前提だからいいんじゃないの?
0250デフォルトの名無しさん
NGNGputStr "Hello " >> error "Error."
の右辺を先に評価したら"Hello"が表示される前にerrorで終わってしまうでしょ。
正格性解析かなにかで>>の左辺と右辺が
Strictにしかも_|_にならずに評価できると知っていたら
何かの気まぐれで右辺から評価するかもしれないけど、基本は左から。
ちなみに右から(Lazyに)評価したら末尾再帰も無意味になるし無限ループも書けない。
0251デフォルトの名無しさん
NGNGどういう意味だ?
0252246
NGNGputStr "Hello " >> putStr "World"は、
"Hello "を出力する動作の後に、"World"を出力する動作を続けた動作と解釈される。
と言いかえるべきなのかな。
(1+3) : []を、(4ではなく)1+3を空のリストに加えたものと解釈される。
というのと同じで、この1+3が4になるのはmainに関連づけられたとき
(とhugsなどで、返り値の表示を求められたとき)のみである。
つまり、putStr "Hello " >> putStr "World"が左から評価されるのは、
print ((1+2):(2+3):[])が左から評価されるのと同様、
値が必要になった時点で評価されるという、遅延評価の性質から理解できる。
print ((1+2):(2+3):[])でまず1+2が、つぎに2+3が評価されるのは、
(:)に左から順に評価するという性質があるのではなく、
必要とされるのが1+2のほうが先であるというためである。
これは、print $ reverse ((1+2):error "foo":(2+3):[])の出力が[5,となる点からも確認できる。
それと同様にputStr "Hello " >> putStr "World"が左から評価されるのは、
まずputStr "Hello "がプログラムの実行に必要とされ、その後にputStr "World"が必要とされるためであり、
(>>)が左から評価されるといった性質を持っている必要はない。
(しかし、(>>)の右側が左側よりも先に必要とされるという状況は考えられないので(>>)が左から評価される性質を持つというのは
そんなに間違いではないかもしれない。)
putStr "Hello " >> error "Error."がうまく評価されるのも同様で、
"Hello "の出力の際にはerror "Error."を評価する必要がないためである。
現時点での僕の解釈ですので、間違いもあると思います。
Haskellに積まれた概念は非常に興味深いので、
今後も熟考していこうと思っています。
0253デフォルトの名無しさん
NGNGモナドの表示的意味は言語仕様に書いてないのか?
[| >> |]ρσ = ...?
0254デフォルトの名無しさん
NGNGいったいどういう原理によって
> まずputStr "Hello "がプログラムの実行に必要とされ、その後にputStr "World"が必要とされるためであり、
こうなってると思ってるわけですか?
mainや(>>)は関数じゃなくてなにかすごく賢い"評価器とは切り離された装置"
が何が必要かを見切って必要なところだけ評価するという立場?
それならそれでもいいですが…
私は、State(World)についてStrictなMonadだと思えば、
なぜ(>>)の左が先に必要になったのかが、説明できると書いたわけです。
0255デフォルトの名無しさん
NGNGまず、mainだけ特殊な評価をうけるとは考えないことにします。
右から評価されると無限ループも書けないというのは、
main = loop where loop = act >> loop
act = print "x"
ここでloopの右辺を先に評価したらact >> (act >> (act >> ..))と
ネストした列ができるだけでloopの処理が進まないという意味です。
末尾再帰も同様のことになります。
先に述べたように、特殊な評価装置や特殊ルールは考えないので、これは、
(>>)がそういう順序に評価を導くように定義されているということを意味します。
単にmainそのものを評価しても、(\_ -> ...)の形か、
(コンストラクタ) ...の形になって...の部分は評価されずに終わります。
これでは...の中に書いてあるIOアクションの列をどう評価、
実行していけばいいかはわかりません。
そこで、mainは関数であって(type IO a = World -> (a, World)、
プログラムの実行とはmain worldを評価する、つまりmain worldの
返り値を求める評価を行うことだと考えることにします。
例えば(putStr "X") worldを評価すると、
"X"が出力されたWorldを返します("X"が出力される)。
0256デフォルトの名無しさん
NGNGいいので、まず返り値に必要な部分から計算されます。
したがって、遅延評価ならば、a >> bにおいてworldに最後に関与する
「外側」にある"b"のほうから評価が行われるはずだということになります。
これが「右から(Lazyに)」の意味です。
ちろんこれではループも書けないのでIOモナドとしては使えません。
しかし、WorldについてStrictなモナドだとすれば、
左から評価されるようになります。
-- typeではモナドの定義がHaskell98では書けない。
newtype IO a = IO { runIO :: World -> (a, World) }
instance Monad IO where
ioact >>= f = IO $ \world -> world `seq`
let (a, world') = runIO ioact world
in runIO (f a) $! world'
もしよくわからなければ、Control.Monad.Stateのlazyなstateモナドで
loopや末尾再帰のプログラムを書いて挙動を観察してみてください。
0257デフォルトの名無しさん
NGNGhttp://www.haskell.org/definition/haskell98-report.pdf
0258デフォルトの名無しさん
NGNG基づいてないと?
IOの話なら、規格の性質を満たすIOはいかにして定義され得るか
ということを議論しているつもりなんだけど…
0259もなど初心者
NGNGデバッグ辛くないですか?
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNGThe >>= operation passes the result of the first operation as an argument to the second operation.
ということなので,f >>= gに対して,fの中で起こる副作用がgの中で起こる副作用より先に起こる
ようにするには,
(1) >>=は,左辺の引数についてstrict
(2) g(正確にはgの中での副作用の呼び出し)がstrict
のどちらでもよい(ように思える).
0262デフォルトの名無しさん
NGNG> どちらの方法でもIOモナドの外部仕様を満たせるんじゃない?
だれが(1)を主張しているの?
> (1) >>=は,左辺の引数についてstrict
f >>= g のfが先に評価されるだけで、actionの実行とは関係ない。
例えば、f >> (g >> (h >> ..)) の無限列ができるだけでactionが実行されない
こともあり得る。
> (2) g(正確にはgの中での副作用の呼び出し)がstrict
なにがいいたいのかよくわからない。
Monadの話をしているのだから>>=の性質について話さないと。
>>255-256理論のことなのかな(そうは読めないけれど)。
それから、IOモナドはこれ
> Special operations (methods in the class Monad, see Section 6.3.6)
> sequentially compose actions,
> corresponding to sequencing operators (such as the semicolon) in imperative languages.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
を要求してるからf >>= gのfが先に評価されるのであって、
>>261の部分からはそうなるとは限らないことに注意。(cf. LazyなStateモナド)
0263デフォルトの名無しさん
NGNGMLのように表示意味論(操作意味論でもいいけど)でformalに定義
されてるんじゃないの?
色々と仕様の背後にある意図を考えるのもいいけど、まずちゃんとした定義
を出してくれると素人には有難いなあ。言葉の定義も人によって違うみたいだし。
ちなみに
fがstrict <=> f(_|_) = _|_
lazy evaluation <=> λ計算でいうところのnormal reduction
ということでいいの?
0264デフォルトの名無しさん
NGNG> MLのように表示意味論(操作意味論でもいいけど)でformalに定義
IOはどうなんだろ?
http://citeseer.ist.psu.edu/peytonjones93imperative.html
# 個人的にはHaskellのコミュニティはそういう文化じゃないと思ってる。
# formalなsemanticsがどうとかで論文書くんじゃなくて、
# 新しい便利なアイディアをどんどん導入して実際に使う。
# informalなsemanticsだけど気にしない、みたいなことがよく書いてあるきがする。
#
# そういうことに興味がないことによる偏見かもしれない。
ググッたらちょっと古い(1996)けどこんなのも
http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/section3_7.html
> No formal semantics for these I/O primitives is possible at present,
> because there is no complete formal semantics for Haskell itself.
formalでないと理解した気がしないなら、
Concurrent Haskell (Simon PJ他)の論文でIOのsemanticsは誰かの論文を参照、
みたいなことが書いてあった気がするから、探してみたら。
> fがstrict <=> f(_|_) = _|_
> lazy evaluation <=> λ計算でいうところのnormal reduction
いいんじゃない。ちなみにdataコンストラクタはlifted。
0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG等しくはないね。
でもλ計算でいうところのnormal-order reductionをするわけでしょう?
0267デフォルトの名無しさん
NGNGSimon Peyton Jones, Andrew Gordon and Sigbjorn Finne. Concurrent Haskell, POPL, 1996.
をざっと見たところ、その辺の詳しい話は
Roy L. Crole and Andrew D. Gordon.
A Sound Metalogical Semantics for Input/Output Effects, CSL, 1994.
Andrew D. Gordon.
Functional Programming and Input/Output, Cambridge University Press, 1994.
を参照と書いてあった。暇なときにみてみよう。
ちなみに"Concurrent Haskell"の論文も結構面白い。IOの話については
下のような記述があった。ご参考…といってもここの人には常識か。
The sequencing combinators, >> and >>=, feed the result state
of their left hand argument to the input of their right hand
argument, thereby forcing the two actions (via the data
dependency) to be performed in the correct order.
...
In principle, then, a program is just a state transformer
that is applied to the real world to give a new world.
In practice, however, it is crucial that the side-effects
the program specifies are performed incrementally, and
not all at once when the program finishes. A state-transformer
semantics for I/O is therefore, alas, unsatisfactory, and
becomes untenable when concurrency is introduced, a matter to
which we return in Section 6.
0268Haskell???なにそれ?食えるの?
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1092932484/494-
おい。
Rubyにケチ付けてるこの馬鹿引き取ってくれよ。
0269デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGnormal reduction = leftmost reduction = lazy reduction
じゃなかったっけ
0272デフォルトの名無しさん
NGNGlazy evaluation と call-by-need が対応して
normal-order reduction というと call-by-name が対応するといいたいんじゃない?
0273デフォルトの名無しさん
NGNG> なにかすごく賢い"評価器とは切り離された装置"
が必要性を判断してくれると仮定しなければ、
print $ [3, 1+2, 4] !! 0
で1+2が評価されない理由は説明できないと思う。
具体的にはその装置はHaskellの一部であって、
Haskellプログラムの内側では議論できない実装に近い部分の話になって
くるんじゃないかな。
>>255,>>256のような議論は有意義だと思うが、
上述したような「装置」によって、(:)と(>>)を同列に扱えるのであり、
(:)にその「装置」が必要とされている以上、
(>>)に他の特別な理論をあてはめるよりは、
必要に応じて評価される。という
lazy evaluationの原則を単純にあてはめればすむのではないかと思う。
ちなみに、
IOというものは[](リスト)と同様にそこにある何かであり、
たとえばputStrLn "Hello"が実行されると"Hello"を出力するのは、
[1,2,3]が(!!1)で2を返すのと同様にとらえられるのではないだろうか。
IOは評価時点では出力されずに、実行という次のステップで出力が生じる。
これは、
main = putStr "Hello " `seq` putStrLn "World"
での出力が
World
であるという点からも理解されるのではないだろうか。
HaskellのIOでは評価と実行は切り離されている。ということに今日気付いた。
0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNG> print $ [3,1+2,4] !! 0
あたりのことを言われてるのかな?
Haskellにおいて、評価は印字などの動作によってしか引き起されない。
だから、とりあえず単純な印字の例を挙げただけ。
べつに
print $ replicate ([3,1+2,4]!!0) "foo"
のような例でもかまわない。
(当然この場合も1+2は評価されない。)
Haskellでは、IOに関連づけられなければ、式が評価されることはない。
対話的環境でも暗黙のprintがなされていると考えられると思う。
(ちなみに、対話的環境では返り値がIOならばそれの実行を、
それ以外だったらprintをするようになっているのだと思う。)
当然、print $ [3,1+2,4]!!0で、
1+2が印字されないことをもって、評価されないと言っているわけではない。
print $ [3,error "foo", 4] !! 0
で、エラーが生じないというのと同じことを言ったつもりである。
もしかしたら、もっと根本的な誤りを突いているのかもしれない。
そうだったらもう少し詳しい説明をよろしくおねがいします。
0276デフォルトの名無しさん
NGNGを読んで分かった…
君はlazy evaluationがそもそも分かってないんだorz
lazy evaluationが、「必要」に応じて評価されるのは、
> > なにかすごく賢い"評価器とは切り離された装置"
> が必要性を判断してくれると仮定しなければ、
こういうのがなにかが必要性を判断するわけじゃないよ。
単にoutermost leftmost reductionをしてるだけ。
質問に答えて欲しい。
(0) [3, 1+2, 4] !! 0 と length [0..] > 0 の評価はそれぞれどう進む?
(1) seqの初心者が陥りやすい誤解について説明せよ
(2) Stateモナドは自分で書ける? (Yes/No)
(3) その評価の順序が分かる? (Yes/No)
(4) (Lazy)Stateモナドで無限loopが書けないのはわかってる? (Yes/No)
> IOというものは[](リスト)と同様にそこにある何かであり、
リストモナドも自分で定義できるし…
0277デフォルトの名無しさん
NGNG> 対話的環境でも暗黙のprintがなされていると考えられると思う。
それってLispでいうrea-eval-print loopなんじゃないの?
0278haskell初心者
NGNGhaskellでn個の中から、m個を取り出す組み合わせの数、mCnのプログラムの書き方がわかりません。
だれか教えてください。お願いします。
0279デフォルトの名無しさん
NGNGせめて自分でどこまでやったか書け。
0280haskell初心者
NGNG漸化式で作るところまでは考えたのですが、C++と違ってfor文が使えないので、
自分ではどうしたらよいかわからなくなってしまいました。
0281デフォルトの名無しさん
NGNGたら適切な引数を与えて割ればいいよね。
解2: mCn = .. + .. といった形で書ける。 .. と .. はどちらもコンビネー
ションだけど、 m と n の部分が少し小さい。で、m や n が 0 とか 1
だったらどうなるか、というのを考える。そしたら再帰で書けるよな。
という2つの考え方があるよ。
0282haskell初心者
NGNGありがとうございました。
0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNGそのレベルの学生が再帰プログラムに不慣れなことにも驚き(失礼!)。
0285デフォルトの名無しさん
NGNG工学部計数工学科(武市先生のいるとこ)ではHaskellをやる(人もいる)。
それにしても「関数型プログラムは理解し易くて初心者向き」なんじゃないのか...
0286デフォルトの名無しさん
NGNGhttp://www.teu.ac.jp/kougi/koshida/Prog6/index.html
と思ったけど課題内容が違うから違うのかな。
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNG呼んだ?
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNGc = flip ((length .) . filter . (. length . filter id) . (==)) .
(foldl ((=<<) . (. (return .) . (:)) . (>>=) ) [[]]) . (flip replicate [True, False])
0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNGhugsで動かしてみたら問題なく動いたのですが、ghcでコンパイルして実行すると、
プロンプト "$ " が表示されず、適当にキー入力したあと ":!" でループを抜けると、
入力した個数分のプロンプト "$ " がずらずらと表示されてしまいます。
ちなみに、ghciではhugsと同様に期待通りの動作です。
いったいどうすればghcでも期待通りの動作になるんでしょう?
main = do {
putStr "$ ";
str <- getLine;
case str of {
":!" -> return ();
_ -> main } }
ghcはver 6.2.2と6.2.1で試してみましたがどちらも同じ結果でした。
0293デフォルトの名無しさん
NGNG>>290 の導出過程希望。
まさか直接書いたの?
0294292
NGNGputStrのあとに hFlush stdout を入れてやったらうまくいきました。
でも最初は実行順序が狂ってるのかと思ってしまいました。
0295デフォルトの名無しさん
NGNGghcはターミナルではLineBufferingだから一行たまるまで出力されない。
hSetBuffering stdout NoBufferingを最初に書いてもいい。
>>291
>>293
手で地道にpoint-freeに書き換えました:-)
元は確か
-- not tested
c n m = length $ filter ((m ==).length.filter id) $
foldl (\ys xs -> [ x:y | x <- xs, y <- ys]) [[]]
$ replicate n [True,False]
こんな感じ。
自動化してフィルタプログラムにするとおもしろそう。
0296292
NGNGプロンプトからの入力をParsecを使ってパースしようとしてるんですが、
文法の都合上Parsecのtryを使ってる部分があります。
hFlushとかstdoutは import IO しないといけないみたいなのでやってみると
そのtryを使っているところで
ERROR ".\test.hs":15 - Ambiguous variable occurrence "try"
*** Could refer to: System.IO.Error.try Text.ParserCombinators.Parsec.Prim.try
とかいうエラーが出てしまいます。(処理系はhugsです。ghcでも似たようなエラー)
どうしたら良いんでしょう?
一応パーサの部分とstdoutが必要な部分は完全に切り離されているので
パーサ部分を別のモジュールにしてやることで回避出来ることは確かめましたけど、
それ以外の方法はあるのでしょうか?
0297デフォルトの名無しさん
NGNGimport qualified Text.ParserCombinators.Parsec as Parsec
して
Parsec.try と書くとか
import System.IO.Error ( hFlush, stdout, ... -- tryを以外だけリスト)
とか
For futher details, see section 5.3 of the Haskell 98 report.
0299デフォルトの名無しさん
NGNGおおう、そのcならまともに読めますね。
((=<<) . (. (return .) . (:)) . (>>=)) の部分はやはりlist comprehensionからの変形か。
[[Bool]]が渡っているところをfuseして、さらに読解不能なコードにできるかもw
ところで、monadの話はどうなった。
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | >>300
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0302デフォルトの名無しさん
NGNGa = "b"
b = 1
c = do
"c"
d = do
2
と書いて、dだけ、
*** Binding : d
*** Outstanding context : (Monad b, Num (b c))
と言われるのはなぜですか?
0303デフォルトの名無しさん
NGNG数値はMonadクラスのインスタンスではないから。
0304デフォルトの名無しさん
NGNGありがとうございます。
doの中からは、Monadクラスのインスタンスを返すことは出来るけど、
他のものは返せないと。
doの中から数値を返したい場合はどうしたらよいのでしょうか?
Monadクラスのインスタンス作って返すしかないってことでしょうから、
returnを使って、IOモナドを返せばいいということなのでしょうか?
IOモナドって使わなくてすむなら使わないほうがいいみたいなのですが、
数値を返す関数はdo使わなくてもかけるだろうってことなのかな?
Haskellは難しいです。頭がクラクラします。
0305デフォルトの名無しさん
NGNG> doの中から数値を返したい場合はどうしたらよいのでしょうか?
一般には無理。リスト等、中身を取り出せるモナドもある。
f :: Int
f = head $ do return 3
> 数値を返す関数はdo使わなくてもかけるだろうってことなのかな?
なんでモナドが使いたいのかわからない。
例えばどんな「数値を返す関数」にモナドを使おうと思うわけ?
0306デフォルトの名無しさん
NGNG∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´ 曲`) < モナドナ♪ドーナー♪ドーナー♪
⊂ )つ \_____________
(_⌒ヽ
)ノ `J
0307デフォルトの名無しさん
NGNG引数をとらずに数値を返す関数を書きたいということですか。
Haskellの場合、引数なしの関数は値そのものとまったく同じものになります。
C言語などでは、int some (void) { return 3 }とint some = 3は違うものですが、
Haskellではsome = 3 :: Intとなり両者の区別は存在しません。
また、doの意味を誤解しているようですね。
doというのはある種のシンタックスシュガーで、
do a
b
c
という表記は a >> b >> cというように解釈されます。
この(>>)はMonadクラスで定義された関数なので、
doをMonadクラス以外のものに適用しても意味がありませんし、
doの後に式がひとつの場合も意味がありません。
Haskellの考え方になじむまでは難しく感じると思いますが、
段階をふんで理解していけば大きな困難はないと思います。
hugsでいろいろな関数をつくって遊んでみることをおすすめします。
洋書ですが、「The Craft of Functional Programming」がおすすめです。
0308デフォルトの名無しさん
NGNG訂正
do a
b
c
0309デフォルトの名無しさん
NGNG> C言語などでは、int some (void) { return 3 }とint some = 3は違うものですが、
> Haskellではsome = 3 :: Intとなり両者の区別は存在しません。
int rand(void) に相当するものはどうなるのでしょうか?
0310デフォルトの名無しさん
NGNGHaskellでは関数は毎回同じ値がかえってこないといけないので、
そのようなものはありません。
では乱数はどうするかというと、
ramdom :: (RandomGen g) => g -> (a, g)
のように、generatorを渡して乱数を生成し、次のgeneratorを
返すことで実現します。
実際にはこのままでは使いにくいので、
randoms :: (RandomGen g) => g -> [a]
と無限リストにするか(これがお薦めです)、
C言語と同じ様に副作用によってgeneratorの状態を保存するために
モナドを用います。
# System.Randomで乱数関係の関数が定義されています。
0312304
NGNG申し訳ないのですが、考え方があまりに違うので、質問させてもらっています。
詳しく解説していただけて、非常に感謝しております。頭が下がります。
>>305
モナドを使いたくて、doを使っているわけではありません。
doを使いたくて知らないうちにモナドを使っていたようです。
>>306
doについてよく理解していないことがわかりました。
単にc言語の{}に対応した表現が出来るものだと思っておりましたが、違うのですね。
洋書は気合入れて買ってみても、
結局、挫折することは目に見えているので控えさせていただきます。
翻訳版が出るとうれしいです。
関数は同じ値を返さなくてはならないというのも面白いですねぇ。
>>311
ありがたい話しです。
モナドもよくわからない、Haskellのジェネレータもよくわからない。
とにかく、わからないことずくめなので、ゆっくり腰を据えて勉強するしかないなぁ。
Java知ってるから、C#も1日でだいたいわかるって具合には行かないですねぇ。
0313デフォルトの名無しさん
NGNGJavaとかCとかやってると、どうしても手続きに目がいってしまって最初は全然まともに組めないです。
他にも、プログラム中に時間概念が無いので時系列を作り出す必要があるという点にも馴れにくかったです。
この辺はまるで相対論よろしく時間を次元の一つとして捉えて4次元空間的を直接取り扱う感覚を覚えました、
そんな感じで、過去から未来まで全部お見通しの神様の気分でプログラムしてます。
こんな感覚になるまで、僕もかなりの期間悩みました。
乱数なんかもそうですよね、あらかじめ無限個ある全ての乱数を作って置いておくという、
Javaなんかやってると、この感覚はそう簡単にはなじめないですね。
0314デフォルトの名無しさん
NGNGimport Numeric
f :: Float -> Int -> Float
f x n = sin (pi*x*(2*n+1))
-----------------------
このプログラムがエラーになる理由を教えてください。
型が不一致といわれるのですが。
0315デフォルトの名無しさん
NGNGn が何なのか知らないが、pi は Float ではなくて?
0316デフォルトの名無しさん
NGNGpiは標準ライブラリ定義されているFloatの定数だと思います。
この関数定義自体が出来ないみたいなんですが。
0317デフォルトの名無しさん
NGNG型があわない。
f x n = sin ( pi * x * (2.0 * (fromIntegral n) + 1.0))
0318デフォルトの名無しさん
NGNG型の不一致。
(*) :: Num a => a -> a -> a
なので、例えばaがIntでは、Int -> Int -> Intとなり、
aがFloatならば、Float -> Float -> Floatとなる。
違う型同士のかけ算はできない。
この場合、fromIntegralを利用して以下のようにすればいい。
f :: Float -> Int -> Float
f x n = sin (pi*x*(2*fromIntegral n+1))
0319デフォルトの名無しさん
NGNGfromIntegralで型変換(?)しなきゃ掛け算できないんですね。
ちょっと面倒ですけど、rubyで(1/n)とやるとn>=2で0になってしまう(←これが分からず何時間もロスした^^;)
とかよりは明確でいいんですかねぇ。
0320デフォルトの名無しさん
NGNGc x t n = (4.0/pi) * exp (-pi^2*t*(2*fromIntegral n+1)^2) * sin (pi*x*(2*fromIntegral n+1)) + (c x t (n - 1))
c x t (-1) = 0
これで「c0.5 0.001 10」を評価するとスタックオーバーフローしてしまう理由を教えてください。
0321デフォルトの名無しさん
NGNGHaskellでは、先に書かれたものから順にパターンマッチが行われるため、
c x t n = ...はnに対する条件がないため、
nが-1のときもこっちが適用されてしまい、無限ループにおちいる。
c x t (-1) = 0
c x t n = ...
の順に並べれば問題は解決する。
0322デフォルトの名無しさん
NGNGここで使っている、
文字→コード ord :: Char -> Int
コード→文字 chr :: Int -> Char
という関数が定義されていないようです。
環境はwindows 2000 でhugsを使っています。
:versionと入力すると、以下のように出ます。
-- Hugs Version Nov 2003
:browse Preludeとしてみてもordという関数はないので
バージョンUPして使えなくなったということでしょうか?
0323デフォルトの名無しさん
NGNGChar> :t ord
ord :: Char -> Int
0324デフォルトの名無しさん
NGNGわざわざ Float->Int->FloatにしようとするからfromIntegralが
必要になる。
f x n = sin ( pi * x * (2 * n + 1))
だけで明示的に型を指定するのやめれば
*Main> :t f
forall a. (Floating a) => a -> a -> a
という型になるがあとは勝手にやってくれるよ。
0325デフォルトの名無しさん
NGNG0326320
NGNGありがとうございます。gnuplotでグラフを書かせるためのファイルを
出力しようと目論んでいるのですが、rubyより知的な気分ですね。
可読性はどうなんでしょう。
多少字面は見づらいけど、数学みたいに書けて
コンピュータ特有のことを考えないで済む分楽かもしれませんね。
0327デフォルトの名無しさん
NGNGなるほど。:loadしないと使えないのですね。
runhugsやGHCで使う場合というか、ファイルに書いておいて使う場合は、
(なんていったらよいのでしょう?)
import Charすればよいのですね。わかりました。
ありがとうございます。
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG関数型って言うんだけどね。」
「すごーいよく分からないけどかっこいいー」
0330デフォルトの名無しさん
NGNG関数型って言うんだけどね。」
「すごーいよく分からないけどかっこいいー。じゃあ、今晩はカレーにしようか?」
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG言語習いたてのワクワクをモ一度味わいたくて。
とりあえずKISSローダ作るのが目標です。
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNG私は CommonLisp だと思うんだけど。
0337デフォルトの名無しさん
NGNG比較対象が微妙に違っているわけだが。
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG困っています。よろしければご教授願えませんでしょうか。
3つをまとめる関数 zip3 を zip を用いて定義せよ、という問題で
zip3 :: [a] -> [b] -> [c] -> [(a,b,c)]
zip3 (x:xs) (y:ys) (z:zs) = change (zip (zip x y) z) : zip3 xs ys zs
where
change :: [((a,b),c)] -> [(a,b,c)]
change [((x,y),z)] = [(x,y,z)]
zip3 _ _ _ = []
というものを考えたものの、どこがどう悪いのか自分ではわかりません。
1週間悩んで進展なしで独力では無理なようなので、どなたかお教えいただけませんでしょうか?
0340デフォルトの名無しさん
NGNGzip3 xs ys zs = map change $ zip xs (zip ys zs)
where
change (x,(y,z)) = (x,y,z)
0341デフォルトの名無しさん
NGNG型があってない。っていうかzip使ってない。
> zip3 (x:xs) (y:ys) (z:zs) = change (zip (zip x y) z) : zip3 xs ys zs
x , y, z :: aだから zip x y とはできない。(もともとa = [b]でないかぎり)
zip3 (x:xs) (y:ys) (z:zs) = (x, y, z) : zip3 xs ys zs
と書こうとしてるわけだからこれではzipの使いようがない。
参考>>184の上半分
zip3 x y z = (,,) <$> x <-> y <-> z
0342デフォルトの名無しさん
NGNGzipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith f (x:xs) (y:ys) = (f x y) : (zipWith f xs ys)
zipWith f [] _ = []
zipWith f _ [] = []
zip :: [a] -> [b] -> [(a,b)]
zip xs ys = zipWith mkpair xs ys
where
mkpair x y = (x, y)
-}
zip3 :: [a] -> [b] -> [c] -> [(a,b,c)]
zip3 xs ys zs = zipWith mkpair xs (zip ys zs)
where
mkpair x (y, z) = (x, y, z)
0343デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNG遅くなってしまいましたが、ありがとうございます。
たいへん助かりました。
…お礼の言葉が遅くなってしまい、申し訳ありませんでした。m(__)m
0346デフォルトの名無しさん
NGNGHaskell Haskellモード 関数型言語でーす
Haskellモード Haskellモード Haskellモード Haskellモードでーす
Haskellモード うにゃ〜 うにゃにゃ lazily evalute!
関数 … カリー様 関数 … か・た・す・い・ろん
モナド >>= … わたしのシモベェ〜 モナド >>= …
Haskellモード Haskellモード Haskellモード 98モードでーす
Haskellモード Haskellモード Haskellモード Haskellモードでーす
たらい、回したくなっちゃった…
0347デフォルトの名無しさん
NGNG大丈夫?
0348デフォルトの名無しさん
NGNGhttp://www.sampou.org/cgi-bin/haskell.cgi?Everyday&l=jp
が面白い
0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNGという話ではなかったようだなスマソ
0351デフォルトの名無しさん
NGNGhttp://www.cin.ufpe.br/~haskell/vhs/
0352デフォルトの名無しさん
NGNG346の文字列を読んで、ラテン系の伴奏が聞こえてくるようだと
かなりダメ。
0353デフォルトの名無しさん
NGNG禿げワロス
カリー様(・∀・)イイ!!
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNGのとある日記を見てちょっとワラた
「むしゃくしゃしてやった.Haskell で書くつもりはなかった.今は反省している.簡潔に書けるが,知らない人には全く読めないだろうし,知っている人はもっとうまく書くかもしれない.」
0356デフォルトの名無しさん
NGNG0357Aransk
05/01/18 12:16:33ワラた。
++ "しばらくしたら…誰も読めなくなるだろう。"
0358デフォルトの名無しさん
05/01/23 14:46:59ttp://research.microsoft.com/Users/simonpj/papers/slpj-book-1987/
って既出?
0359デフォルトの名無しさん
05/01/24 10:44:32といいつつ書籍で持ってるのだがw。いい本だよねー。
0360デフォルトの名無しさん
05/01/24 10:56:090361デフォルトの名無しさん
05/01/24 18:01:20やけにでっかいから何かと思ったら、300もあるページがみんな画像……
0362デフォルトの名無しさん
05/01/25 02:46:41darcs ( ttp://abridgegame.org/darcs )
というのを、ハケーンしました。
これは、haskell で書かれているので、「haskellってなんや。」と調べる流れでここに来ました。
私が知らないだけ、haskellでかかれたアプリはいっぱいあるのかも知れませんが、
上の方に出てないみたいなので、書いてミマス。
激しくガイシュツでしたらすいません。
0363デフォルトの名無しさん
05/01/25 15:14:39http://www.haskell.org/practice.html
にいくつか載ってる。
0364デフォルトの名無しさん
05/01/25 15:17:080365デフォルトの名無しさん
05/01/25 15:25:180366デフォルトの名無しさん
05/01/25 16:01:51http://it.slashdot.org/article.pl?sid=04/11/25/0136249&tid=156&tid=218
http://lambda-the-ultimate.org/node/view/391
純粋に関数的な「パッチの適用」を,ファイルやディレクトリの読み書きからキレイに分離でき,
また,パターンマッチングと高階関数が,パッチのプリミティブの実装にとてもマッチする,とある.
詳しくはこちら.
http://osdir.com/Article2571.phtml
0367デフォルトの名無しさん
05/02/06 15:35:00超ワロタw
0368デフォルトの名無しさん
05/02/06 19:52:48元ネタキボンヌ
0369346
05/02/06 20:18:15http://that3.2ch.net/test/read.cgi/gline/1104975149/1-9
0370デフォルトの名無しさん
05/02/07 04:10:200371デフォルトの名無しさん
05/02/09 05:46:41宿題が出て難しすぎるので誰か助けて下さい。
0372デフォルトの名無しさん
05/02/09 10:53:26*(1,y) *(x,+(a,b)) -> {x->1,y->+(a,b)}
のようなプログラムを作れ、という課題が出たのですがサッパリわかりません。
どなたか教えて下さい
0373デフォルトの名無しさん
05/02/09 20:23:43もう一年やれば、理解も深まるよ。
0374デフォルトの名無しさん
05/02/09 20:27:030375デフォルトの名無しさん
05/02/09 20:42:110376デフォルトの名無しさん
05/02/09 20:59:080377デフォルトの名無しさん
05/02/09 22:14:31これ、数学板のmathematicaスレでも見たぞ
マルチすんな、消えろ
0378デフォルトの名無しさん
05/02/09 23:27:110379デフォルトの名無しさん
05/02/09 23:49:57カッ
0380デフォルトの名無しさん
05/02/10 01:16:45[("1st",43),("2nd",8),("3rd",5),("4th",1)]のように
ランクをつけてランク順に返す関数が欲しいのですが
問題は[5,6,6,22,23,24,24]のような場合に
[("1st",24),("1st",24),("3rd",23),("4th",22),("5th",6),("5th",6),("7th",5)]
のように返さなければいけないことです。どうすればいいかさっぱりです。
誰か教えて下さい。
0381デフォルトの名無しさん
05/02/10 02:07:40[[24, 24], [23], [6, 6], [5]]
ここまで来りゃ後はなんとでもなるだろ。
0382デフォルトの名無しさん
05/02/10 02:35:51ありがとうございます!!
0383デフォルトの名無しさん
05/02/10 02:43:000384デフォルトの名無しさん
05/02/10 04:08:380385デフォルトの名無しさん
05/02/10 07:31:12演算子 $ って初めて見ましたが,なかなか便利ですね.
勉強になりました.
0386デフォルトの名無しさん
05/02/10 09:38:360387デフォルトの名無しさん
05/02/10 23:12:49いろいろ考えたのですがなんともなりません。
むしろここから先が一番大変なのではないかと・・・
まじで教えてくれませんか?
0388デフォルトの名無しさん
05/02/10 23:27:15ろ。これくらい自分で考えてみ。でないとただのカンニングだろ。
0389デフォルトの名無しさん
05/02/11 03:20:58rank :: [[a]] -> [(Int, a)]
rank x = [(i, n) | (i, a) <- zip [1..] x, n <- a]
確かに理解は非常に足りません。ですが、本を読んでも、
いろいろなほかのテクニックを知ってもループという基本的なことを
するのがこんなに難しい言語は初めてなのです。
なんらかのライブラリを使う必要があるのかもしれないと思って、
Listのところは大体見たんですが結局何も見当たらずもうダメです。
こんな簡単であろう問題に3時間も4時間もかけてる自分がすごい嫌になってきます。
0390デフォルトの名無しさん
05/02/11 04:03:590391デフォルトの名無しさん
05/02/11 04:52:51ヒントを下さい。お願いします。
0392デフォルトの名無しさん
05/02/11 08:05:13[1..]のところを["1st", "2nd", ...]というリストにすれば終わりだろ。
英語のカウントに勝手に直してくれるようなライブラリはないだろうな。
0393デフォルトの名無しさん
05/02/11 09:27:09> [1..]のところを["1st", "2nd", ...]というリストにすれば終わりだろ。
そのリストはどこまで続くんですか?
0394デフォルトの名無しさん
05/02/11 09:48:51[("1st",24),("1st",24),("2nd",23),("3rd",6),("3rd",6),("4th",5)]
になっちゃうんですよ。
課題は
[("1st",24),("1st",24),("3rd",23),("4th",6),("4th",6),("6th",5)]
にならなきゃいけないので前のリストのカウントを常にしないと次のランクが
分からないわけです。これをどうしたものかと・・・・
>>393
同じ課題で悩んでる人ですか?そのリストは(length x -1)thまで続くんじゃないでしょうか?
与えられた整数に英語のカウントをつける関数はもう作ってあるんですが。
addSuffix :: Int -> String
addSuffix x
| x == 1 = "1st"
| x == 2 = "2nd"
| x == 3 = "3rd"
| otherwise = show x ++ "th"
0395デフォルトの名無しさん
05/02/11 10:08:15> にならなきゃいけないので前のリストのカウントを常にしないと次のランクが
> 分からないわけです。これをどうしたものかと・・・・
rankingの関数が、
1)降順ソートずみ整数の(部分)リスト (初期値 全リスト)、
2)これまでに処理した整数の数 (初期値 ゼロ)、
3)直前に処理した整数 (初期値 -1とか、入力リストに絶対あらわれないもの)、
4)直前に処理した整数のランク (初期値 ゼロ)、
のよっつを引数として取ればいいんじゃないの?
> 与えられた整数に英語のカウントをつける関数はもう作ってあるんですが。
> | otherwise = show x ++ "th"
これだと
21番目は "21th"
22番目は "22th"
になっちゃうよ……
0396デフォルトの名無しさん
05/02/11 10:51:06じゃぁ条件分岐のところ、xの代わりにmod x 10で。
rankingの関数はやはり4つも引数が必要ですか・・・・。
じゃぁそれでちょっと頑張ってみます。
0397デフォルトの名無しさん
05/02/11 11:01:33でもなんかぎこちない感じ・・・。これでいいのでしょうか。
もっとスマートなやり方があるような気がしてなりません。
setRank :: [Int] -> [(String, Int)]
setRank [] = []
setRank (x:xs) = ("1st", x):[(addSuffix a, b) | (a, b) <- subSetRank xs x 2 0]
subSetRank :: [Int] -> Int -> Int -> Int -> [(Int, Int)]
subSetRank [] _ _ _ = []
subSetRank (x:xs) preVal position k
| x == preVal = [((position - (k+1)), x)] ++ (subSetRank xs x (position+1) (k+1))
| otherwise = [(position, x)] ++ (subSetRank xs x (position+1) 0)
addSuffix :: Int -> String
addSuffix x
| mod x 10 == 1 = "1st"
| mod x 10 == 2 = "2nd"
| mod x 10 == 3 = "3rd"
| otherwise = show x ++ "th"
0398392
05/02/11 11:01:34失礼。俺なら395よりは、
groupBy (\x y -> snd x == snd y) $ zip [1..] $ reverse $ sort [5, 6, 6, 23, 24, 24
]
から変形するな。
0399どうでしょうか,,,
05/02/11 11:11:26rank :: Integer -> String
rank x
| x `mod` 10 == 1 = s ++ "st"
| x `mod` 10 == 2 = s ++ "nd"
| x `mod` 10 == 3 = s ++ "rd"
| otherwise = s ++ "th"
where s = show x
ranks :: [String]
ranks = map rank [1..]
sort_group :: Ord a => [a] -> [[a]]
sort_group l = group $ reverse $ sort l
main :: Ord a => [a] -> [(String,[a])]
main lst = zip ranks (sort_group lst)
0400デフォルトの名無しさん
05/02/11 11:14:24全然違うじゃないか。
それにmainはIO aの型であるべきもので、使わないほうがいい。
0401デフォルトの名無しさん
05/02/11 11:21:2711th,12th,13th
そんな私はsort使うためにimport Listするとhugsにレイアウトが違うと怒られる駄目駄目プログラマ。
0402401
05/02/11 11:27:110403デフォルトの名無しさん
05/02/11 11:28:33setRankS :: [Int] -> [(String, Int)]
setRankS x = concat [setFirst n | n <- (groupBy (\x y -> snd x == snd y) $ zip [1..] x)]
setFirst :: [(Int, Int)] -> [(String, Int)]
setFirst ((x, y):xs) = [(addSuffix x, b) | (a, b) <- ((x, y):xs)]
0404デフォルトの名無しさん
05/02/11 11:41:07またまた貴重なご指摘ありがとうございます。
addSuffix :: Int -> String
addSuffix x
| x == 11 = s ++ "th"
| x == 12 = s ++ "th"
| x == 13 = s ++ "th"
| mod x 10 == 1 = s ++ "st"
| mod x 10 == 2 = s ++ "nd"
| mod x 10 == 3 = s ++ "rd"
| otherwise = s ++ "th"
where s = show x
0405401
05/02/11 11:52:24111th,112th,113th,211th....。序数詞は怖い。もうないよね。
0406デフォルトの名無しさん
05/02/11 12:03:11| mod x 100 == 12 = s ++ "th"
| mod x 100 == 13 = s ++ "th"
これ足せばOK?
0407デフォルトの名無しさん
05/02/13 13:11:540408デフォルトの名無しさん
05/02/13 15:11:50> 宿題しか話題のない悲しい言語
達見かな。で、どうしてそうなのかという質問がなされ、欠点が羅列され、
いやそんなことはない理論的に美しいという反論が出て、数少ない実用例も示され……
0409デフォルトの名無しさん
05/02/13 16:36:48Lisp系は処理系が簡単だから使われるけど、それ以外は…
0410デフォルトの名無しさん
05/02/13 17:23:540411デフォルトの名無しさん
05/02/13 17:32:09OCamlをフリーソフト(非オープンソース)を書くのに使っていますが。
0412デフォルトの名無しさん
05/02/13 18:02:270413デフォルトの名無しさん
05/02/13 18:21:280414デフォルトの名無しさん
05/02/13 18:26:54作れます。
0415デフォルトの名無しさん
05/02/13 18:33:34http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/Hetris/
http://fxp.hp.infoseek.co.jp/haskell/HSDL/
0416デフォルトの名無しさん
05/02/13 18:55:01仕事に使っても大丈夫?
0417デフォルトの名無しさん
05/02/13 22:14:38こういうコンテキストで話すなら、商用に使われてナンボだと思うが。
俺自身は宿題用だろうが日曜プログラマーの趣味の道具だろうが構わんけど。
0418デフォルトの名無しさん
05/02/14 15:53:01まあオープンソースだから、sourceforge.net/projects/ghc/やメーリングリストを見て
自分で判断してくださいということで。
ver6.4のリリースが延び延びになっているのが気になる。
RCのソースもコンパイルできないし…(@Mac)
0419デフォルトの名無しさん
05/02/14 20:24:12あくまでも最先端の研究用なので、品質に期待してはいけない。
0420デフォルトの名無しさん
05/02/19 08:34:16Perlの代わりぐらいにはなりますか?
0421デフォルトの名無しさん
05/02/19 11:17:33もう少しHaskellのこと勉強してから出直してきたら
0422デフォルトの名無しさん
05/02/19 12:09:32言語の完成度じゃなくてghcの完成度を聞いてるんだけど。
0423デフォルトの名無しさん
05/02/19 13:10:180424デフォルトの名無しさん
05/02/19 23:54:19特に、コンパイル結果がおかしいというのは一つも知らない。
言語拡張を使ってコンパイラが落ちるのはあったが、gccだってよく落ちたし。
品質に期待してはいけないってのは、なんか具体的な理由があるの?
0425デフォルトの名無しさん
05/02/22 20:08:410426デフォルトの名無しさん
05/02/22 22:01:110427デフォルトの名無しさん
05/02/23 09:12:550428デフォルトの名無しさん
05/02/23 19:20:040429デフォルトの名無しさん
05/02/23 20:51:01信頼性低すぎて使ってられないよな。
0430デフォルトの名無しさん
05/02/23 21:14:20ghcの信頼性 >>>>>>>>> gccの信頼性
0431デフォルトの名無しさん
05/02/24 11:00:34|| ̄ Λ_Λ
||_(Д`; ) 「なに?このスレ・・・」
\⊂´ )
( ┳'
0432デフォルトの名無しさん
05/02/26 23:31:32ttp://pggirls.asukaze.net/index.php?cmd=read&page=イ霖/Haskell、ソ、
0433デフォルトの名無しさん
05/02/27 03:01:220434デフォルトの名無しさん
05/03/02 14:39:26http://www.haskell.org/hawiki/TheMonadReader
0435デフォルトの名無しさん
05/03/05 17:27:020436デフォルトの名無しさん
05/03/05 21:47:090437デフォルトの名無しさん
05/03/06 11:08:100438デフォルトの名無しさん
05/03/08 23:33:410439デフォルトの名無しさん
05/03/09 00:11:320440デフォルトの名無しさん
05/03/09 00:24:000441デフォルトの名無しさん
05/03/09 20:45:50しかし、その後、、、
0442デフォルトの名無しさん
05/03/10 00:24:38でお勉強。本国から雑誌や新聞、書籍を送ってもらい、専属の通訳と翻訳家
つきで、食事はその国にあわせたもの。日本人受刑者は狭い部屋ですし詰め。
しばらくして、別のニュースでホームレスが川に落ちたインスタントラーメンを
取ろうとして転落、そのまま凍死してしまったという記事を読んで、せつなくな
ってしまった。
新聞で日本で暮らす脱北者のインタビュー記事。「生活保護の支給額が足りない」
「支援してくれないので日本は冷たい」だと。
別の記事で生活保護を受けられなかった母子がおんぼろアパートで餓死。
この国は本当に狂っている。
0443デフォルトの名無しさん
05/03/10 00:32:05目の当たりにすることになったのです。 〜Fin.〜 (2ch.千夜一夜物語)
0444デフォルトの名無しさん
05/03/10 00:58:200445デフォルトの名無しさん
05/03/11 00:20:02大阪府八尾市に支援者が用意した2部屋のアパートで
月約17万円の生活保護と支援者からのカンパで暮らす。
ソウルに住む長男も呼び寄せたいというが、
「いまの生活保護額では厳しい」と悩む日々だ。
http://www.asahi.com/national/update/0310/OSK200503100048.html
確定申告済ませたか?
俺も17万円と2部屋のアパート欲しい。
豊な生活送るには、17万円ポッチじゃ、まだタリン。
おまえ等の税金もっともっと よ こ せ!
0446デフォルトの名無しさん
05/03/11 00:31:200447デフォルトの名無しさん
05/03/11 00:43:130448デフォルトの名無しさん
05/03/12 20:33:410449デフォルトの名無しさん
05/03/12 23:28:12もちろんバグはありませんので、安心してご利用ください。
0450デフォルトの名無しさん
05/03/13 02:47:22http://www.gema3.net/bbs/icon/inore.jpg
0451デフォルトの名無しさん
05/03/14 14:32:350452デフォルトの名無しさん
05/03/14 16:41:23両方
0453デフォルトの名無しさん
05/03/14 23:22:350454デフォルトの名無しさん
05/03/15 00:02:580455デフォルトの名無しさん
05/03/15 08:28:370456デフォルトの名無しさん
05/03/15 08:32:050457デフォルトの名無しさん
05/03/20 10:13:33updated with urgent bug fixes
0458デフォルトの名無しさん
2005/03/23(水) 00:58:19SMFの解析を書き始めてるけど、コストをあまり考えすぎなくてよい気がするし、
Schemeよりも簡潔に書けるし、実行速度もいくぶん速い。
いまのところ、手続き型の処理を書かなくても
(コストを気にしない限りは)それほど書くのが難しくない。
ただ、効率を気にしだすと書き換えるのは難しいのかな?
0459デフォルトの名無しさん
2005/03/23(水) 07:53:51割り込み時の状態はどう定義されるのだろうか。
0460デフォルトの名無しさん
2005/03/28(月) 13:39:35もれも良く分からんが、MIT pressから出てるSICPっていう本読んでると
無限ストリームっていうのが出てくるから、それ使うんじゃない?
A Gentle Introduction to Haskellっていう、Haskellの紹介文書
にも無限ストリームを使ったクライアントーサーバー処理の例が出てくるよ。
0461デフォルトの名無しさん
2005/03/28(月) 15:15:520462デフォルトの名無しさん
2005/03/28(月) 15:16:30はい?もう一度言ってもらえますか?よく見えなかったので。
0463デフォルトの名無しさん
2005/03/28(月) 18:39:05たぶんlazyな言語に対して割り込みのformal semanticsを与えた人はいないと思う。
もの凄く難しい。
>>460
それは単なる入出力ではなかろうか。
0464デフォルトの名無しさん
2005/03/28(月) 20:05:44辻褄が合ってればいい
0465デフォルトの名無しさん
2005/03/28(月) 20:08:300466デフォルトの名無しさん
2005/03/28(月) 23:35:57Charだと数値との比較ができなくて不便。
0467デフォルトの名無しさん
2005/03/29(火) 01:36:32Hugs98 か ghc になると思うのですが。 fink には入っているのは
どちらも Hugs98 2001-Feb と ghc 6.2 で少々古かったです。
0468デフォルトの名無しさん
2005/03/29(火) 02:58:490469デフォルトの名無しさん
2005/03/29(火) 04:16:23爪弾きにされ、余計な苦労ばかり増えて良いところなんて一つもないし。
0470デフォルトの名無しさん
2005/03/29(火) 08:45:40GHCは本家にバイナリが用意してある
0471デフォルトの名無しさん
2005/03/30(水) 02:58:36ML も主要なのは殆ど対応しているし。
0472デフォルトの名無しさん
2005/03/30(水) 03:06:140473デフォルトの名無しさん
2005/03/30(水) 03:15:35Haskellの方も一応98はあるけど、そうじゃない部分は随時面白い話があるたびに
手を入れてきた感じなのは否めないのかも。
0474デフォルトの名無しさん
2005/03/31(木) 19:07:35http://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
この 2 冊が欲しいのですが、中を確かめてから欲しいので
都内で在庫がある店知りませんか?
東京駅〜秋葉原〜神保町あたりだと助かります。
0475デフォルトの名無しさん
2005/03/31(木) 22:26:110476デフォルトの名無しさん
2005/03/31(木) 22:33:33Haskell: The Craft of Functional Programmingはかなりおすすめです。
買って損はないと思います。
0477474
皇紀2665/04/01(金) 10:58:40http://www.hatena.ne.jp/1087912125
ここに載っててありそうなところには電話かけましたが
店頭に在庫はないみたいでした。Amazon がない時代は
みんなどうしていたんだろう…。大学生協で取り寄せかな。
0478デフォルトの名無しさん
皇紀2665/04/01(金) 18:28:57神田行けばいくらでもあるだろ。
デカイ本屋で在庫あるか訊いてみろ。
0479474
皇紀2665/04/01(金) 19:57:19私には >>477 以外に出てくる本屋以外にデカイ本屋は知りません。
おすすめのコンピュータの洋書をあつかっている店の名前が分かる
なら教えてください。
0480デフォルトの名無しさん
NGNGhttp://www.book-kanda.or.jp/town/map/map.htm
http://www.book-kanda.or.jp/town/newbook/index.htm
0481474
NGNGありがとうございました。
0482デフォルトの名無しさん
NGNG君見て自分も思い出したように買ったよ
まあ回っても見つからないと思うよ
0483474
2005/04/03(日) 11:46:47水道橋駅を降りて、神保町駅まで歩きその周辺の本屋を巡りました。
コンピュータの洋書を扱っているのが、三省堂の本店しか見つける
ことができませんでした。在庫はあらず。
いくらでもあるとのことなのですが、探しかたが悪いのか、
>>482 さんの言う通りなのか不明です。
Amazon から Haskell: The Craft of Functional Programming
は届いたので読みすすめてます。結構面白いです。
0484デフォルトの名無しさん
2005/04/04(月) 04:15:17> コンピュータの洋書を扱っているのが、三省堂の本店しか見つける
> ことができませんでした。
え、マジ? それは探し方が悪いのでは。
0485474
2005/04/06(水) 17:39:210486デフォルトの名無しさん
2005/04/07(木) 12:56:040487デフォルトの名無しさん
2005/04/07(木) 14:51:050488デフォルトの名無しさん
2005/04/07(木) 15:41:080489デフォルトの名無しさん
2005/04/07(木) 20:21:030490デフォルトの名無しさん
2005/04/07(木) 20:31:050491デフォルトの名無しさん
2005/04/07(木) 20:48:29国辱どもが。
0492デフォルトの名無しさん
2005/04/07(木) 20:57:100493デフォルトの名無しさん
2005/04/07(木) 21:30:110494デフォルトの名無しさん
2005/04/07(木) 22:14:10レベルの低い話は止めろ
0495デフォルトの名無しさん
2005/04/08(金) 22:34:400496デフォルトの名無しさん
2005/04/09(土) 09:19:13手持ちの関数型言語の参考書では見かけないので、類を扱うのは比較的
珍しいことなのかと思うのだけれど、どう?
なんでHaskellには類が必要なの?
0497デフォルトの名無しさん
2005/04/09(土) 13:07:49「型構築子から型構築子への写像」(StateTとか)のようなものを定義できるから、
単に「無引数の型構築子」だとか「1引数の型構築子」とかいうだけじゃ不十分だからだと思う。
まあ、似たような機能のあるC++では「類」なんて聞いたこともないんだけど。
関数型言語についてはよく知らんので誰かフォローよろしく。
0498デフォルトの名無しさん
2005/04/09(土) 13:52:320499デフォルトの名無しさん
2005/04/09(土) 13:59:36え?GHCがwindowsで動くでしょ???
0500デフォルトの名無しさん
2005/04/09(土) 14:23:03/ つ
/ / / ̄ ̄ ̄ ̄
∧ ∧/ < 500ゲットぉぉぉぉ!
⊂(゚Д゚ ) 彡 \
⊂彡  ̄ ̄ ̄ ̄
____●●●___ バイーン
/ 〇 〇 \|/ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄|
0501デフォルトの名無しさん
2005/04/09(土) 17:40:30WINXP sp2 で GHC のインストーラはエラーで落ちました。
hugs98 は簡単にインストールできました。
0502デフォルトの名無しさん
2005/04/10(日) 11:03:22結局、開発するならOCamlに軍配があがるんだよね。
0503デフォルトの名無しさん
2005/04/10(日) 11:31:380504デフォルトの名無しさん
2005/04/10(日) 13:23:420505デフォルトの名無しさん
2005/04/11(月) 11:57:34Haskellよく知らんけど、合ってるんじゃん?
C++のテンプレートは展開してからチェックするので、いらないんでしょ。たぶん。
0506デフォルトの名無しさん
2005/04/11(月) 12:08:44>たぶんlazyな言語に対して割り込みのformal semanticsを与えた人はいないと思う。
>もの凄く難しい
Haskellよく知らんので何か勘違いしてるかもしれんが、
http://research.microsoft.com/Users/simonpj/Papers/papers.html
のA semantics for imprecise exceptionsの5.1節とか
Imprecise Exceptions, Co-Inductivelyは違うの?
0507デフォルトの名無しさん
2005/04/11(月) 20:32:570508デフォルトの名無しさん
2005/04/11(月) 20:44:09http://www.google.co.jp/search?hl=ja&q=Haskell+regex&lr=
0509デフォルトの名無しさん
2005/04/15(金) 17:30:133月21日位にインストーラーが変わっている様なのですが、それでインストールしても
駄目ですか?
当方はXP SP2でインストールできています。
0510デフォルトの名無しさん
2005/04/15(金) 19:37:330512デフォルトの名無しさん
2005/04/17(日) 22:00:140513デフォルトの名無しさん
2005/04/17(日) 22:05:220514デフォルトの名無しさん
2005/04/17(日) 22:19:400515デフォルトの名無しさん
2005/04/17(日) 22:33:46いや、大したことじゃないんだけど、集合論とか。
0516デフォルトの名無しさん
2005/04/18(月) 01:09:420517デフォルトの名無しさん
2005/04/18(月) 11:59:500518デフォルトの名無しさん
2005/04/18(月) 23:56:27はすくぇる?
0519デフォルトの名無しさん
2005/04/18(月) 23:57:210520デフォルトの名無しさん
2005/04/20(水) 23:24:41ひょっとして、マシンパワーがかなり必要なの?
普段使っているのはおんぼろラップトップなんだよね。
0521デフォルトの名無しさん
2005/04/20(水) 23:45:27こちとら、PowerBookG4(867MHz,RAM640MB)で
2ステージ+testsuite が6〜8時間。
0522520
2005/04/21(木) 08:32:54GHCは普通のコンパイラとは内部構造がかなり違うようですな。
0523デフォルトの名無しさん
2005/04/22(金) 20:52:35誰か反論の文句をおねがいします。
0524デフォルトの名無しさん
2005/04/22(金) 20:54:260525デフォルトの名無しさん
2005/04/22(金) 21:08:240526デフォルトの名無しさん
2005/04/23(土) 05:07:160527デフォルトの名無しさん
2005/04/23(土) 13:52:460528デフォルトの名無しさん
2005/04/23(土) 23:02:550529デフォルトの名無しさん
2005/04/24(日) 00:06:540530デフォルトの名無しさん
2005/04/24(日) 13:13:48動的計画法のことだろ?
0531デフォルトの名無しさん
2005/04/24(日) 18:54:430532デフォルトの名無しさん
2005/04/24(日) 21:37:20それはDP(dynamic programming)
0533デフォルトの名無しさん
2005/04/24(日) 23:26:260534デフォルトの名無しさん
2005/04/25(月) 20:31:200535デフォルトの名無しさん
2005/04/25(月) 20:56:53久しぶりにビニールを開けてみました。
相変わらず読むところが少ない…。
0536デフォルトの名無しさん
2005/04/27(水) 11:28:180537デフォルトの名無しさん
2005/04/29(金) 15:38:56間違ったソースの中には対応しきれないものがあるようだ。
0538デフォルトの名無しさん
2005/04/29(金) 16:42:43嘘はいけない。ghcにバグはない。
0539デフォルトの名無しさん
2005/04/29(金) 16:49:250540デフォルトの名無しさん
2005/04/29(金) 16:57:37なんか凄い事聞いた気がする。
ほんと?
0541デフォルトの名無しさん
2005/04/29(金) 18:00:140542デフォルトの名無しさん
2005/04/29(金) 18:49:300543537
2005/04/29(金) 21:25:14もちろんソースは正しくないやつなんだが、それでもコンパイラが適切なエラーメッセージを
出せずに止まったことは事実。
0544デフォルトの名無しさん
2005/04/29(金) 22:13:13ちゃんと報告してあげて下さい。
0545デフォルトの名無しさん
2005/04/30(土) 18:45:06http://www.ipsj.or.jp/07editj/promenade/
0546デフォルトの名無しさん
2005/04/30(土) 19:44:340547デフォルトの名無しさん
2005/04/30(土) 21:27:04( ゚∀゚)彡
( ⊂彡
| |
し ⌒J
0548デフォルトの名無しさん
2005/05/01(日) 20:14:08-- dotimes :: n -> (n -> IO()) -> IO()
dotimes n f = __dotimes 0
where __dotimes i | i >= n = return ()
| otherwise = do (f i)
__dotimes (i + 1)
-- dotimes 10 ( \x -> putStr (show x))
こんなもの?
0549デフォルトの名無しさん
2005/05/01(日) 23:02:28全ての関数がマクロであるようなものじゃないか?
0550549
2005/05/01(日) 23:05:09誰かフォローよろしく。
0551デフォルトの名無しさん
2005/05/01(日) 23:19:07main = dotimes' 10 (putStr.show)
0552無理です。
2005/05/01(日) 23:20:58if p then c else a
は、
case p of
True -> c
False -> a
の構文糖衣とみなせる。逆でもよい。
マクロの代わりになるかどうかは、自分のifをcaseで定義できるかどうかを
考えてみればわかる。
myif
mycase
さあどうぞ。
0553デフォルトの名無しさん
2005/05/01(日) 23:29:12myif p c a = case p of True -> c; False -> a
でいいんじゃないのか?
0554デフォルトの名無しさん
2005/05/01(日) 23:37:45thenとかelseはどこいった?
0555デフォルトの名無しさん
2005/05/01(日) 23:43:220556デフォルトの名無しさん
2005/05/01(日) 23:49:160557デフォルトの名無しさん
2005/05/01(日) 23:52:37関数マクロと言うべきか。
>>548の回答としては、
Q.LISP Macro みたいなことできますか?
A.できません。
0558デフォルトの名無しさん
2005/05/02(月) 00:05:54a `lambda` (a + 1)
の様な表現ができないのが本質的っぽいね。
0559デフォルトの名無しさん
2005/05/02(月) 00:11:04引数評価を自分でコントロールできるかどうかにある。
少なくともLISPのマクロ内に出てくるシンボルみたく、引数の一部を
評価せずにキーワードそのものとして扱うみたいな仕組みがないと。
0560デフォルトの名無しさん
2005/05/02(月) 00:25:50引数の評価をコントロールするだけならhaskellでもできる。
「解釈」と言えばいいのかな?
0561デフォルトの名無しさん
2005/05/02(月) 00:39:060562デフォルトの名無しさん
2005/05/02(月) 13:13:17良いでしょうか?
---input---
<function name='deleteBy' type='(a -> a -> Bool) -> a -> [a] -> [a]'>
<description>
similar to <f>delete</f>, but it allows the programmers to supply
their own equality test
</description>
---output---
["deleteBy", "similar to delete, but it allows the programmers to supply
their own equality test"]
<description>の中の<f>の処理がうまく行かず下のような結果になってしまい
ます。<description>の中のテキスト部分だけを抜き出したいです。別リスト
にしないで1つの文字列として。
["deleteBy", "similar to ", "delete", ", but it allows the programmers to supply
their own equality test"]
0563562
2005/05/02(月) 13:22:01import System.IO
import System.Environment
import Text.XML.HaXml
import Text.XML.HaXml.Pretty (content)
main :: IO ()
main =
do ~[arg] <- getArgs
h <- openFile arg ReadMode
str <- hGetContents h
case xmlParse "list.xml" str of
(Document _ _ (Elem _ _ contents))
-> mapM_ print $ map getCont contents
getCont = map content . contFilter
contFilter :: CFilter
contFilter = f `o` (tag "function")
f = cat [ ("name"?) , multi txt `o` (keep /> tag "description") ]
0564562
2005/05/02(月) 13:22:59<function name='deleteBy' type='(a -> a -> Bool) -> a -> [a] -> [a]'>
<description>
similar to <f>delete</f>, but it allows the programmers to supply their own equality test
</description>
<example>
<in>deleteBy (\x y -> y `mod` x == 0) 4 [6,8,10,12]</in>
<out>[6,10,12]</out>
</example>
</function>
</module>
0565デフォルトの名無しさん
2005/05/17(火) 14:30:17例題をどう解くかの説明が全くなくて、説明もHaskellの説明にはなってるけど
例題のプログラムの説明としてはかなり端折られてるのが原因かな。
0566デフォルトの名無しさん
2005/05/17(火) 22:34:11Haskellでビット演算の関数とか演算子とか
あれば教えてください。
0567デフォルトの名無しさん
2005/05/17(火) 23:38:070568デフォルトの名無しさん
2005/05/18(水) 22:14:20ありがとうっす
0569デフォルトの名無しさん
2005/05/20(金) 23:02:420570デフォルトの名無しさん
2005/05/20(金) 23:16:000571デフォルトの名無しさん
2005/05/21(土) 01:33:08モノイドとか圏論とかの背景思想を無視して
使う立場だけからいうと
モナドは数珠繋ぎ強制ギプスみたいなものだと。
(IO Char)とか(IO Int)とかの型は
CharやIntの値がくるまれたカプセルみたいなもんだ。
ちなみにIO ()の()はCでいうvoid型
return xx とやると普通の値もIOモナドで包むことができる。
0572デフォルトの名無しさん
2005/05/21(土) 01:33:49IO型の関数を普通の関数と組み合わせても型違いで
コンパイルエラーになる。
(IO ()ももちろん型違いでエラー)
そこでモナドの中身の値を
橋渡しするアダプタ(>>=)を使う。
結局>>=や>>で(IO xxx)型の関数同士やreturn xxで
数珠繋ぎにするしかないように強制される。
0573デフォルトの名無しさん
2005/05/21(土) 01:42:170574デフォルトの名無しさん
2005/05/21(土) 01:43:080575デフォルトの名無しさん
2005/05/21(土) 01:48:49他にもいろいろなモナドがあるし自分でも作れる(かもしれない)
Stateモナドは数珠繋ぎを利用して
IOモナドみたいな状態遷移を自分で作れる。
Maybeモナドは値を包むほうが主眼のモナド
実際の値の代わりにNothingというダミーを
突っ込んでおくことができる。
データベースのNULL値みたいに使える。
0576デフォルトの名無しさん
2005/05/21(土) 01:57:530577デフォルトの名無しさん
2005/05/21(土) 02:24:06>CharやIntの値がくるまれたカプセルみたいなもんだ。
俺にはこの表現がなじまない。
カプセルってのは中身が取り出せてこそのものだよな。
だから、「CharやIntにに関係する何か」くらいの認識しかできない。
0578デフォルトの名無しさん
2005/05/21(土) 12:13:59前のIO関数から>>=で渡された
中身の生の値をちゃんと自由に扱える。
「取り出す方法が無い」んじゃなくて
「>>=を使って(間接的に)取り出すしか方法が無い」が
正しいかも。
0579デフォルトの名無しさん
2005/05/21(土) 12:15:560580デフォルトの名無しさん
2005/05/21(土) 12:16:44C言語とアセンブラがお勧め(w
0581デフォルトの名無しさん
2005/05/21(土) 12:30:25ワロス
俺も思いついた
0582デフォルトの名無しさん
2005/05/21(土) 16:33:470583デフォルトの名無しさん
2005/05/21(土) 20:30:44そのとおりだよね。
0584デフォルトの名無しさん
2005/05/21(土) 20:44:49だからー、
その件はLISPマクロのようには書けないって話だろーが
0585デフォルトの名無しさん
2005/05/21(土) 21:04:10名前渡し?遅延評価ってそういうことなのでは?
0586デフォルトの名無しさん
2005/05/21(土) 21:12:590587566
2005/05/21(土) 21:23:20だいたい目処がたってきますた。
ところでdata宣言で作った構造体?にたいする
Javaのシリアライズみたいな仕組みやライブラリって
Haskellにはないんすかね?
リフレクションみたいな仕組みがないと無理?
ファイルフォーマットをリストで与えて結果もリストで返すみたいなのは
できそうだけどそれじゃせっかくの強力な型システムが活かせないような、、
0588デフォルトの名無しさん
2005/05/21(土) 21:25:51あ、違うか
名前渡してないもんね
普通の意味の値の他に名前も値にできるようでないと圏論的には不完全なようなキガス
0589デフォルトの名無しさん
2005/05/21(土) 21:28:210590デフォルトの名無しさん
2005/05/21(土) 21:39:32というと?
0591デフォルトの名無しさん
2005/05/22(日) 16:51:02二項関係 r の反射的・対称的・推移的閉包に (x,y) が属するかどうかを判定する関数
inEqvCl ってのを書いてみたんですけど、もうちょっとすっきりした書き方とかないでしょうか?
inEqvCl :: Eq a => (a,a) -> [(a,a)] -> Bool
inEqvCl _ [] = False
inEqvCl (x,y) s = chk s y x
where
chk lst v u | v == u = True
| v `elem` ux = True
| otherwise = or $ map (chk lst' v) ux
where
lst' = [ p | p <- lst, u /= fst p, u /= snd p ]
ux = do p <- lst
if u == fst p && u /= snd p
then return $ snd p
else if u == snd p && u /= fst p
then return $ fst p
else fail ""
実行例
(2,1) `inEqvCl` [(0,2),(3,4),(5,4),(1,5),(5,0),(6,7),(8,7)]
=> True
(1,6) `inEqvCl` [(0,2),(3,4),(5,4),(1,5),(5,0),(6,7),(8,7)]
=> False
0592デフォルトの名無しさん
2005/05/22(日) 21:57:54こんなのでどうかな。
題意を理解していないので間違ってたらスマソ
import List
inEqvCl :: Eq a => (a, a) -> [(a, a)] -> Bool
inEqvCl _ [] = False
inEqvCl (x, y) s
| x == y = True
| y `elem` ns = True
| otherwise = any con ns
where
ns = map snd $ filter ((==x) . fst) exts
exts = s ++ map (uncurry $ flip (,)) s
con n = inEqvCl (n, y) (s\\[(x, n), (n, x)])
0593デフォルトの名無しさん
2005/05/22(日) 22:23:13-- 同値類のリストを算出
classify :: Eq a => (a, a) -> [[a]] -> [[a]]
classify (x, y) [] = [[x, y]]
classify (x, y) (c : cs)
| x `elem` c = (y : c) : cs
| y `elem` c = (x : c) : cs
| otherwise = c : classify (x, y) cs
inEqvCl :: Eq a => (a, a) -> [(a, a)] -> Bool
inEqvCl (x, y) lis = (not . null) (filter (f x y) (foldr classify [] lis))
where f x y c = x `elem` c && y `elem` c
いろいろ最適化の余地があるが。
0594デフォルトの名無しさん
2005/05/22(日) 22:32:57うまくいかない。
0596デフォルトの名無しさん
2005/05/23(月) 22:10:440597シミュレーション板GPスレから来ました
2005/05/24(火) 01:12:59↑のプログラムソース PolyGP.tar って、uclのサイトから消えている様ですが、
どこかにバックアップないでしょうか?
よろしく、おながいします。
0598591
2005/05/24(火) 05:44:251. 反射的閉包なんで、inEqvCl (x,x) [] == Trueにならないといけない。
>>592さんのからinEqvCl _ [] = Falseを取り除けばOK。
2. (\\)は最初の1つしか取り除かないので、最初の集合に対称なものがあると拙い。
(\\)の代わりに下の(//)を使って対処。
(//) :: Eq a => [a] -> [a] -> [a]
xs // ys = [ x | x <- xs, x `notElem` ys ]
>>596
無限リストは今回は対象外なので問題ないです。(^^;
0599デフォルトの名無しさん
2005/05/27(金) 00:42:11してるんですか?
リングバッファとかに使っても大丈夫ですか?
0600デフォルトの名無しさん
2005/05/27(金) 01:42:540601599
2005/05/27(金) 22:02:30自己レス
ttp://d.hatena.ne.jp/tanakh/20040809#p1
ここみるとだめっぽい感じでした
GCが仕事してくれること期待して
配列ガシガシ使い捨てにでもするか
0602デフォルトの名無しさん
2005/05/27(金) 22:21:03これが解決しない限り関数型が栄えることは無い
0603デフォルトの名無しさん
2005/05/27(金) 22:21:570604デフォルトの名無しさん
2005/05/28(土) 01:00:55だから、修正された瞬間複製するのが妥当な戦略だろう
しかし、オリジナルが参照されないとわかっているなら複製する必要ないから複製を省略する。
ここまで考えてふと思いついた。
すなわち差分をもっとけばいいんじゃないかと。
配列n番目更新しますた!更新しますた!という情報を各インデクス毎に持っとくわけよ
配列を全て更新しおわたとしても、またさらに更新するかもしれない
その場合はまたその差分を作るわけよ
するとどうだい?
差分として分解された各配列の要素はまるでりすt(ry
おれには難しすぎたようだ!
0605デフォルトの名無しさん
2005/05/28(土) 01:13:09Uniqueness Typing
0606デフォルトの名無しさん
2005/05/28(土) 05:03:540607デフォルトの名無しさん
2005/05/28(土) 08:38:44漏れは調べてないので諸君調べて報告してくれ
0608デフォルトの名無しさん
2005/05/28(土) 11:15:190609デフォルトの名無しさん
2005/05/28(土) 13:50:31つIOUArray
0610デフォルトの名無しさん
2005/05/28(土) 14:11:180611デフォルトの名無しさん
2005/05/28(土) 14:23:54http://www.navona.co.jp/
これのことでしょ?
0612デフォルトの名無しさん
2005/05/28(土) 20:20:45それはスタレイました
0613デフォルトの名無しさん
2005/05/28(土) 20:52:42どうしたらよかとですか?
0614613
2005/05/28(土) 20:54:47://pub.cozmixng.org/~the-rwiki/rw-cgi.rb にありました。
0615デフォルトの名無しさん
2005/05/30(月) 20:59:12日本語の丁寧なチュートリアル文献がありますか?
>>1のは難しいですよ
0616デフォルトの名無しさん
2005/05/30(月) 21:15:201. haskellで適当なコードを書く
2. -ddump-realCをつけてコンパイル
3. 1と2の結果を見比べる
0617デフォルトの名無しさん
2005/05/30(月) 21:46:39ttp://www.geocities.jp/shido_takafumi/hs/index_hs.html
とか。
0618デフォルトの名無しさん
2005/05/30(月) 22:05:26これなかなか良いね。
0619デフォルトの名無しさん
2005/05/30(月) 22:21:34http://www.sampou.org/cgi-bin/haskell.cgi?Programming%3aWayToHaskeller&l=jp
とかはどう?
0620デフォルトの名無しさん
2005/05/30(月) 22:29:19Cに落とさなくてもcore言語レベルでいいんじゃない?
0621デフォルトの名無しさん
2005/05/31(火) 09:34:430622デフォルトの名無しさん
2005/06/02(木) 00:38:180623sage
2005/06/02(木) 14:55:24Main> -1 ってやると
-1
Main> ( - 1) 2 とやると
ERROR - Unresolved overloading
*** Type : (Num a, Num (a -> b)) => b
*** Expression : fromInt (-1) 2
んん?(-) は単項演算子なのか!?
しかしMain> ( - ) 1 2 とやると
-1 とかえってくる。
(-)は二項演算子ってことになってるんじゃなかったのか!?
http://www.sampou.org/haskell/tutorial-j/numbers.html
>negate は Haskell では唯一採用された前置演算子です。
>これを (-) と書くことはできません。
>それは、こう書けば、減算関数になってしまうからです。
どうなってるの?>識者の方々
0624デフォルトの名無しさん
2005/06/02(木) 15:56:22(- 1)
(- 1) 2
の - はnegateのことで単項演算子
(-) 1 2
((-) 1) 2
(1 -) 2
1 - 2
の - は二項演算子
0625デフォルトの名無しさん
2005/06/02(木) 17:54:00それって上の引用の記述と矛盾してないかって事。
HugsはHaskell98モードでも再現したよ。
上の記述が古いのかHugsの独自仕様なのか、、、
実際-1と書けたほうが便利だけどね。
一瞬
「(\x -> x - 1) を 自動的に -1 に変換してるのかHaskell凄えな」
と思ったけど
型が全然違うし。
0626デフォルトの名無しさん
2005/06/02(木) 19:21:510627デフォルトの名無しさん
2005/06/02(木) 20:15:18原文は
>negate is the function applied by Haskell's only prefix operator, minus; we can't call it (-), because ...
だから、誤訳かと。
一応報告しておいた。
0628デフォルトの名無しさん
2005/06/02(木) 23:01:09>それって上の引用の記述と矛盾してないかって事。
どこが?
0629デフォルトの名無しさん
2005/06/02(木) 23:12:15単にセクションと単項のマイナスが構文上区別できなくて、その場合は単項マイナスの方を優先するってだけの話じゃん。
http://www.sampou.org/haskell/report-j/exps.html#sections
より
> - は文法上、特別扱いで、(- exp) はセクションではなく、前節で説明したように前置の符号反転演算子の適用である。
0630623
2005/06/02(木) 23:25:28これから安心して-1って書けるよ
0631デフォルトの名無しさん
2005/06/02(木) 23:27:07やっぱ新入生??
0632デフォルトの名無しさん
2005/06/02(木) 23:31:210633623
2005/06/03(金) 01:25:03配列の更新についてネタ振ったのも自分
学生じゃないけど
最近Haskellに挑戦してるのさ
初心に帰って楽しい。
ところでソースアップできるところないすか
0634デフォルトの名無しさん
2005/06/03(金) 01:35:40>>623の表現だと単項マイナスが存在しないように読めるから、誤訳といっていいと思う。
0635デフォルトの名無しさん
2005/06/04(土) 14:08:09type Dame = Human
jobHunting :: Dame -> [Company] -> Maybe Future
jobHunting _ [] = Nothing
jobHunting d (c:cs)
| hasShokureki d = Just Saiyou
| (age d) < 25 = Just Saiyou
| otherwise = jobHunting d cs
0636デフォルトの名無しさん
2005/06/04(土) 18:42:44そんな貴方に APLやJやKはいかが?
関数型言語スレで話題になってたと思うが、過去ログ倉庫入りかも。
0637デフォルトの名無しさん
2005/06/04(土) 21:35:16APL挙げるくらいなら、KRCやFを挙げるよな、まともな人間なら。
0638デフォルトの名無しさん
2005/06/04(土) 21:56:080639デフォルトの名無しさん
2005/06/04(土) 22:13:17現在の関数型言語ブームの源流は、
Fortran、BNF、1977年チューリング賞受賞者John BackusのFL(F言語)
で す が 何 か ?
0640デフォルトの名無しさん
2005/06/05(日) 03:19:550641デフォルトの名無しさん
2005/06/05(日) 04:13:34C++ → くそ
C → くそ
Java → くそ
Fortran → くそ
ML → ゴミ
Haskell → ゴミ
Ocaml → クズ
Ruby → クズ
Lisp → クズ
Forth → クズ
λ-Cal → アホ
π-Cal → アホ
μ-Cal → アホ
φ-Cal → アホ
0642デフォルトの名無しさん
2005/06/05(日) 04:14:310643デフォルトの名無しさん
2005/06/05(日) 04:24:33関数型言語の源流というよりは、配列計算言語の源流でわ?
SとかRとか(SASとかSPSSとか)、影響うけてるでそ?
0644デフォルトの名無しさん
2005/06/05(日) 09:50:00え、今、ブ、ブームなんですか...... よい時代に生まれたことを感謝します。
0645デフォルトの名無しさん
2005/06/05(日) 10:06:100646デフォルトの名無しさん
2005/06/05(日) 10:17:20/ ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| /__/ / < なわけねーだろ!!
/| /\ \__________
0647623
2005/06/05(日) 16:30:18http://www3.atwiki.jp/nanakoso/pages/4.html
だれかモナドを2つ以上同時に使う方法教えて下さい。
0648デフォルトの名無しさん
2005/06/05(日) 16:56:31モナド変換子で合ってる。
0649623
2005/06/06(月) 01:12:37やっぱりこの辺りは避けて通れませんか。
モナドをやっつけたと思ったらまた難物が、、、
0650デフォルトの名無しさん
2005/06/06(月) 23:25:480651デフォルトの名無しさん
2005/06/06(月) 23:33:240652デフォルトの名無しさん
2005/06/07(火) 05:06:030653デフォルトの名無しさん
2005/06/07(火) 05:44:29こんどはCIAか?
0654デフォルトの名無しさん
2005/06/07(火) 22:43:110655デフォルトの名無しさん
2005/06/10(金) 17:09:380656デフォルトの名無しさん
2005/06/29(水) 17:18:46実行してみると結果が表示されません。
例えば
myfactorial :: Int -> Int
myfactorial n
| n == 0 = 1
| otherwise = n * myfactorial (n-1)
というファイルを読み込んで
myfactorial 5
と入力しても何も結果が表示されずに
Main>
という状態に戻ってしまいます。何か原因があるのでしょうか。
0657¬656
2005/06/29(水) 22:55:14オプションあたりが怪しいけどサパーリ
0658デフォルトの名無しさん
2005/07/04(月) 22:20:14Monad ((->) r)のインスタンス宣言(中味はReaderと同じ)が
付いてくるっぽいんだが、いったいこれは何なんだ?
かなり便利だから積極的に使いたい気もするけど、
ドキュメントされてないみたいだし。
import Control.Monad.Reader
-- 3で割れて、かつ5で割れない自然数
t = filter (liftM2 (&&) ((==0) . (`mod`3)) ((/=0) . (`mod`5))) [0..]
0659デフォルトの名無しさん
2005/07/04(月) 23:50:56http://www.cs.kent.ac.uk/projects/vital/
0660デフォルトの名無しさん
2005/07/10(日) 19:53:360661デフォルトの名無しさん
2005/07/11(月) 23:39:290662デフォルトの名無しさん
2005/07/11(月) 23:40:000663デフォルトの名無しさん
2005/07/12(火) 07:34:270664デフォルトの名無しさん
2005/07/19(火) 18:29:38http://www.amazon.co.jp/exec/obidos/ASIN/4431708723/qid=1121765296/sr=8-1/ref=sr_8_xs_ap_i1_xgl/250-1176990-6892214
0665デフォルトの名無しさん
2005/07/19(火) 20:19:44「圏論の基礎」になっちまうんだとしたら、
"Categories, Types, and Structures: An Introduction to Category Theory for the Working Computer Scientist (Foundations of Computing Series)"
の題名はどーなるんだ?
「一週間で判る!くもんしきけんろん (いちねんせいむけ)」か(笑
0666デフォルトの名無しさん
2005/07/19(火) 20:31:23買っちゃった。
0667デフォルトの名無しさん
2005/07/19(火) 20:43:25でどうよ?
>>665
"Basic Category Theory for Computer Scientists (Foundations of Computing)"
「圏論の超基礎」つうのもある・・・
0668デフォルトの名無しさん
2005/07/19(火) 20:47:40「論理&数学ラブ♥な人のための、カテゴリー・ロジックと型理論」
なんつう分厚い数学書も買うには買ったけど、これは完全に死蔵本だな、たぶん。
0669デフォルトの名無しさん
2005/07/19(火) 20:49:10幸せ者だぞゴラァ!!!
0670デフォルトの名無しさん
2005/07/19(火) 21:17:36誤植が多いみたい。
0671デフォルトの名無しさん
2005/07/19(火) 22:24:110672デフォルトの名無しさん
2005/07/19(火) 23:39:470673デフォルトの名無しさん
2005/07/19(火) 23:40:570674デフォルトの名無しさん
2005/07/21(木) 16:22:11暇だからこれ読んでたんだが、ユーザ定義型のデータ構築子と型構築子の意味が分らん。
誰かなんかC,C++の似たような概念の用語で分りやすい説明キボンヌ。
0675デフォルトの名無しさん
2005/07/21(木) 18:51:43型構築子 <=> template
0676デフォルトの名無しさん
2005/07/21(木) 21:21:070677デフォルトの名無しさん
2005/07/21(木) 21:34:500678デフォルトの名無しさん
2005/07/21(木) 23:42:00という見方をするの?
data Int = -65332 | ... | -1 | 0 | 1 | ... | 65332
という例が載ってるけど、こんな感じに、
新たに型を作る。作られる型がデータ構築子
そのときに型のデータのインスタンスを列挙する。列挙されるのがデータ構築子。
こんな感じでいいのかな?頭悪くてすいませんねw
0679デフォルトの名無しさん
2005/07/21(木) 23:43:28○新たに型を作る。作られる型が型構築子
0680デフォルトの名無しさん
2005/07/21(木) 23:52:20Cのtypedef風なものにtypeが使われてるのはなんかちょっと違和感あるというか。
typeはいいとして、なんでdataなの?
0681デフォルトの名無しさん
2005/07/22(金) 00:54:47データ型宣言だから、では駄目かい?
0682デフォルトの名無しさん
2005/07/22(金) 08:43:46厨房臭いんですが、dataってのは納得できないですね。
それはまあいいとして、このスレはちょっとレベルが違いすぎるので、
初心者はこっちで質問することにしました。どうもです。
関数型言語Part IV
http://pc8.2ch.net/test/read.cgi/tech/1083649982/
0683デフォルトの名無しさん
2005/07/22(金) 08:52:280684デフォルトの名無しさん
2005/07/22(金) 13:15:03Haskellはそいつを参考にしたが、'datatype'は長いので'data'にした。
というのも考えられるかも。
0685デフォルトの名無しさん
2005/07/22(金) 13:45:510686デフォルトの名無しさん
2005/07/27(水) 20:28:460687デフォルトの名無しさん
2005/07/28(木) 01:59:510688デフォルトの名無しさん
2005/08/13(土) 00:17:46http://www.geocities.jp/takascience/windows/monadius.html
本家からもリンクされてる。
Monadius
A shoot 'em up game using OpenGL. Takayuki Muranushi also wrote a couple of other games in Haskell.
http://www.haskell.org/practice.html
0689デフォルトの名無しさん
2005/08/26(金) 17:04:35数学?
0690デフォルトの名無しさん
2005/08/26(金) 18:12:56うん
0691デフォルトの名無しさん
2005/08/26(金) 20:28:340692デフォルトの名無しさん
2005/09/06(火) 17:46:57ってのは、今はどこで見れるの?
0693デフォルトの名無しさん
2005/09/06(火) 18:33:49もう読めないのかも。Internet archiveにはあるか?
0694デフォルトの名無しさん
2005/09/06(火) 19:48:40亡くなられたのか……まだ若いのに。
プログラム工学VI 授業関連資料
http://web.archive.org/web/20031014180912/http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
0695デフォルトの名無しさん
2005/09/07(水) 00:28:33うへー、マジカヨ。
ご冥福をお祈りいたします。
0696デフォルトの名無しさん
2005/09/07(水) 00:32:240697デフォルトの名無しさん
2005/09/07(水) 01:58:27需要はかなりあると思うのだが。
0698デフォルトの名無しさん
2005/09/07(水) 14:24:350699デフォルトの名無しさん
2005/09/07(水) 19:19:39チュートリアル何度も読んでたから、泣けてくるじゃネーか
合掌(-人-)
0700デフォルトの名無しさん
2005/09/13(火) 02:08:53ひさしぶりに覗いたら悲しい知らせが。
南無。 そしてありがとう。
0701デフォルトの名無しさん
2005/09/15(木) 09:54:510702デフォルトの名無しさん
2005/09/16(金) 03:51:240703デフォルトの名無しさん
2005/09/16(金) 04:46:060704デフォルトの名無しさん
2005/09/19(月) 17:14:40本家よりずっと先にリリースって、すげーと思わない?
0705デフォルトの名無しさん
2005/09/21(水) 02:03:18とりあえずVersion 6.4.1リリースage
0706デフォルトの名無しさん
2005/09/24(土) 00:34:03guard
if-then-else
case-of
って基本的には同じですか?
0707デフォルトの名無しさん
2005/09/24(土) 01:44:59if とパターンマッチは違う。
パターンマッチには真理値で条件を与えることができる。これはガード部とか
言われる。 guard がそのことを指して書いたのであれば、 if と似ていると
は言えるかもしれない。
guard 関数はぜんぜんまったく関係ない。
0708デフォルトの名無しさん
2005/09/24(土) 11:29:13は
case b of {
True -> t;
False -> f;
}
の省略記法。この意味では同じといえると思う。
0709デフォルトの名無しさん
2005/09/24(土) 16:38:460710デフォルトの名無しさん
2005/09/24(土) 19:55:50haskellでオナニーできてるか?
0711デフォルトの名無しさん
2005/09/24(土) 21:19:200712デフォルトの名無しさん
2005/09/24(土) 23:20:510713デフォルトの名無しさん
2005/09/26(月) 18:07:59このレスを見た人は、超ラッキーな人♪
でも、このレスを見ただけじゃ何も起らないよ。
効果を実感したいなら、このレスを5回違うスレにレスしてね♪
だぁい好きなあの人に告られたり、
成績がどんどん良くな★〜彼方の願い星〜★
このレスを見た人は、超ラッキーな人♪
でも、このレスを見ただけじゃ何も起らないよ。
効果を実感したいなら、このレスを5回違うスレにレスしてね♪
だぁい好きなあの人に告られたり、
成績がどんどん良くなって、先生に褒められちゃったり...。
次々とHAPPYな事が訪れます♪
此の頃変なのがいっぱい回★〜彼方の願い星〜★
このレスを見た人は、超ラッキーな人♪
でも、このレスを見ただけじゃ何も起らないよ。
効果を実感したいなら、このレスを5回違うスレにレスしてね♪
だぁい好きなあの人に告られたり、
成績がどんどん良くなって、先生に褒められちゃったり...。
次々とHAPPYな事が訪れます♪
此の頃変なのがいっぱい回っ★〜彼方の願い星〜★
このレスを見た人は、超ラッキーな人♪
でも、このレスを見ただけじゃ何も起らないよ。
効果を実感したいなら、このレスを5回違うスレにレスしてね♪
だ
これが本物の、初代HAPPYメールです♪ってますが、これは本当です!!
これが本物の、初代HAPPYメールです♪って、先生に褒められちゃったり...。
次々とHAPPYな事が訪れます♪
此の頃変なのがいっぱい回ってますが、これは本当です!!
これが本物の、初代HAPPYメールです♪
0714デフォルトの名無しさん
2005/09/28(水) 23:39:39特にインデントが何回も叩かないと希望の位置にこない。
0715デフォルトの名無しさん
2005/09/29(木) 00:00:52インデントはすくなくとも手で揃えるより楽だし、ローテートしてくれるのは良いよ。
関数定義も補完してくれるし。
ただcase 〜 of のインデント位置のポリシーだけは気にいらないな。あれは of の前で改行することを想定しているのだろうか。
0716デフォルトの名無しさん
2005/09/29(木) 00:29:05あと、M-x turn-on-haskell-hugs して C-c C-l するとEmacsが固まって
C-g打つまで帰ってこなくなるんですが、何か設定が必要なのでしょうか?
Hugs.Base>
というプロンプトで一回 :load して、プロンプトが
Main>
になった後はすんなり動くんですが。
Emacsのバージョンは21.3です。
0717デフォルトの名無しさん
2005/09/29(木) 01:20:230718デフォルトの名無しさん
2005/09/29(木) 01:40:00そういう症状は体験したことがないなあ。自分はおおむね
http://www.haskell.org/haskell-mode/installation-guide.html
のように設定している。
でも最近はもっぱら ghci で hugs を使ってませんねぇ。
0719デフォルトの名無しさん
2005/09/29(木) 12:16:49私の環境ではhugsを起動した直後のプロンプトは
Hugs.Base>
なのですが、huskell-hugs-start-processでcomint-prompt-regexpに設定する
パターンが"^\? \\|^[A-Z][_a-zA-Z0-9]*> "となっていて
ドットを含まないためのようです。これを修正すると問題は解消しました。
(せめてdefvarしていて欲しかった……)
hugsもhaskell-mode.elもFreeBSDのportsで入れたのですが、みなさんの
hugsではプロンプトは別の文字列なのでしょうか?
0720デフォルトの名無しさん
2005/09/29(木) 20:46:48少し前(200311_1)には
Prelude>
だったが、今は確かに
Hugs.Base>
になってるね。
0721デフォルトの名無しさん
2005/09/29(木) 22:28:13いきなり Pugs, Rtype, Monadius だと手ごわすぎるので、もうちょい下のレベルで、
おすすめを教えて頂戴。
ウェブアプリを作ることがほとんどなので、Wiki, Blog(Diary), BBS 辺りが理想なんだけど。
0722デフォルトの名無しさん
2005/09/29(木) 22:57:36俺は特に何かをお薦めする程わかっちゃいないが、取り合えず
http://www.haskell.org/practice.html
を紹介しとく。
0723デフォルトの名無しさん
2005/09/29(木) 23:04:55さんきゅ。
とりあえず、
Flippi: a Wiki clone written in Haskell
http://www.flippac.org/projects/flippi/
でも見てみるよ。
0724デフォルトの名無しさん
2005/09/30(金) 11:39:06State s t、withState、bindStateのところで詰まってしまった。
誰か日本語でわかりやすく説明して!
0725デフォルトの名無しさん
2005/09/30(金) 17:42:10type State s t = s -> (t, s)
というのは、現在の状態を受け取って新しい状態とさらに何かを返す関数。
だから、State s t型の値を「状態を変更してついでに値を生み出す仕掛け」と見ることができる。
ここで、「状態を変更せずに常に決められた値xを生み出す仕掛け」は
\state -> (x, state)
と書ける。これがwithState x。
一方、「起動されたとき仕掛けxと仕掛けyが順に起動されたかのように振る舞う仕掛けthenState x y」は
次のように定義できる。
thenState :: State s a -> State s b -> State s b
thenState x y = \s0 ->
let (_, s1) = x s0 in -- xに初期状態s0を与えて起動、中間状態s1を得る。xによって生成された値は無視。
y s1 -- yに中間状態s1を与えて起動、終状態と値の組を得る。これはそのまま合成されたしかけの戻り値となる。
thenStateではxによって生成された値を無視したが、この値に基づいて
次に何をするか決めることができないと面白くない。そこで、yとして単なる仕掛けではなく、
「xによって生成された値を受け取って仕掛けを返す関数」を渡すことにする。
bindState :: State s a -> (a -> State s b) -> State s b
bindState x y = \s0 ->
let (result, s1) = x s0 in -- xを起動し…
(y result) s1 -- …次に(y result)を起動
0726デフォルトの名無しさん
2005/09/30(金) 22:49:12どうもありがとうございました。
State s t を状態遷移図での状態aから状態bへの矢印とイメージしました。
withState x は、状態遷移図で状態aから同じ状態aへ戻る矢印(出力x)ですね。
0727デフォルトの名無しさん
2005/10/01(土) 11:13:330728デフォルトの名無しさん
2005/10/01(土) 14:23:210729デフォルトの名無しさん
2005/10/01(土) 20:48:540730デフォルトの名無しさん
2005/10/01(土) 22:48:410731デフォルトの名無しさん
2005/10/01(土) 23:21:49俺も最初はランタイムエラーは絶対出ないものと思ってたけど
guardとかの場合わけ漏れとか
パターンマッチの不整合エラーがたまにある、、、
ぬるぽとかと比べて感覚的に頻度少ないけどね。
0732デフォルトの名無しさん
2005/10/01(土) 23:59:39いいえ
0733デフォルトの名無しさん
2005/10/02(日) 00:42:37完全でないパターンマッチは、ghcなら警告を出させることもできるから、
あとはプログラマの問題という気がするが。
0734724
2005/10/02(日) 05:03:11なんとなく理解したところでは
Haskellで評価の順序を強制するためにはCPSのように書くことが必要で、
Monadは継続に付加情報を(連続的にというか玉突き的にというか)持ち回る道具、
do構文はそれを手続き型のように書く構文、
というところだろうか?
0735デフォルトの名無しさん
2005/10/02(日) 08:35:39doは状態遷移を隠蔽するモナド関数
で合ってる?
0736デフォルトの名無しさん
2005/10/02(日) 09:44:07Stateモナドについてならその理解でいいと思う。
ただし、モナドの意味論は個々のモナドでかわる。モナドそのものは
「do記法で書くことのできるひとまとまりの計算の構成を支援するもの」くらいではないかな。
たとえばIOモナドは副作用が存在しうるような場合の計算の順序の保証する。
Maybeモナドは途中でNothingになるかもしれない計算のまとまりを構成する。
などなど。
あとは「モナドのすべて」を読むといいと思うよ。
http://www.sampou.org/haskell/a-a-monads/html/index.html
0737デフォルトの名無しさん
2005/10/03(月) 20:52:08/ \ 今このとき,モナドは立ち上がる
/∧_∧ \
/( ´∀`) /\
\( ) / \
\ / \
\/ \
∧∧∧∧\
( ´/) ))ヽ∧
/ / / ´∀) ∧∧
○( イ○ ( ,つ, ,゚Д゚)
/ヽ )) ヽ )ヽ )と , イ
(_/(_/(_/(_/ノ(_/⊂ノ> )J
/ ̄Y ̄`|/ ̄^Y ̄ヽ/ ̄ ̄Y
0738デフォルトの名無しさん
2005/11/01(火) 01:17:460739デフォルトの名無しさん
2005/11/01(火) 01:23:350740デフォルトの名無しさん
2005/11/02(水) 01:11:110741デフォルトの名無しさん
2005/11/03(木) 10:35:10誰か、 GHCmacs でも作ってくえ。
0742デフォルトの名無しさん
2005/11/12(土) 10:24:330743デフォルトの名無しさん
2005/11/12(土) 19:00:45両替問題の最初でつまづいてしまいました。
cc ::Amount -> [Coin] -> Count
という関数を
a < 0でないとき
cc a (c:cs) = cc (a-c) (c:cs) + cc a cs
と定義してますが、なぜこれで指定した金額aの両替の組み合わせ個数になるんですか?
初歩的な質問で済みませんが教えてください。
0744デフォルトの名無しさん
2005/11/12(土) 19:11:23貨幣cを一つ以上使う場合の数は、cを一つ使った後の両替を考えて、cc (a-c) (c:cs)
貨幣cを一つも使わない場合の数は、cc a cs
この和が求めるものになる。
0745デフォルトの名無しさん
2005/11/12(土) 19:30:54なるほど。
うまく考えるものですね。
ありがとうございました。
0746デフォルトの名無しさん
2005/11/12(土) 20:31:0810円 を 5円 と 1円 で両替して樹形図を書く
0747デフォルトの名無しさん
2005/11/12(土) 21:27:570748デフォルトの名無しさん
2005/11/12(土) 21:38:52お前がいまやってるんだろ?ww
0749デフォルトの名無しさん
2005/11/13(日) 02:16:560750デフォルトの名無しさん
2005/11/13(日) 09:14:43今頃やってるとしたら遅すぎると思うんだが。
夏頃やってたような。昔の記憶だが。
0751デフォルトの名無しさん
2005/11/13(日) 22:17:02母関数から特定の項を取り出す手間とボトムアップに解を構成する手間はいっしょ
0752デフォルトの名無しさん
2005/11/14(月) 06:49:45母関数から特定の項を取り出すのは紙と鉛筆で簡単にできるでしょ。
わざわざプログラムなんて書く必要もない。
0753デフォルトの名無しさん
2005/11/14(月) 20:09:53詳しく頼む。
俺は Polya の本にその母関数の一般項の計算には DP を使うと書いてあったので、無理だと思ってたんだが。
0754デフォルトの名無しさん
2005/11/14(月) 23:45:35組み合わせ論の入門書やConcrete Mathに出てるようなんじゃだめなの?
0755752
2005/11/15(火) 00:16:35Concrete Math の p.331 から 2 ページくらいで計算されてるやつ?
この例の最初のところに「一般の効果の場合に計算するのはとても難しい」とあるし,
その下で計算されてる {1, 5, 10, 25, 50} の特殊例においても「trick」と称される
計算をしないといけないし,さらに,最終結果に残ってる A_k は多項式を実際に展開しないと求まらない.
というわけで,これは一般性が無いという意味で >>744 が母函数から簡単に出るという
説明にはなってないし,特殊例を含めても >>752 の「簡単」ってのはどうかと思う.
コレじゃないならポインタください.
0756デフォルトの名無しさん
2005/11/15(火) 21:19:55一般の関数が非正格で嬉しいことってある?
デフォルトで正格でも良いような気がするんだが。
0757デフォルトの名無しさん
2005/11/15(火) 21:44:13・相等性についての議論が楽になる(単純に置換するだけでOK).
・制御構造を自分で設計できる.
cond p x y | p = x
| otherwise = y
recip x = cond (x == 0) 0 (1/x)
は正格なら recip 0 = bot, 非正格なら recip 0 = 0.
0758デフォルトの名無しさん
2005/11/15(火) 22:37:48反応ありがとう。
>・相等性についての議論が楽になる(単純に置換するだけでOK).
なるほど。気付かなかった。
でも、現状だとIntのaccumulator引数付きのちょっとした末尾再帰関数なんかを書くたびに
明示的に正格評価を指定しないとパフォーマンスに打撃があるわけで、
「議論が楽になる」って利点はこのコストに見合うんだろうか。
…などと思うのは俺が言語を使うだけの立場だからかな。
>・制御構造を自分で設計できる.
これはどちらかというと特殊なケースだから、非正格をデフォルトにする理由としては弱いと思う。
0759デフォルトの名無しさん
2005/11/15(火) 22:56:10コストパフォーマンスより性質を重視してるんじゃない?
ていうか、非正格の言語を統一する目的で作られた言語だしね。
正格がデフォルトの言語はMLを始めすでにいっぱいあるから
そっちを使ったらどうかな。
0760757
2005/11/15(火) 23:37:37俺は前者も後者も重要と思ってるんだけどね。まあとりあえず前者について少し強く推しておく。
「three x = 3 」 と定義したときに、「 2 + three x == 5 」 が成立するかどうかを判定することを考える。
これを非正格に評価するとthree x を単純に 3 に置き換えて 2 + 3 == 5 にして、成立する、と結論が出るんだけど、
正格評価だと、x が絶対 bot にならないなら成立、そうでないなら不成立、というようにドメインまで考えないと駄目になる。
特に函数が複雑に組み合わさってる場合に、どこかで bot になる可能性があるとかそういうことを考えるのはしんどいし、
上の函数でもそうだけど、 bot 以外で成立、とかいうのは本質的に成立にしちゃったほうが有意なケースが多いんだわ。
0761デフォルトの名無しさん
2005/11/16(水) 00:02:49浮動小数は代数的ではないとはいえ、言語的にこれでいいでしょうか?
0762デフォルトの名無しさん
2005/11/16(水) 11:02:44バックトラックが、普通に全数探索するようなコードを書くだけで実装できてしまうとことか。
0763デフォルトの名無しさん
2005/11/18(金) 20:07:17>>757
> recip x = cond (x == 0) 0 (1/x)
(x == 0) ? 0 : (1/x)
ちゃんとしたコンパイラなら動くきがす。
0764デフォルトの名無しさん
2005/11/19(土) 22:59:06煽りじゃなく本気で意味がわからん。
0765デフォルトの名無しさん
2005/11/20(日) 16:33:5510
0766デフォルトの名無しさん
2005/11/24(木) 22:06:26thunkの絡まない計算は速いんだな。
0767デフォルトの名無しさん
2005/11/27(日) 20:34:530768デフォルトの名無しさん
2005/11/27(日) 21:57:49-O2。
言われて気づいたけど、-O2 -fomit-frame-pointerとしたらCの方が速かった。
0769デフォルトの名無しさん
2005/11/27(日) 22:44:240770デフォルトの名無しさん
2005/11/27(日) 22:51:32簡単な記述のほうがプログラム変換に持ち込みやすいし.
0771デフォルトの名無しさん
2005/11/28(月) 00:09:59fac n = product [1..n]が末尾再帰のfacと同等なコードにコンパイルされる日は
来るんだろうか…
0772デフォルトの名無しさん
2005/11/28(月) 01:39:57import StdEnv, BigInt
factB :: Int -> BigInt
factB n = foldr (\x y =y *% x) one [1..n]
//factB n = foldr (%*) one [1..n] // %* がないから
0773デフォルトの名無しさん
2005/11/28(月) 06:03:30product は foldl で書けてるわけだから,もう末尾再帰になってると思うが.
0774デフォルトの名無しさん
2005/11/28(月) 11:51:060775デフォルトの名無しさん
2005/11/28(月) 13:49:200776デフォルトの名無しさん
2005/11/28(月) 20:37:04多倍長演算に時間をとられる階乗は例が悪かったかも。
興味があったのは、リストを作って壊すオーバーヘッドをなくすような最適化。
>>773
ごめん。明示的な再帰で書かれたfacのことを言いたかった。
fac = iter 1 where iter a 1 = a; iter a n = iter (a*n) (n-1)
0777デフォルトの名無しさん
2005/11/28(月) 23:57:12標準 Prelude では sum とか product の fold は積極評価のオペレータを
導入して実装されてるんじゃなかったっけ.
>>776
リストを作って壊しているとは限らない.というか普通はそんなことしてない.
product n = foldl (*) 1 (take n (enumFrom 1)) で定義したとき,
product n
= foldl (*) 1 (take n (enumFrom 1))
= foldl (*) 1 (take (n-1) (enumFrom 2))
= foldl (*) 2 (take (n-2) (enumFrom 3))
...
= foldl (*) n! (take 0 (enumFrom n))
= foldl (*) n! []
= n!
みたいに評価されるから,陽に空リスト以外のリストを作る部分は無い.
0778デフォルトの名無しさん
2005/11/29(火) 00:46:37少し前にメーリングリストで「sumはfoldl'を使うべき」という議論があったね。
いま見直したら、議論は「可算は常にstrictと言えるか」とかいう方向にシフトしちゃってたけど。
んで、型クラスを使っている以上、+演算子が常に strict に評価可能である保証はできないので、ということで議論は終結してしまっていた。
実際、 GHC では sum とか product では普通の遅延評価版を使っているよ。
実際問題としては strict 版の sum' と product' が(Listにでも)用意されていればいいと思うんだけど。
ちなみに仕様上も、
http://www.sampou.org/haskell/report-revised-j/standard-prelude.html
foldl を使うことになっているので、仕様が変わるまでは積極評価版にはならないと考えた方がいい気がする。
0779デフォルトの名無しさん
2005/11/29(火) 09:25:21そかー…….
まあ product [-10000..1] とかを一回の乗算で終わらせられる可能性があるから
戦略上絶対に悪いというわけじゃないんだろうけど癪だなあ.
0780デフォルトの名無しさん
2005/11/29(火) 11:46:33>リストを作って壊しているとは限らない.というか普通はそんなことしてない.
その過程は、細かく言うと(foldlの代わりにfoldl'を使って)
...
= foldl' (*) 1 (take (n-1) (enumFrom 2))
= foldl' (*) 1 (take (n-1) (2:enumFrom (2+1))
= foldl' (*) 1 (2:take (n-2) (enumFrom (2+1)))
= foldl' (*) 2 (take (n-2) (enumFrom (2+1)))
...
のように進むから、1ステップごとにconsを作っては壊す必要があると理解してたんだけど、違う?
>>778
>実際、 GHC では sum とか product では普通の遅延評価版を使っているよ。
IntとIntegerについては正格な版が使われると明言されてる。
http://www.haskell.org//pipermail/haskell/2005-November/016727.html
といってもDoubleやWord32やRationalは遅延評価版だけど。
0781デフォルトの名無しさん
2005/11/29(火) 21:24:51ttp://i.loveruby.net/d/20051129.html#p01
0782デフォルトの名無しさん
2005/11/29(火) 23:27:32ネ、ネタにしかみえねぇ……
マジなのか?
0783デフォルトの名無しさん
2005/11/30(水) 02:16:170784デフォルトの名無しさん
2005/11/30(水) 03:23:53年内ではなく、年度内かよ。
ホントでたら買わせていただきます。
それよりも誰か The Craft of Functional Programming を訳してください。英語で挫折してしまいました。
0785デフォルトの名無しさん
2005/11/30(水) 17:10:480786デフォルトの名無しさん
2005/12/06(火) 08:44:52宣言はされても評価はされません。
0787デフォルトの名無しさん
2005/12/06(火) 10:42:49後者の場合、読者もIOモナドに包まれないと読めません。
0788デフォルトの名無しさん
2005/12/06(火) 11:12:000789デフォルトの名無しさん
2005/12/06(火) 11:45:400790デフォルトの名無しさん
2005/12/06(火) 14:43:530791デフォルトの名無しさん
2005/12/06(火) 17:22:330792デフォルトの名無しさん
2005/12/06(火) 20:00:5812月内ってことじゃない?
0793デフォルトの名無しさん
2005/12/06(火) 20:06:080794デフォルトの名無しさん
2005/12/06(火) 20:11:14ごめん。reviewの意味を勘違いしていた。
0795デフォルトの名無しさん
2005/12/17(土) 10:02:29「addの戻り値型は引数型の関数となっている、と指定している」
ということらしいのですが、誰か解説してくれまへんか
class Add a b c | a b -> c where
add :: a -> b -> c
0796デフォルトの名無しさん
2005/12/17(土) 10:41:58それは関数ではなくて、「aとbからcの型は一意に定まる」ことを示している。
http://www.cse.ogi.edu/~mpj/pubs/fundeps-esop2000.pdf
0797デフォルトの名無しさん
2005/12/18(日) 04:23:050798デフォルトの名無しさん
2005/12/18(日) 08:25:320799デフォルトの名無しさん
2005/12/18(日) 08:52:39read "100" :: Int
0800デフォルトの名無しさん
2005/12/18(日) 09:26:10そうです。
>>799
言葉足らずですみません。
0801デフォルトの名無しさん
2005/12/18(日) 11:11:460802デフォルトの名無しさん
2005/12/18(日) 14:55:270803デフォルトの名無しさん
2005/12/18(日) 15:29:400804デフォルトの名無しさん
2005/12/19(月) 15:50:32roundN x n =
(frac (round (x * b))) / b
where b = 10 ^^ n
frac = fromRational . toRational
0806デフォルトの名無しさん
2005/12/20(火) 08:55:38data List a = Nil | Cons a (List a)
instance Eq (List a) where
Nil == Nil = True
Cons x xs == Cons y ys = xs == ys
_ == _ = False
Cons x xs == Cons y ys = xs == ys
の部分って正しいの?
このままだと (Cons 1 (Cons 2 Nil)) == (Cons 1 (Cons 3 Nil))
が True になるんだけど・・・
かといって
Cons x xs == Cons y ys = x==y && xs == ys
とかすると、最初のほうの x==y で
「add (Eq a) to the class or instance method `=='」
とか怒られるんだけど、じゃーどう定義したらよいのか
わかりまへん
0807デフォルトの名無しさん
2005/12/20(火) 09:00:55ありがとうございます。まだよくわかってないですが
読んでみます。
0808デフォルトの名無しさん
2005/12/20(火) 10:37:50リストという構造自体の等価性の問題ですから
中身は関係ない(というか見ちゃいけない)のです
add (Eq a) to the class or instance method `=='
とあるように,
中身の等価性まで考えようとしたら,List に格納できるデータ型
が Eq クラスのインスタンスに制限されてしまうのです.
0809デフォルトの名無しさん
2005/12/20(火) 10:47:45readsPrecとreadListの作り方のチュートリアルか何かないでしょうか(できればShowの方も)
Haskell98Report読んでもサッパリです
0810デフォルトの名無しさん
2005/12/20(火) 13:02:57Nil == Nil = True
Cons x xs == Cons y ys = x == y && xs == ys
_ == _ = False
0811デフォルトの名無しさん
2005/12/20(火) 18:59:40なるほど。納得です。
>>810
こうすると出来ますね。
Eq クラスのインスタンスに制限されるってこういうことだったのですね
有難うございました。
0812デフォルトの名無しさん
2005/12/21(水) 23:26:59チュートリアルじゃないけど、GHC.Readにいくつかinstanceの例がある。
http://cvs.haskell.org/cgi-bin/cvsweb.cgi/fptools/libraries/base/GHC/Read.lhs?rev=1.29;content-type=text%2Fplain
理解したら、是非チュートリアルを書いてくれ。
0813 ◆SaiTAMaVxg
2006/01/09(月) 08:32:36/ ̄\ ♪
〜(゚ ∀ 。 )⌒
♪ \_/ 彡
ノ ι ヽ
♪ .ハ
,ヘ ((
)ノ .))
(( ∧∧//
\(゚∀゚ )
) ノ ヾ ♪
ミ シ´ / ,γ
ミ r´ ( ∧∧//
ヽ、 ヽ 彡 ♪ ( ゚∀゚)'
) ノ 彡 .,/ ヽ ミ
ノ ,、( ノ ノヽ l
r´/ ) ) ミ (´/ ノ ノ
( ( ( ( γ´ (´
ヽ) ヽ\ ノ ハ ヽ ♪
ノ ) . / ,,/ (,,ノ 彡
♪ (__ノ (_,,ノ
0814デフォルトの名無しさん
2006/01/22(日) 22:44:58パフォーマンスが凄いことになってる。
0815デフォルトの名無しさん
2006/01/23(月) 00:03:09「Cはやっぱり速いなあ」とか「インタプリタはやっぱり遅いなあ」とか
「Javaはやっぱりメモリ喰いだなあ」とか思うだけで、
「関数型言語頑張ってるな。ちょっと使ってみるか」とは全く思ってくれない罠。
0816デフォルトの名無しさん
2006/02/02(木) 21:41:39C++みたいな言語の「thisの省略」がすごく羨ましいんだけど、
似たようなことをHaskellっぽく書けないものだろうか。
implicit parameterでそれなりに書けそうだけど、
使われてるのを見たことがない。
みんな明示的に引数を持ち回るのが苦痛じゃないのか?
0817デフォルトの名無しさん
2006/02/02(木) 23:15:17そんな君にReaderT。
StateTでもいいぞ。
0818デフォルトの名無しさん
2006/02/02(木) 23:46:36おー、ありがとう。
この目的のためにReaderモナドで計算順序を導入するのには抵抗があったけど、
既にもなでぃっくなコードにReaderTを混ぜ込むなら面倒が少ないな。
0819デフォルトの名無しさん
2006/02/05(日) 07:29:060820デフォルトの名無しさん
2006/02/05(日) 07:47:590821デフォルトの名無しさん
2006/02/05(日) 08:28:420822デフォルトの名無しさん
2006/02/05(日) 10:42:57Haskellでは困難。
・C++では名前空間・クラス・関数をかなり自由に相互ネストさせられるし、
ネストに従って細かくスコープを分けてくれるのに対して、
Haskellの名前空間はフラットで、レコードのフィールド名のスコープがモジュールレベルだったり、
関数に局所的な型の定義ができなかったりして不便。
・互いに関連のないものに同じ名前を与えるC++風の多重定義は難しい。
やってできないことはないけど、想定された言語の使いかたではないだろう。
0823デフォルトの名無しさん
2006/02/06(月) 00:21:58モナディウスを参考にシューティングゲーム作るぞ。うぉー!
0824デフォルトの名無しさん
2006/02/06(月) 00:33:36マジ応援してる。
0825デフォルトの名無しさん
2006/02/06(月) 03:51:370826デフォルトの名無しさん
2006/02/06(月) 06:11:44>>814
0827デフォルトの名無しさん
2006/02/06(月) 07:33:29俺のような凡人が普通に書いたらめっちゃ遅い。
0828デフォルトの名無しさん
2006/02/06(月) 09:10:24バグは少ないわ高速だわの最強のコードが生成されるのですね?
それとも、キモいコードってのはバグを許す代わりに高速にするとかいう類の話?
0829デフォルトの名無しさん
2006/02/06(月) 22:46:13http://shootout.alioth.debian.org/gp4/benchmark.php?test=nbody&lang=ghc&id=4
・コンパイルが大変で、
・コードが読みにくい分バグが多く、
・遅い
0830デフォルトの名無しさん
2006/02/06(月) 23:05:14>・コンパイルが大変で、
どういう意味?
0831デフォルトの名無しさん
2006/02/07(火) 05:53:35参考書がきっと1万とか法外な値段でしょ?
手が出ません><
0832デフォルトの名無しさん
2006/02/07(火) 06:09:11集合論と一階述語論理について勉強済みだからなんだよね?
0833デフォルトの名無しさん
2006/02/07(火) 10:27:09使うだけなら数学の話は特に必要ないよ。たぶん。
0834デフォルトの名無しさん
2006/02/07(火) 11:00:550835デフォルトの名無しさん
2006/02/07(火) 16:18:330836デフォルトの名無しさん
2006/02/07(火) 16:28:17とは大学の教官の弁。単位きたかなあ。
0837デフォルトの名無しさん
2006/02/07(火) 16:54:310838823
2006/02/07(火) 17:13:22みんなで速くするんだと思います><
CやFORTRANが速いのは多分歴史が長いからだと思ってる
--以下チラシの裏
今日やったこと:eclipseの日本語化とFPの導入
一言:eclipseをeclispだと思ってて「HaskellなのになんでLisp?」とか考えてた。英語弱いな、俺
今からやること:エヴァの映画借りてきて見る
0839デフォルトの名無しさん
2006/02/07(火) 21:16:35だからプロトタイピングなんだろ。
物好きがいろいろやってはいるけど、どう考えても研究用途の言語だよな。
だから意味がないというわけではないが。
0840デフォルトの名無しさん
2006/02/07(火) 21:46:46ちょっとお前は論点ずれてるよな。
0841デフォルトの名無しさん
2006/02/07(火) 22:30:09liftMとか素人なら完全に御手上げ。
あと、何この演算子?ってのを使ってる
(.|. (shiftL i 3)) -- google氏も無視
逆にhaskellが神言語になってる例
http://shootout.alioth.debian.org/gp4/benchmark.php?test=pidigits&lang=dlang&id=0
http://shootout.alioth.debian.org/gp4/benchmark.php?test=pidigits&lang=ghc&id=3
d 言語90行
haskell 11行
実行速度ほぼ同じ
理由
Integer型が使える
Monadを使う必要もMonad持ち上げをする必要がない。(配列を使う必要がない)
0842デフォルトの名無しさん
2006/02/08(水) 18:30:21たぶん、すぐ慣れると思う。
>(.|. (shiftL i 3)) -- google氏も無視
そんなあなたにHoogle
http://www.haskell.org/hoogle/?q=.%7C.
0843デフォルトの名無しさん
2006/02/08(水) 21:20:50すげー。
型から検索できるのがHaskellらしいな。
0844デフォルトの名無しさん
2006/02/09(木) 09:48:51手にとるようにわかるのですか?
私はどう書いたら速いコードになるのかいまいちわかりません。
0845デフォルトの名無しさん
2006/02/09(木) 13:07:28速いコードを書くのが目的なら関数型言語など、いや、
高級言語など使うのはお止めなさい。
0846デフォルトの名無しさん
2006/02/09(木) 13:19:59効率が足らないことが分かったとき、そこをアセンブリで書き直す代わりに
既にあるHaskellのコードをいじって効率を確保する、というのは、
それなりに合理的だと思うんだが。
0847844
2006/02/09(木) 13:44:180848823
2006/02/09(木) 14:15:14多分、どんな順序で書いてもコンパイラが同じように並べかえてくれるんじゃないかなぁ?
コンパイラが考えうる中で最も効率的なコードが出るようにね
0849デフォルトの名無しさん
2006/02/09(木) 14:16:51非正格になれてないだけ。
0850デフォルトの名無しさん
2006/02/09(木) 19:00:420851デフォルトの名無しさん
2006/02/09(木) 22:26:31Cよりhaskellの方が速いコードが書けるはず。
なぜならば、見栄え良く、簡潔に書け(簡潔じゃないとコンパイルできない)
無駄なく書けるから。
cだと、綺麗なコードを書くために無駄なコードを書きまくると思うし、
汚い普通のコードを書いても、Haskellと同程度しか速くならない。
cの有利な点は、
gcがない, 配列操作, アセンブラ的コードが書ける, 速いライブラリがある。
と言ってみる。
0852デフォルトの名無しさん
2006/02/09(木) 22:37:03>>851
>なぜならば、見栄え良く、簡潔に書け(簡潔じゃないとコンパイルできない)
これは速いコードとは関係ないんじゃないの?
早くコードを書く事は出来るのかもしれないが。
0853デフォルトの名無しさん
2006/02/09(木) 22:37:180854デフォルトの名無しさん
2006/02/09(木) 22:39:540855デフォルトの名無しさん
2006/02/09(木) 23:28:22add
0856デフォルトの名無しさん
2006/02/10(金) 03:01:51これ最新最強。newなんていりませんから!
0857デフォルトの名無しさん
2006/02/10(金) 10:53:420858fortran
2006/02/10(金) 10:55:080859デフォルトの名無しさん
2006/02/10(金) 12:50:240860デフォルトの名無しさん
2006/02/10(金) 15:32:11今となってはコンパイラが吐くアセンブラの方が速いことが多いけどね
0861デフォルトの名無しさん
2006/02/10(金) 15:53:170862デフォルトの名無しさん
2006/02/10(金) 16:26:100863デフォルトの名無しさん
2006/02/10(金) 16:27:27危険だからさ。
お行儀の良いハスケルにはわからんだろうがね。
0864デフォルトの名無しさん
2006/02/10(金) 16:40:00バカですか
>>857
バカですか
>>859
バカですか
>>862
バカですか
Haskellに関しての議論としては論点がずれているぞ。
Haskellを創った人たちは、お前らが気にしていることはすべて解っているし、そんなことを解決するための言語にしようとは考えていないんだよ。
言語仕様に関しては。言語仕様という表現も好きじゃないけど。
0865デフォルトの名無しさん
2006/02/10(金) 16:49:34アライグマみたいだね。
0866デフォルトの名無しさん
2006/02/10(金) 16:54:41必死だな。
マジレスすると、「Haskellを創った人たち」の意図などどうでも良い。
いったん言語ができあがってしまえば、それをどう使おうが勝手だ。
0867デフォルトの名無しさん
2006/02/10(金) 16:59:560868デフォルトの名無しさん
2006/02/10(金) 18:57:08Hudak? Peyton Jones? Wadler?
0869844
2006/02/10(金) 21:21:30>>849
これでも、もう一年以上使ってるんですよ。ヘボプログラマーなもんで...。
0870デフォルトの名無しさん
2006/02/10(金) 22:11:16小さくなる可能性がある Haskell には期待してるんだがなあ.
0871デフォルトの名無しさん
2006/02/10(金) 22:23:040872デフォルトの名無しさん
2006/02/10(金) 22:42:30http://wiki.ocaml.jp/index.php?%B4%D8%BF%F4%B7%BF%B8%C0%B8%EC%A4%CE%C8%E6%B3%D3
デフォルトで遅延評価なのか、指定したときだけ遅延評価なのか。
破壊的代入を許さないのか、許すのか。
速度に影響しそうな所というとこの辺の違いかな?
0873デフォルトの名無しさん
2006/02/10(金) 22:46:32そんな激しい最適化をするHaskellコンパイラはないと思うが。
0874デフォルトの名無しさん
2006/02/10(金) 23:59:120875デフォルトの名無しさん
2006/02/11(土) 00:19:45極端に遅い欠点がないのと、重みが高い数個のプログラムで稼いでるだけ
みたいだな。勝ってる数だけで見たらJavaにも勝てない。
0876デフォルトの名無しさん
2006/02/11(土) 05:57:500877デフォルトの名無しさん
2006/02/11(土) 09:05:41で死にやがった。遅延評価も万能じゃないんだな。
0878デフォルトの名無しさん
2006/02/11(土) 09:28:58reverse $ reverse ≡ id
だからなあ。
0879デフォルトの名無しさん
2006/02/11(土) 09:29:52reverse $ reverse ≠ id
の間違い。
0880デフォルトの名無しさん
2006/02/11(土) 11:29:59reverse xs returns the elements of xs in reverse order. xs must be finite.
0881デフォルトの名無しさん
2006/02/11(土) 11:41:15だけって・・・
俺の感覚ではそういうのは、
「なんでもそつなくこなす優秀なやつ」だよ。
一番になること以外には意義を感じないのかい?
0882デフォルトの名無しさん
2006/02/11(土) 12:26:06でも半分以上は平均的に結構遅いんだよ。。。
他の言語みたいに極端に遅いってのはないけど、
そういうのはアルゴリズムの欠陥があったり、その言語での普通の
やり方と違うといった何かしらの事情があることが多いし。
0883デフォルトの名無しさん
2006/02/11(土) 16:01:00ってあるのはJDKでは苦手分野の可能性が高い。
負けてる sum-file や random なんて Cleanがトップだから、
似たようにやれば(内部含む)haskellでもトップになる可能性はある。
(reverse-components はocaml 一位 Clean2位)
javaには負けてるとはいえない。
0884デフォルトの名無しさん
2006/02/11(土) 16:42:24この訴えはム板のあらゆるスレで続けていくつもりです。
0885デフォルトの名無しさん
2006/02/11(土) 16:51:190886デフォルトの名無しさん
2006/02/11(土) 16:53:58頑張れ
Lisp厨やRuby厨に負けるなよ
0887デフォルトの名無しさん
2006/02/11(土) 17:34:340888デフォルトの名無しさん
2006/02/11(土) 18:32:12訴えにはそれ相応の証拠がいるんだ。
説得力がある資料を添えて出直せ。
0889デフォルトの名無しさん
2006/02/11(土) 19:54:290890デフォルトの名無しさん
2006/02/11(土) 20:01:180891デフォルトの名無しさん
2006/02/11(土) 20:04:000892デフォルトの名無しさん
2006/02/11(土) 20:09:58CPU Timeの重みを1にして他を0にしてみ。
OCaml 34.77 1
C gcc 32.82 3
D Digital Mars 29.86 2
Haskell GHC 28.69 0
C++ g++ 25.76 2
SML MLton 24.70 3
Eiffel SmartEiffel 24.36 5
Nice 23.45 3
Java JDK 1.4 -server 22.21 4
Clean 22.01 6
Java JDK -server 21.87 4
Ada 95 GNAT 20.25 4
Java JDK -client 18.84 4
Fortran G95
まあでも正直、この順位も絶対現実とはかけ離れてるよな。
やっぱ、コミュニティの熱意とかが反映されるんだろうな。
0893デフォルトの名無しさん
2006/02/11(土) 20:20:21>Nice 23.45 3
プログラミング言語Nice (ワラ
0894デフォルトの名無しさん
2006/02/11(土) 20:35:56そういう変な順位になる。
例えば、CとHaskellを見るとCのchameneosとregex-dnaが
極端に遅いことがわかる。
こういうのはアルゴリズムの欠陥か何かの特殊事情だから除いて
考えるべきだというのは、具体的な数値を見てみるとよくわかるだろう。
0895デフォルトの名無しさん
2006/02/11(土) 21:07:440896デフォルトの名無しさん
2006/02/11(土) 21:09:32いずれにせよ本来の速さとは違うだろう。
0897デフォルトの名無しさん
2006/02/11(土) 21:12:07順位であることがわかるな。
0898デフォルトの名無しさん
2006/02/11(土) 22:00:20OCamlとかCleanとかHaskellとか:凡人がやっつけ仕事してもそこそこ速い
ってことでFA?
スレ違いだけど、今日初めてGoogle Earthをインスコしたんだ。
超セクシーだね! あんなのをHaskellで書いてみたい
0899デフォルトの名無しさん
2006/02/11(土) 22:08:030900デフォルトの名無しさん
2006/02/11(土) 22:46:14後者は言語オタク・エキスパート・信者が、Shootoutのために
必死になってソース作ってそうだけどなw
0901デフォルトの名無しさん
2006/02/11(土) 22:46:470902デフォルトの名無しさん
2006/02/11(土) 22:47:400903デフォルトの名無しさん
2006/02/12(日) 01:24:02http://item.rakuten.co.jp/book/1794880
0904デフォルトの名無しさん
2006/02/12(日) 05:16:07あきらかに実力以上の評価なわけで。
素人が普通に作ったらJavaといい勝負ってのが正直な感想。
0905デフォルトの名無しさん
2006/02/12(日) 09:51:08ノーベル賞とまではいかないがなかなか強力に安定した結果を叩きだし、堅物で融通がきかない。
0906デフォルトの名無しさん
2006/02/12(日) 12:18:48確かに言語仕様が優れていて、使ってる人が非常に優秀なのは
確かなんだが、速くはない。
Shootoutがいい成績なのも使ってる人が優秀なのと、他の言語が
力入れてないだけ。
0907デフォルトの名無しさん
2006/02/12(日) 12:33:29つまり、まだまだ未成熟段階ってこと。
Shootoutの順位なんてそんなもん。
0908デフォルトの名無しさん
2006/02/12(日) 12:38:23血液型占いと同じぐらいオカルト。
バカですか。
0909デフォルトの名無しさん
2006/02/12(日) 12:40:150910898
2006/02/12(日) 13:19:090911デフォルトの名無しさん
2006/02/12(日) 13:44:580912デフォルトの名無しさん
2006/02/12(日) 13:53:42ごめんなさい><
ハードウェアが十分速ければ……ってのこそアレだと思った。
0913デフォルトの名無しさん
2006/02/12(日) 14:03:51こここちらこそごめんなさい
そんな角をたてるつもりじゃなかったの><
0914デフォルトの名無しさん
2006/02/12(日) 14:53:460915デフォルトの名無しさん
2006/02/12(日) 14:59:37知的障害者が多数生息している模様です。
0916デフォルトの名無しさん
2006/02/12(日) 15:14:180917デフォルトの名無しさん
2006/02/12(日) 15:19:27関数型言語Part IV
http://pc8.2ch.net/test/read.cgi/tech/1083649982/
0918デフォルトの名無しさん
2006/02/12(日) 15:21:41そろそろ次スレだし、Haskell最適化スレと本スレを分ければ良い。
縮小する方向に強制するとろくなことが無い。
0919デフォルトの名無しさん
2006/02/12(日) 15:58:42確かに。言語全般の最適化ってなさそうだし
0920デフォルトの名無しさん
2006/02/12(日) 16:45:19このスレでここ数日発言した奴の大半はHaskellを知ってる訳でも学んでる訳でもなく
ただ「話題の」言語を冷やかしにきただけだろ。
スレ一つ消費するほど興味が続くとは思えない。
やるなら、
【数学者】Haskellはクソ言語【オナニー】
http://pc8.2ch.net/test/read.cgi/tech/1128011645/
を再利用したらどうだろう。
0921デフォルトの名無しさん
2006/02/12(日) 17:09:470922デフォルトの名無しさん
2006/02/12(日) 17:31:42実に的確な分析だ。
見事ここ数日冷やかしに来ていた事を当てられたから困る。
0923デフォルトの名無しさん
2006/02/12(日) 18:29:230924デフォルトの名無しさん
2006/02/12(日) 18:35:47「MLやHaskellに代表される関数型プログラミング言語について調べ、
PascalやC言語に代表される手続き型言語との相違を説明するとともに、
関数型プログラミング言語が広く普及していない理由を議論しなさい。」
というのが出たのですが、さっぱりです。
頭のイイおまいら、教えてください!!
0925デフォルトの名無しさん
2006/02/12(日) 18:48:44まず大学と教官の名前を言え。
0926デフォルトの名無しさん
2006/02/12(日) 18:54:53マルチス=ルナカス
0927デフォルトの名無しさん
2006/02/12(日) 18:56:35でも、あまり理論的なことよりも実用を重んじると思う。
数学的にどうこう、っていうよりも、プログラミング技法としてどうか?
っていう点かな??
0928デフォルトの名無しさん
2006/02/12(日) 18:58:32宿題は自分でやれ
0929924
2006/02/12(日) 18:58:47すみません。間違って2箇所書いてしまいました。
以後、こちらに一本化します。
明日締め切りなんで、かなり焦ってます。
ほんと、箇条書き程度で良いので、書いてもらえれば助かるかる。
0930デフォルトの名無しさん
2006/02/12(日) 18:59:390931デフォルトの名無しさん
2006/02/12(日) 19:00:31どれが分からないの?
サッパリつーが、1 くらいは自分で出来るでしょ。
それ以外は、自分の思う所を書いてくれれば、ヒントくらいは出せると思う。
1. 関数型プログラミング言語に付いて調べる
2. 手続きが他言語と関数型プログラミング言語の相違を説明する
3. 関数型プログラミング言語が普及していない理由を議論する
その前に C や Java は理解してるのかな。
0932924
2006/02/12(日) 19:03:11関数型言語もLispで軽く勉強したことはあります。
なので1はできそうなのですが、2,3に関してどういう観点から
話を広げていいのか分からないんです。
0933デフォルトの名無しさん
2006/02/12(日) 19:03:40手続きが他言語 --> 手続き型言語
0934デフォルトの名無しさん
2006/02/12(日) 19:07:072 は関数型言語が利点として上げている事(FAQ とかに書いてある宣伝文句)を
裏返せば、手続き型言語との相違が見えてくるんじゃないかな。
3 は Lisp を勉強していて、何じゃこりゃと思った事を軸にすれば良い。
0935924
2006/02/12(日) 19:08:07それってまとめるとどういうことになるんですか??
(全然専門的に知らないので、内容がちょっと理解できなくて)
それが分かればその点を広げて論ずることができるかなと思いました。
0936デフォルトの名無しさん
2006/02/12(日) 19:08:55参考文献:なぜ関数プログラミングは重要か
http://www.sampou.org/haskell/article/whyfp.html
0937デフォルトの名無しさん
2006/02/12(日) 19:12:09アルゴリズムの記述性、プログラムの安全性とか、自分でテーマを設定して、
具体例を少し添えてあげれば良いんじゃないの。
宿題みたいだし、直接的な答えは書かない方が貴方の為になるよね?
0938924
2006/02/12(日) 19:12:09>2 は関数型言語が利点として上げている事(FAQ とかに書いてある宣伝文句)を
>裏返せば、手続き型言語との相違が見えてくるんじゃないかな。
なるほど、確かにそうかもしれませんね。参考にします。
>3 は Lisp を勉強していて、何じゃこりゃと思った事を軸にすれば良い。
いや〜難しい。。「括弧が多い!」ぐらいしか。。w
>>936
ふむふむ、参考にしてみます。
0939924
2006/02/12(日) 19:15:26>直接的な答えは書かない方が貴方の為になるよね?
書いてもらえるなら書いてもらったほうが助かります!笑
あまりプログラムは自分の専門ではないので、、
てか、皆さんやさしいですね。
>プログラムの安全性
手続き型と関数型は安定性が違うんですか??
0940デフォルトの名無しさん
2006/02/12(日) 19:28:43疑問を持ったら、あとは自分で調べてチョ。さっきも書いたけど、
手取り足取りは無しの方向で。個別的な事象で不明な所があったら
また質問して下さい。
0941924
2006/02/12(日) 19:31:47わかりました。
でも、作業の方向は見えたので助かりました。
ありがとうございます。
>>みなさん。
お騒がせしました。気分を悪くしてしまいましたらすみません。
0942デフォルトの名無しさん
2006/02/12(日) 19:32:49http://www.geocities.jp/shido_takafumi/hs/haskell1.html
http://web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html
ヌルポ
0943デフォルトの名無しさん
2006/02/12(日) 19:39:120944デフォルトの名無しさん
2006/02/12(日) 20:18:050945デフォルトの名無しさん
2006/02/12(日) 20:30:550946デフォルトの名無しさん
2006/02/12(日) 21:54:03まさかマルチするとは思ってなかった……
0947デフォルトの名無しさん
2006/02/12(日) 22:03:40「関数型の言語と手続き型の言語の相違は、柔軟性、記述性、簡潔性、堅牢性
などであり、どれをとってもはるかに関数型が優れる。また、ユーザーの頭脳にも
大きな違いがあり、関数型言語が優れる。
普及していないのは選ばれた優れた頭脳の持ち主にしか良さがわからない
からである。」
0948デフォルトの名無しさん
2006/02/12(日) 22:05:550949デフォルトの名無しさん
2006/02/12(日) 22:09:58機械語->アセンブリ->フォートラン->C みたいに発展せざるを得なかったというか。
もし手続き型なんて一切知らない人に関数型の教育をほどこせば同じ人が Java を
学ぶより簡単そうだ……。
或いはプログラマの90%が関数型しか知らない世界では「手続き型? あんなのオナニーだよ」
みたいな話になるんだろうな。
0950デフォルトの名無しさん
2006/02/12(日) 23:14:56関数型言語と手続き型言語を比べるのは難しいだろうな。
議論の前提となる関数型言語の定義すら定まってないし。
0951デフォルトの名無しさん
2006/02/12(日) 23:30:35階乗みたいな簡単なのは分かるけどさ。
「なんでループ使わせてくれないんだよぅ」ってなる。
0952デフォルトの名無しさん
2006/02/12(日) 23:38:450953デフォルトの名無しさん
2006/02/12(日) 23:40:330954デフォルトの名無しさん
2006/02/12(日) 23:44:370955デフォルトの名無しさん
2006/02/12(日) 23:47:20Haskellだと再帰を使わずに済ませられることも多くないか?
たとえば階乗は\n -> product [1..n]と書ける。
IOが絡んだりする複雑な処理を書くときは再帰が要ることも多いけど、
個人的には再帰(やループ)は小さいほどわかり難いと思うから、
これはあまり問題じゃないような気もする。
0956デフォルトの名無しさん
2006/02/13(月) 04:23:49同じルーチンを何度も呼び出してるだけじゃん。
0957デフォルトの名無しさん
2006/02/13(月) 07:16:580958デフォルトの名無しさん
2006/02/13(月) 07:48:010959デフォルトの名無しさん
2006/02/13(月) 13:15:160960デフォルトの名無しさん
2006/02/13(月) 13:15:450961デフォルトの名無しさん
2006/02/13(月) 22:56:430962デフォルトの名無しさん
2006/02/14(火) 21:16:160963デフォルトの名無しさん
2006/02/14(火) 21:36:00それは「ふつうのHaskellプログラミング」の方じゃないか?
0964デフォルトの名無しさん
2006/02/14(火) 22:18:39漏れなんかいつも先行評価だぜ。
値が必要とされたことは一度も無いがな....orz
0965デフォルトの名無しさん
2006/02/14(火) 22:26:280966デフォルトの名無しさん
2006/02/14(火) 22:28:40イ`
投機的であるとはそういうことだ。
0967デフォルトの名無しさん
2006/02/14(火) 22:30:190968デフォルトの名無しさん
2006/02/15(水) 03:36:00>C:\Documents and Settings\Owner\workspace>ghc hello.hs
>
>hello.hs:2:0:
> Failed to load interface for `Graphics.UI.WX':
> Bad interface file: C:\wxhaskell\lib\imports/Graphics/UI/WX.hi
> mismatched interface file versions: expected 6041, found 6040
wxhaskell-register.batは実行したし、確かにC:\wxhaskell\lib\imports\Graphics\UI\WX.hiに
ファイルはあります。ぐぐったらブログの記事みたいなんがひっかかったけど
そこでも解決法はみつかりませんでした。CUIなHello,Worldは問題なくコンパイル出来ました。
wxWidgetsもインスコしなきゃダメかな、と思ってmsiファイルで入れてみたけど、どうも違うようです。
偉い人、どうか教えて下さい。
0969デフォルトの名無しさん
2006/02/15(水) 03:40:04--makeか-package wxでよかったはず。
0970969
2006/02/15(水) 03:41:080971デフォルトの名無しさん
2006/02/15(水) 03:53:56wxHaskellのWindowsパッケージがghc6.4用なのが問題だと思う。
ttp://www.cs.uu.nl/research/projects/proxima/wxhaskell-bin-msw2.4.2-ghc6.4.1-0.9.4-0.zip
一応ここに6.4.1用のバイナリがある。
0972デフォルトの名無しさん
2006/02/15(水) 04:06:39wxHaskell 入れなおしてコマンドラインオプションも入れたらコンパイルできました!
よーしパパ、テトリス作っちゃうぞー! って感じです!!!1123
0973デフォルトの名無しさん
2006/02/16(木) 22:27:46いつか泣きをみても知らないんだから!
0974デフォルトの名無しさん
2006/02/16(木) 22:52:270975デフォルトの名無しさん
2006/02/16(木) 22:57:220976デフォルトの名無しさん
2006/02/17(金) 09:58:270977デフォルトの名無しさん
2006/02/17(金) 10:55:250978デフォルトの名無しさん
2006/02/17(金) 13:01:030979デフォルトの名無しさん
2006/02/17(金) 15:02:440980デフォルトの名無しさん
2006/02/17(金) 15:18:510981デフォルトの名無しさん
2006/02/18(土) 09:33:10http://pcweb.mycom.co.jp/news/2006/02/17/341.html
これが噂の「大地クオリティ」か・・・
0982デフォルトの名無しさん
2006/02/18(土) 16:06:300983デフォルトの名無しさん
2006/02/18(土) 21:52:030984デフォルトの名無しさん
2006/02/19(日) 18:43:57言語仕様が分からずにキレた
0985デフォルトの名無しさん
2006/02/20(月) 15:27:160986デフォルトの名無しさん
2006/02/21(火) 00:26:200987デフォルトの名無しさん
2006/02/21(火) 00:51:430988デフォルトの名無しさん
2006/02/21(火) 00:55:130989デフォルトの名無しさん
2006/02/23(木) 22:23:380990デフォルトの名無しさん
2006/02/23(木) 22:45:20百行に満たないライブラリコードなのに何をやってるのか全然分からなくて驚いた。
コメントを書いておかなかった俺も悪いが、Haskell恐るべし。
0991デフォルトの名無しさん
2006/02/23(木) 23:45:050992デフォルトの名無しさん
2006/02/24(金) 02:31:210993デフォルトの名無しさん
2006/02/24(金) 03:05:10http://pc8.2ch.net/test/read.cgi/tech/1140717775/
0994デフォルトの名無しさん
2006/02/24(金) 09:52:000995デフォルトの名無しさん
2006/02/24(金) 10:19:390996デフォルトの名無しさん
2006/02/24(金) 16:27:100997デフォルトの名無しさん
2006/02/24(金) 17:21:52Haskellは少女だった。
形を持たず、目に見えず、概念的で、しかし可憐な、少女だった。
俺は喜び勇んで肉体関係を要求した。
拒否された。
0998デフォルトの名無しさん
2006/02/24(金) 17:22:49俺の意志が、思考力が、誰かに支えられているような気がした。
出てくる発想はいつにも増して非凡だったし、
日常の、つまらない判断までも的確だった。
そして俺は、誰がこの研ぎ澄まされた思考を運んできてくれたのかを、
よく知っていたのだ。
0999デフォルトの名無しさん
2006/02/24(金) 17:24:31俺は戸惑うことなくそれを理解し、受け入れた。
それでも、ときどき、気がつくとGHCiを起動していることがある。
そんな時、俺は、こう打ち込むのだ。
1000デフォルトの名無しさん
2006/02/24(金) 17:25:22Prelude Control.Monad.Fix> fix error
関数型プログラミング言語Haskell Part3 - 完 -
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。