関数型プログラミング ..
304:デフォルトの名無しさん
04/10/24 23:11:39
>>303
ありがとうございます。
doの中からは、Monadクラスのインスタンスを返すことは出来るけど、
他のものは返せないと。
doの中から数値を返したい場合はどうしたらよいのでしょうか?
Monadクラスのインスタンス作って返すしかないってことでしょうから、
returnを使って、IOモナドを返せばいいということなのでしょうか?
IOモナドって使わなくてすむなら使わないほうがいいみたいなのですが、
数値を返す関数はdo使わなくてもかけるだろうってことなのかな?
Haskellは難しいです。頭がクラクラします。
305:デフォルトの名無しさん
04/10/25 00:15:45
>>304
> doの中から数値を返したい場合はどうしたらよいのでしょうか?
一般には無理。リスト等、中身を取り出せるモナドもある。
f :: Int
f = head $ do return 3
> 数値を返す関数はdo使わなくてもかけるだろうってことなのかな?
なんでモナドが使いたいのかわからない。
例えばどんな「数値を返す関数」にモナドを使おうと思うわけ?
306:デフォルトの名無しさん
04/10/25 01:22:05
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´ 曲`) < モナドナ♪ドーナー♪ドーナー♪
⊂ )つ \_____________
(_⌒ヽ
)ノ `J
307:デフォルトの名無しさん
04/10/25 08:27:33
>>304
引数をとらずに数値を返す関数を書きたいということですか。
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」がおすすめです。
308:デフォルトの名無しさん
04/10/25 08:50:08
>>307
訂正
do a
b
c
309:デフォルトの名無しさん
04/10/25 11:14:48
>>307
> C言語などでは、int some (void) { return 3 }とint some = 3は違うものですが、
> Haskellではsome = 3 :: Intとなり両者の区別は存在しません。
int rand(void) に相当するものはどうなるのでしょうか?
310:デフォルトの名無しさん
04/10/25 11:46:20
>>309
Haskellでは関数は毎回同じ値がかえってこないといけないので、
そのようなものはありません。
では乱数はどうするかというと、
ramdom :: (RandomGen g) => g -> (a, g)
のように、generatorを渡して乱数を生成し、次のgeneratorを
返すことで実現します。
実際にはこのままでは使いにくいので、
randoms :: (RandomGen g) => g -> [a]
と無限リストにするか(これがお薦めです)、
C言語と同じ様に副作用によってgeneratorの状態を保存するために
モナドを用います。
# System.Randomで乱数関係の関数が定義されています。
311:me /= 309
04/10/25 11:54:05
>>310
こういう、Haskell風の思想を交えた解説は新参者にとって非常に参考になります。
312:304
04/10/25 13:46:10
出来れば、あまり人に頼らず勉強したいところなのですが、、、
申し訳ないのですが、考え方があまりに違うので、質問させてもらっています。
詳しく解説していただけて、非常に感謝しております。頭が下がります。
>>305
モナドを使いたくて、doを使っているわけではありません。
doを使いたくて知らないうちにモナドを使っていたようです。
>>306
doについてよく理解していないことがわかりました。
単にc言語の{}に対応した表現が出来るものだと思っておりましたが、違うのですね。
洋書は気合入れて買ってみても、
結局、挫折することは目に見えているので控えさせていただきます。
翻訳版が出るとうれしいです。
関数は同じ値を返さなくてはならないというのも面白いですねぇ。
>>311
ありがたい話しです。
モナドもよくわからない、Haskellのジェネレータもよくわからない。
とにかく、わからないことずくめなので、ゆっくり腰を据えて勉強するしかないなぁ。
Java知ってるから、C#も1日でだいたいわかるって具合には行かないですねぇ。
313:デフォルトの名無しさん
04/10/26 00:20:02
関数型のプログラムのコツは写像を追うことです、
JavaとかCとかやってると、どうしても手続きに目がいってしまって最初は全然まともに組めないです。
他にも、プログラム中に時間概念が無いので時系列を作り出す必要があるという点にも馴れにくかったです。
この辺はまるで相対論よろしく時間を次元の一つとして捉えて4次元空間的を直接取り扱う感覚を覚えました、
そんな感じで、過去から未来まで全部お見通しの神様の気分でプログラムしてます。
こんな感覚になるまで、僕もかなりの期間悩みました。
乱数なんかもそうですよね、あらかじめ無限個ある全ての乱数を作って置いておくという、
Javaなんかやってると、この感覚はそう簡単にはなじめないですね。
314:デフォルトの名無しさん
04/10/27 17:44:25
---------------------------
import Numeric
f :: Float -> Int -> Float
f x n = sin (pi*x*(2*n+1))
-----------------------
このプログラムがエラーになる理由を教えてください。
型が不一致といわれるのですが。
315:デフォルトの名無しさん
04/10/27 17:58:07
>>314
n が何なのか知らないが、pi は Float ではなくて?
316:デフォルトの名無しさん
04/10/27 18:04:16
nは整数(自然数)のつもりです。
piは標準ライブラリ定義されているFloatの定数だと思います。
この関数定義自体が出来ないみたいなんですが。
317:デフォルトの名無しさん
04/10/27 18:43:04
>>314
型があわない。
f x n = sin ( pi * x * (2.0 * (fromIntegral n) + 1.0))
318:デフォルトの名無しさん
04/10/27 18:43:12
>>314
型の不一致。
(*) :: 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))
319:デフォルトの名無しさん
04/10/27 19:04:19
ありがとうございます。
fromIntegralで型変換(?)しなきゃ掛け算できないんですね。
ちょっと面倒ですけど、rubyで(1/n)とやるとn>=2で0になってしまう(←これが分からず何時間もロスした^^;)
とかよりは明確でいいんですかねぇ。
320:デフォルトの名無しさん
04/10/27 19:08:53
追加です。
c 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」を評価するとスタックオーバーフローしてしまう理由を教えてください。
321:デフォルトの名無しさん
04/10/27 19:35:19
これは関数定義の順番の問題。
Haskellでは、先に書かれたものから順にパターンマッチが行われるため、
c x t n = ...はnに対する条件がないため、
nが-1のときもこっちが適用されてしまい、無限ループにおちいる。
c x t (-1) = 0
c x t n = ...
の順に並べれば問題は解決する。
322:デフォルトの名無しさん
04/10/27 22:11:34
URLリンク(www.teu.ac.jp)
ここで使っている、
文字→コード ord :: Char -> Int
コード→文字 chr :: Int -> Char
という関数が定義されていないようです。
環境はwindows 2000 でhugsを使っています。
:versionと入力すると、以下のように出ます。
-- Hugs Version Nov 2003
:browse Preludeとしてみてもordという関数はないので
バージョンUPして使えなくなったということでしょうか?
323:デフォルトの名無しさん
04/10/27 22:38:22
Prelude> :l Char
Char> :t ord
ord :: Char -> Int
324:デフォルトの名無しさん
04/10/27 23:04:58
>>319
わざわざ Float->Int->FloatにしようとするからfromIntegralが
必要になる。
f x n = sin ( pi * x * (2 * n + 1))
だけで明示的に型を指定するのやめれば
*Main> :t f
forall a. (Floating a) => a -> a -> a
という型になるがあとは勝手にやってくれるよ。
325:デフォルトの名無しさん
04/10/27 23:10:08
あーでもそれじゃnに整数以外の数つっこめちゃうのでだめか。
326:320
04/10/28 22:17:40
>>321
ありがとうございます。gnuplotでグラフを書かせるためのファイルを
出力しようと目論んでいるのですが、rubyより知的な気分ですね。
可読性はどうなんでしょう。
多少字面は見づらいけど、数学みたいに書けて
コンピュータ特有のことを考えないで済む分楽かもしれませんね。
327:デフォルトの名無しさん
04/10/29 01:33:14
>>323
なるほど。:loadしないと使えないのですね。
runhugsやGHCで使う場合というか、ファイルに書いておいて使う場合は、
(なんていったらよいのでしょう?)
import Charすればよいのですね。わかりました。
ありがとうございます。
328:デフォルトの名無しさん
04/11/03 13:44:05
みんなこの言語使って何やってるの?
329:デフォルトの名無しさん
04/11/03 15:47:57
「最近Haskellっていう言語勉強しててね。 いやーCとは全然違うすごい言語だよ。
関数型って言うんだけどね。」
「すごーいよく分からないけどかっこいいー」
330:デフォルトの名無しさん
04/11/03 16:40:43
「最近Haskellっていう言語勉強しててね。 いやーCとは全然違うすごい言語だよ。
関数型って言うんだけどね。」
「すごーいよく分からないけどかっこいいー。じゃあ、今晩はカレーにしようか?」
331:デフォルトの名無しさん
04/11/03 17:16:56
今晩はカリーか。
332:デフォルトの名無しさん
04/11/03 17:18:14
今晩はカリだ。
333:デフォルトの名無しさん
04/11/03 20:22:31
アライグマ Haskell
334:デフォルトの名無しさん
04/11/05 01:38:12
>>328
言語習いたてのワクワクをモ一度味わいたくて。
とりあえずKISSローダ作るのが目標です。
335:デフォルトの名無しさん
04/11/05 08:51:13
KISSローダってなんですか
336:デフォルトの名無しさん
04/11/21 20:03:44
CommonLisp/Scheme と Haskel と ML の中で一番実用に近いのは何?
私は CommonLisp だと思うんだけど。
337:デフォルトの名無しさん
04/11/21 20:09:03
>>336
比較対象が微妙に違っているわけだが。
338:デフォルトの名無しさん
04/11/22 09:26:06
339:デフォルトの名無しさん
04/11/22 11:49:50
すみません。最近勉強を始めた者ですが、頭が悪いものでどうにもわからず
困っています。よろしければご教授願えませんでしょうか。
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週間悩んで進展なしで独力では無理なようなので、どなたかお教えいただけませんでしょうか?
340:デフォルトの名無しさん
04/11/22 12:36:43
zip3 :: [a] -> [b] -> [c] -> [(a,b,c)]
zip3 xs ys zs = map change $ zip xs (zip ys zs)
where
change (x,(y,z)) = (x,y,z)
341:デフォルトの名無しさん
04/11/22 15:58:39
>>339
型があってない。っていうか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
342:デフォルトの名無しさん
04/11/23 10:14:37
{-
zipWith :: (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)
343:デフォルトの名無しさん
04/11/23 11:56:51
zip3' = (zipWith (uncurry (,,)) .) . zip
344:デフォルトの名無しさん
04/11/23 17:24:36
zip3' = const zip3 zip
345:デフォルトの名無しさん
04/11/24 12:28:10
339です。自室のPCからでははじかれてしまって書き込みができなかったので
遅くなってしまいましたが、ありがとうございます。
たいへん助かりました。
…お礼の言葉が遅くなってしまい、申し訳ありませんでした。m(__)m
346:デフォルトの名無しさん
04/12/08 23:32:07
-- Haskell Mode
Haskell Haskellモード 関数型言語でーす
Haskellモード Haskellモード Haskellモード Haskellモードでーす
Haskellモード うにゃ〜 うにゃにゃ lazily evalute!
関数 … カリー様 関数 … か・た・す・い・ろん
モナド >>= … わたしのシモベェ〜 モナド >>= …
Haskellモード Haskellモード Haskellモード 98モードでーす
Haskellモード Haskellモード Haskellモード Haskellモードでーす
たらい、回したくなっちゃった…
347:デフォルトの名無しさん
04/12/25 20:17:26
>>346
大丈夫?
348:デフォルトの名無しさん
04/12/26 01:33:03
Everyday Haskell
URLリンク(www.sampou.org)
が面白い
349:デフォルトの名無しさん
04/12/26 03:05:21
fold右派とfold左派にワラタ
350:デフォルトの名無しさん
04/12/27 03:20:36
The Evolution of a Haskell Programmerでググれ
という話ではなかったようだなスマソ
351:デフォルトの名無しさん
04/12/27 23:20:33
これ既出?
URLリンク(www.cin.ufpe.br)
352:デフォルトの名無しさん
05/01/05 13:43:39
>>347
346の文字列を読んで、ラテン系の伴奏が聞こえてくるようだと
かなりダメ。
353:デフォルトの名無しさん
05/01/06 03:09:05
>>346
禿げワロス
カリー様(・∀・)イイ!!
354:デフォルトの名無しさん
05/01/12 23:45:50
保全sage
355:デフォルトの名無しさん
05/01/15 03:17:13
Hatena::Diary 「Haskell」を含む日記
のとある日記を見てちょっとワラた
「むしゃくしゃしてやった.Haskell で書くつもりはなかった.今は反省している.簡潔に書けるが,知らない人には全く読めないだろうし,知っている人はもっとうまく書くかもしれない.」
356:デフォルトの名無しさん
05/01/15 03:36:47
ocaml age
357:Aransk
05/01/18 12:16:33
>>355
ワラた。
++ "しばらくしたら…誰も読めなくなるだろう。"
358:デフォルトの名無しさん
05/01/23 14:46:59
The Implementation of Functional Programming Languages オンライン復刻記念
URLリンク(research.microsoft.com)
って既出?
359:デフォルトの名無しさん
05/01/24 10:44:32
>>358 おおっ! 既出ではないと思う。さんくす。
といいつつ書籍で持ってるのだがw。いい本だよねー。
360:デフォルトの名無しさん
05/01/24 10:56:09
OCamlだとMLっぽいから書きやすいんだけど…。
361:デフォルトの名無しさん
05/01/24 18:01:20
>>358
やけにでっかいから何かと思ったら、300もあるページがみんな画像……
362:デフォルトの名無しさん
05/01/25 02:46:41
Revision Control System を、調べてたら、
darcs ( URLリンク(abridgegame.org) )
というのを、ハケーンしました。
これは、haskell で書かれているので、「haskellってなんや。」と調べる流れでここに来ました。
私が知らないだけ、haskellでかかれたアプリはいっぱいあるのかも知れませんが、
上の方に出てないみたいなので、書いてミマス。
激しくガイシュツでしたらすいません。
363:デフォルトの名無しさん
05/01/25 15:14:39
haskellで書かれたアプリはそんなに珍しくないと思う。
URLリンク(www.haskell.org)
にいくつか載ってる。
364:デフォルトの名無しさん
05/01/25 15:17:08
haskellとOCamlではどちらがメジャーですか?
365:デフォルトの名無しさん
05/01/25 15:25:18
そういうのをドングリの背比べというのではないだろーか。
366:デフォルトの名無しさん
05/01/25 16:01:51
スラド本家?とLtUで取り上げられた<darcs
URLリンク(it.slashdot.org)
URLリンク(lambda-the-ultimate.org)
純粋に関数的な「パッチの適用」を,ファイルやディレクトリの読み書きからキレイに分離でき,
また,パターンマッチングと高階関数が,パッチのプリミティブの実装にとてもマッチする,とある.
詳しくはこちら.
URLリンク(osdir.com)
367:デフォルトの名無しさん
05/02/06 15:35:00
>>346
超ワロタw
368:デフォルトの名無しさん
05/02/06 19:52:48
>>367
元ネタキボンヌ
369:346
05/02/06 20:18:15
>>368
スレリンク(gline板:1-9番)
370:デフォルトの名無しさん
05/02/07 04:10:20
ぬるほど
371:デフォルトの名無しさん
05/02/09 05:46:41
Haskellの初歩を学校でやっているのですが、
宿題が出て難しすぎるので誰か助けて下さい。
372:デフォルトの名無しさん
05/02/09 10:53:26
2つの項を入力されたらmost general unifierを出力する
*(1,y) *(x,+(a,b)) -> {x->1,y->+(a,b)}
のようなプログラムを作れ、という課題が出たのですがサッパリわかりません。
どなたか教えて下さい
373:デフォルトの名無しさん
05/02/09 20:23:43
>>372
もう一年やれば、理解も深まるよ。
374:デフォルトの名無しさん
05/02/09 20:27:03
というか,課題が全然理解できないんだが.
375:デフォルトの名無しさん
05/02/09 20:42:11
あ,分かってしまった.もう一年がんばってね.
376:デフォルトの名無しさん
05/02/09 20:59:08
問題の意味がわからないのならどうしようもないな
377:デフォルトの名無しさん
05/02/09 22:14:31
>>372
これ、数学板のmathematicaスレでも見たぞ
マルチすんな、消えろ
378:デフォルトの名無しさん
05/02/09 23:27:11
もっと低レベルな人にあわせてくれる学校に入りなおしましょう。
379:デフォルトの名無しさん
05/02/09 23:49:57
>>370
カッ
380:デフォルトの名無しさん
05/02/10 01:16:45
[1,5,8,43]などのリストをパラメータとして受け取って
[("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)]
のように返さなければいけないことです。どうすればいいかさっぱりです。
誰か教えて下さい。
381:デフォルトの名無しさん
05/02/10 02:07:40
List> group $ reverse $ sort [5, 6, 6, 23, 24, 24]
[[24, 24], [23], [6, 6], [5]]
ここまで来りゃ後はなんとでもなるだろ。
382:デフォルトの名無しさん
05/02/10 02:35:51
>>381
ありがとうございます!!
383:デフォルトの名無しさん
05/02/10 02:43:00
あ、ランクを付ける際にはカウンタみたいなものを用意するんですか?
384:デフォルトの名無しさん
05/02/10 04:08:38
宿題か? 宿題なのか? テメエェェェ
385:デフォルトの名無しさん
05/02/10 07:31:12
>>381
演算子 $ って初めて見ましたが,なかなか便利ですね.
勉強になりました.
386:デフォルトの名無しさん
05/02/10 09:38:36
はい、そーです
387:デフォルトの名無しさん
05/02/10 23:12:49
> ここまで来りゃ後はなんとでもなるだろ。
いろいろ考えたのですがなんともなりません。
むしろここから先が一番大変なのではないかと・・・
まじで教えてくれませんか?
388:デフォルトの名無しさん
05/02/10 23:27:15
ここまで来てなんともならんてのは、けっきょく全然理解してないってことだ
ろ。これくらい自分で考えてみ。でないとただのカンニングだろ。
389:デフォルトの名無しさん
05/02/11 03:20:58
僕にはこれが限界でした。
rank :: [[a]] -> [(Int, a)]
rank x = [(i, n) | (i, a) <- zip [1..] x, n <- a]
確かに理解は非常に足りません。ですが、本を読んでも、
いろいろなほかのテクニックを知ってもループという基本的なことを
するのがこんなに難しい言語は初めてなのです。
なんらかのライブラリを使う必要があるのかもしれないと思って、
Listのところは大体見たんですが結局何も見当たらずもうダメです。
こんな簡単であろう問題に3時間も4時間もかけてる自分がすごい嫌になってきます。
390:デフォルトの名無しさん
05/02/11 04:03:59
ま、気楽にやれや、学生なんだし。
391:デフォルトの名無しさん
05/02/11 04:52:51
そう気楽でもないんすよ。いろいろあって。
ヒントを下さい。お願いします。
392:デフォルトの名無しさん
05/02/11 08:05:13
>>391
[1..]のところを["1st", "2nd", ...]というリストにすれば終わりだろ。
英語のカウントに勝手に直してくれるようなライブラリはないだろうな。
393:デフォルトの名無しさん
05/02/11 09:27:09
>>392
> [1..]のところを["1st", "2nd", ...]というリストにすれば終わりだろ。
そのリストはどこまで続くんですか?
394:デフォルトの名無しさん
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"
395:デフォルトの名無しさん
05/02/11 10:08:15
>>394
> にならなきゃいけないので前のリストのカウントを常にしないと次のランクが
> 分からないわけです。これをどうしたものかと・・・・
rankingの関数が、
1)降順ソートずみ整数の(部分)リスト (初期値 全リスト)、
2)これまでに処理した整数の数 (初期値 ゼロ)、
3)直前に処理した整数 (初期値 -1とか、入力リストに絶対あらわれないもの)、
4)直前に処理した整数のランク (初期値 ゼロ)、
のよっつを引数として取ればいいんじゃないの?
> 与えられた整数に英語のカウントをつける関数はもう作ってあるんですが。
> | otherwise = show x ++ "th"
これだと
21番目は "21th"
22番目は "22th"
になっちゃうよ……
396:デフォルトの名無しさん
05/02/11 10:51:06
あ、ほんとだ!ご指摘ありがとうございます。
じゃぁ条件分岐のところ、xの代わりにmod x 10で。
rankingの関数はやはり4つも引数が必要ですか・・・・。
じゃぁそれでちょっと頑張ってみます。
397:デフォルトの名無しさん
05/02/11 11:01:33
ちょっとやり方は違うけど4つの引数使ってやっとできました。
でもなんかぎこちない感じ・・・。これでいいのでしょうか。
もっとスマートなやり方があるような気がしてなりません。
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"
398:392
05/02/11 11:01:34
>>394
失礼。俺なら395よりは、
groupBy (\x y -> snd x == snd y) $ zip [1..] $ reverse $ sort [5, 6, 6, 23, 24, 24
]
から変形するな。
399:どうでしょうか,,,
05/02/11 11:11:26
import List
rank :: 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)
400:デフォルトの名無しさん
05/02/11 11:14:24
>>399
全然違うじゃないか。
それにmainはIO aの型であるべきもので、使わないほうがいい。
401:デフォルトの名無しさん
05/02/11 11:21:27
誰も書かないから突っ込むけど、
11th,12th,13th
そんな私はsort使うためにimport Listするとhugsにレイアウトが違うと怒られる駄目駄目プログラマ。
402:401
05/02/11 11:27:11
importがImportになってた スレ違い御免orz
403:デフォルトの名無しさん
05/02/11 11:28:33
どうもありがとうございます。おかげ様で前のよりはマシになったかと思います。
setRankS :: [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)]
404:デフォルトの名無しさん
05/02/11 11:41:07
>>401
またまた貴重なご指摘ありがとうございます。
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
405:401
05/02/11 11:52:24
あーごめんなさい。私もまだ間違ってた。
111th,112th,113th,211th....。序数詞は怖い。もうないよね。
406:デフォルトの名無しさん
05/02/11 12:03:11
| mod x 100 == 11 = s ++ "th"
| mod x 100 == 12 = s ++ "th"
| mod x 100 == 13 = s ++ "th"
これ足せばOK?
407:デフォルトの名無しさん
05/02/13 13:11:54
宿題しか話題のない悲しい言語
408:デフォルトの名無しさん
05/02/13 15:11:50
>>407
> 宿題しか話題のない悲しい言語
達見かな。で、どうしてそうなのかという質問がなされ、欠点が羅列され、
いやそんなことはない理論的に美しいという反論が出て、数少ない実用例も示され……
409:デフォルトの名無しさん
05/02/13 16:36:48
関数型言語なんてみんなそうなんじゃない?
Lisp系は処理系が簡単だから使われるけど、それ以外は…
410:デフォルトの名無しさん
05/02/13 17:23:54
初心者を馬鹿にするとき、一番盛り上がります。
411:デフォルトの名無しさん
05/02/13 17:32:09
>>409
OCamlをフリーソフト(非オープンソース)を書くのに使っていますが。
412:デフォルトの名無しさん
05/02/13 18:02:27
じゃあ、みんなでHaskellで言語処理系を作ろう。
413:デフォルトの名無しさん
05/02/13 18:21:28
Haskellでテトリスは作れますか?
414:デフォルトの名無しさん
05/02/13 18:26:54
>>413
作れます。
415:デフォルトの名無しさん
05/02/13 18:33:34
Haskellのテトリス↓
URLリンク(web.comlab.ox.ac.uk)
URLリンク(fxp.hp.infoseek.co.jp)
416:デフォルトの名無しさん
05/02/13 18:55:01
ghcってどれくらいきちんとdebugされてるのかなあ。
仕事に使っても大丈夫?
417:デフォルトの名無しさん
05/02/13 22:14:38
>>411
こういうコンテキストで話すなら、商用に使われてナンボだと思うが。
俺自身は宿題用だろうが日曜プログラマーの趣味の道具だろうが構わんけど。
418:デフォルトの名無しさん
05/02/14 15:53:01
>>416
まあオープンソースだから、sourceforge.net/projects/ghc/やメーリングリストを見て
自分で判断してくださいということで。
ver6.4のリリースが延び延びになっているのが気になる。
RCのソースもコンパイルできないし…(@Mac)
419:デフォルトの名無しさん
05/02/14 20:24:12
そうそう。
あくまでも最先端の研究用なので、品質に期待してはいけない。
420:デフォルトの名無しさん
05/02/19 08:34:16
C,C++の代わりとまではいかなくても、
Perlの代わりぐらいにはなりますか?
421:デフォルトの名無しさん
05/02/19 11:17:33
>>420
もう少しHaskellのこと勉強してから出直してきたら
422:デフォルトの名無しさん
05/02/19 12:09:32
>>421
言語の完成度じゃなくてghcの完成度を聞いてるんだけど。
423:デフォルトの名無しさん
05/02/19 13:10:18
エスパー募集中ですか(w
424:デフォルトの名無しさん
05/02/19 23:54:19
ghcってとてもバグが少ないとおもう。
特に、コンパイル結果がおかしいというのは一つも知らない。
言語拡張を使ってコンパイラが落ちるのはあったが、gccだってよく落ちたし。
品質に期待してはいけないってのは、なんか具体的な理由があるの?
425:デフォルトの名無しさん
05/02/22 20:08:41
GHC最強。ノアだけはガチ。
426:デフォルトの名無しさん
05/02/22 22:01:11
ghcは完璧。バグなんて有り得ない。
427:デフォルトの名無しさん
05/02/23 09:12:55
URLリンク(www.ghc.or.jp)
428:デフォルトの名無しさん
05/02/23 19:20:04
ghcの品質に問題ありとかいってる奴は頭がおかしいな。
429:デフォルトの名無しさん
05/02/23 20:51:01
関数型言語で書かれてないソフトウェアなんて
信頼性低すぎて使ってられないよな。
430:デフォルトの名無しさん
05/02/23 21:14:20
ghcにはバグなんてない。
ghcの信頼性 >>>>>>>>> gccの信頼性
431:デフォルトの名無しさん
05/02/24 11:00:34
カタカタ
|| ̄ Λ_Λ
||_(Д`; ) 「なに?このスレ・・・」
\⊂´ )
( ┳'
432:デフォルトの名無しさん
05/02/26 23:31:32
妙な雰囲気を紛らわす一服の清涼剤sage
URLリンク(pggirls.asukaze.net)イ霖/Haskell、ソ、
433:デフォルトの名無しさん
05/02/27 03:01:22
ghcにバグがないことは証明済みです。
434:デフォルトの名無しさん
05/03/02 14:39:26
The Monad.Reader
URLリンク(www.haskell.org)
435:デフォルトの名無しさん
05/03/05 17:27:02
証明が間違ってないことも証明済みです
436:デフォルトの名無しさん
05/03/05 21:47:09
よく分からんが、ghcにバグは有り得ないってことか。
437:デフォルトの名無しさん
05/03/06 11:08:10
そゆこと
438:デフォルトの名無しさん
05/03/08 23:33:41
URLリンク(sourceforge.net)
439:デフォルトの名無しさん
05/03/09 00:11:32
ghcってのは宗教か何かですか?
440:デフォルトの名無しさん
05/03/09 00:24:00
真理です
441:デフォルトの名無しさん
05/03/09 20:45:50
我々はこのスレを笑い飛ばしていたものです…。
しかし、その後、、、
442:デフォルトの名無しさん
05/03/10 00:24:38
テレビで観た外国人犯罪者。刑務所で個室をもらい、支給されたパソコン
でお勉強。本国から雑誌や新聞、書籍を送ってもらい、専属の通訳と翻訳家
つきで、食事はその国にあわせたもの。日本人受刑者は狭い部屋ですし詰め。
しばらくして、別のニュースでホームレスが川に落ちたインスタントラーメンを
取ろうとして転落、そのまま凍死してしまったという記事を読んで、せつなくな
ってしまった。
新聞で日本で暮らす脱北者のインタビュー記事。「生活保護の支給額が足りない」
「支援してくれないので日本は冷たい」だと。
別の記事で生活保護を受けられなかった母子がおんぼろアパートで餓死。
この国は本当に狂っている。
443:デフォルトの名無しさん
05/03/10 00:32:05
・・・という内容をghcで矛盾を含まずーディングしはじめる兵(ツワモノ)が現れるのを
目の当たりにすることになったのです。 〜Fin.〜 (2ch.千夜一夜物語)
444:デフォルトの名無しさん
05/03/10 00:58:20
真理です
445:デフォルトの名無しさん
05/03/11 00:20:02
生活苦や迫害から逃れるため北朝鮮を脱出した元在日朝鮮人
大阪府八尾市に支援者が用意した2部屋のアパートで
月約17万円の生活保護と支援者からのカンパで暮らす。
ソウルに住む長男も呼び寄せたいというが、
「いまの生活保護額では厳しい」と悩む日々だ。
URLリンク(www.asahi.com)
確定申告済ませたか?
俺も17万円と2部屋のアパート欲しい。
豊な生活送るには、17万円ポッチじゃ、まだタリン。
おまえ等の税金もっともっと よ こ せ!
446:デフォルトの名無しさん
05/03/11 00:31:20
ghcならコンパイル可能
447:デフォルトの名無しさん
05/03/11 00:43:13
ghcだからこそコンパイルエラーの結果に終わります。 こんなんに真値判定出されてたまりますか。
448:デフォルトの名無しさん
05/03/12 20:33:41
URLリンク(www.haskell.org)
449:デフォルトの名無しさん
05/03/12 23:28:12
新たな教典が来ましたね。
もちろんバグはありませんので、安心してご利用ください。
450:デフォルトの名無しさん
05/03/13 02:47:22
>>449 =モズクズ様↓
URLリンク(www.gema3.net)
451:デフォルトの名無しさん
05/03/14 14:32:35
SOE本とCraft本で、どちらがお勧めですか?
452:デフォルトの名無しさん
05/03/14 16:41:23
>>451
両方
453:デフォルトの名無しさん
05/03/14 23:22:35
今年度は、Hugsの新版出ないの?
454:デフォルトの名無しさん
05/03/15 00:02:58
Mar 2005 releaseがでてるけど
455:デフォルトの名無しさん
05/03/15 08:28:37
あれ、いつの間に。
456:デフォルトの名無しさん
05/03/15 08:32:05
Charが、うにコードに対応したんだ。
457:デフォルトの名無しさん
05/03/20 10:13:33
hugs98-Mar2005-patched.tar.gzキテル━━━(゚∀゚)━━━ !!!!!
updated with urgent bug fixes
458:デフォルトの名無しさん
05/03/23 00:58:19
同じ関数型言語でもHaskellのほうがSchemeより易しくない?
SMFの解析を書き始めてるけど、コストをあまり考えすぎなくてよい気がするし、
Schemeよりも簡潔に書けるし、実行速度もいくぶん速い。
いまのところ、手続き型の処理を書かなくても
(コストを気にしない限りは)それほど書くのが難しくない。
ただ、効率を気にしだすと書き換えるのは難しいのかな?
459:デフォルトの名無しさん
05/03/23 07:53:51
素朴な疑問だが、lazyな言語で割り込み処理(シグナル等)はどうやって書くのだろう。
割り込み時の状態はどう定義されるのだろうか。
460:デフォルトの名無しさん
05/03/28 13:39:35
>>459
もれも良く分からんが、MIT pressから出てるSICPっていう本読んでると
無限ストリームっていうのが出てくるから、それ使うんじゃない?
A Gentle Introduction to Haskellっていう、Haskellの紹介文書
にも無限ストリームを使ったクライアントーサーバー処理の例が出てくるよ。
461:デフォルトの名無しさん
05/03/28 15:15:52
数学理論に立脚した言語で現実世界を対象としたプログラミングを行うことは間違いだ
462:デフォルトの名無しさん
05/03/28 15:16:30
>>461
はい?もう一度言ってもらえますか?よく見えなかったので。
463:デフォルトの名無しさん
05/03/28 18:39:05
>>459
たぶんlazyな言語に対して割り込みのformal semanticsを与えた人はいないと思う。
もの凄く難しい。
>>460
それは単なる入出力ではなかろうか。
464:デフォルトの名無しさん
05/03/28 20:05:44
イベントや割り込みであろうが入出力には違いないだろ
辻褄が合ってればいい
465:デフォルトの名無しさん
05/03/28 20:08:30
割込みは「単なる」入出力とは違うってことだろ
466:デフォルトの名無しさん
05/03/28 23:35:57
ghcでバイナリデータをバイト単位で扱うときって、Word8を使えばいいの?
Charだと数値との比較ができなくて不便。
467:デフォルトの名無しさん
05/03/29 01:36:32
MacOS X 10.3 で Haskell を使うのにお勧めの方法は何でしょうか?
Hugs98 か ghc になると思うのですが。 fink には入っているのは
どちらも Hugs98 2001-Feb と ghc 6.2 で少々古かったです。
468:デフォルトの名無しさん
05/03/29 02:58:49
Mac使うのを止めるのがオススメ!
469:デフォルトの名無しさん
05/03/29 04:16:23
そうだね。
爪弾きにされ、余計な苦労ばかり増えて良いところなんて一つもないし。
470:デフォルトの名無しさん
05/03/29 08:45:40
finkに頼らんでもHugsなら自分でmakeすればOKだし
GHCは本家にバイナリが用意してある
471:デフォルトの名無しさん
05/03/30 02:58:36
マイナー言語やる上で Mac は悪くないプラットフォームなんだけどね。
ML も主要なのは殆ど対応しているし。
472:デフォルトの名無しさん
05/03/30 03:06:14
haskellよりもMLの方が文法綺麗じゃないですか??そんなことないかな…
473:デフォルトの名無しさん
05/03/30 03:15:35
ML、特にSMLはDefinitionが出て以来そのままだからなあ(97年に改訂されたけど)。
Haskellの方も一応98はあるけど、そうじゃない部分は随時面白い話があるたびに
手を入れてきた感じなのは否めないのかも。
474:デフォルトの名無しさん
05/03/31 19:07:35
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
この 2 冊が欲しいのですが、中を確かめてから欲しいので
都内で在庫がある店知りませんか?
東京駅〜秋葉原〜神保町あたりだと助かります。
475:デフォルトの名無しさん
05/03/31 22:26:11
グランデに電話してみれば?
476:デフォルトの名無しさん
05/03/31 22:33:33
> 474
Haskell: The Craft of Functional Programmingはかなりおすすめです。
買って損はないと思います。
477:474
皇紀2665/04/01(金) 10:58:40
結局 Amazon で注文しました。
URLリンク(www.hatena.ne.jp)
ここに載っててありそうなところには電話かけましたが
店頭に在庫はないみたいでした。Amazon がない時代は
みんなどうしていたんだろう…。大学生協で取り寄せかな。
478:デフォルトの名無しさん
皇紀2665/04/01(金) 18:28:57
>>474
神田行けばいくらでもあるだろ。
デカイ本屋で在庫あるか訊いてみろ。
479:474
皇紀2665/04/01(金) 19:57:19
>>478
私には >>477 以外に出てくる本屋以外にデカイ本屋は知りません。
おすすめのコンピュータの洋書をあつかっている店の名前が分かる
なら教えてください。
480:デフォルトの名無しさん
int 2ch =05/04/01(金) 20:48:22
>>479
URLリンク(www.book-kanda.or.jp)
URLリンク(www.book-kanda.or.jp)
481:474
int 2ch =05/04/01(金) 21:56:48
明日、神田を周ってこようと思います。
ありがとうございました。
482:デフォルトの名無しさん
int 2ch =05/04/02(土) 12:12:07
>>474
君見て自分も思い出したように買ったよ
まあ回っても見つからないと思うよ
483:474
05/04/03 11:46:47
昨日行ってきました。
水道橋駅を降りて、神保町駅まで歩きその周辺の本屋を巡りました。
コンピュータの洋書を扱っているのが、三省堂の本店しか見つける
ことができませんでした。在庫はあらず。
いくらでもあるとのことなのですが、探しかたが悪いのか、
>>482 さんの言う通りなのか不明です。
Amazon から Haskell: The Craft of Functional Programming
は届いたので読みすすめてます。結構面白いです。
484:デフォルトの名無しさん
05/04/04 04:15:17
>>483
> コンピュータの洋書を扱っているのが、三省堂の本店しか見つける
> ことができませんでした。
え、マジ? それは探し方が悪いのでは。
485:474
05/04/06 17:39:21
そうですよね。もっと探検してみます。
486:デフォルトの名無しさん
05/04/07 12:56:04
オレも他にはゆうりんどう(字わからん)くらいしか思いつかない。いいとこあるなら教えてcray。
487:デフォルトの名無しさん
05/04/07 14:51:05
洋書なんて読むなよこの非国民が
488:デフォルトの名無しさん
05/04/07 15:41:08
英語も読めないの?国辱。
489:デフォルトの名無しさん
05/04/07 20:21:03
洋書 = 英語書かよ、この拝米主義者め
490:デフォルトの名無しさん
05/04/07 20:31:05
英語=拝米の方がよっぽど(ry
491:デフォルトの名無しさん
05/04/07 20:48:29
Haskell: The Craft of Functional Programming は英語だろ?
国辱どもが。
492:デフォルトの名無しさん
05/04/07 20:57:10
当たり前のことを言うな一知半解野郎
493:デフォルトの名無しさん
05/04/07 21:30:11
これがゆとり教育の弊害か。確かに国辱。
494:デフォルトの名無しさん
05/04/07 22:14:10
>>487-493
レベルの低い話は止めろ
495:デフォルトの名無しさん
05/04/08 22:34:40
科学とかに関しては日本なんてどうでもいい罠。
496:デフォルトの名無しさん
05/04/09 09:19:13
Haskellの勉強してると類(kind)という言葉が出てくる。
手持ちの関数型言語の参考書では見かけないので、類を扱うのは比較的
珍しいことなのかと思うのだけれど、どう?
なんでHaskellには類が必要なの?
497:デフォルトの名無しさん
05/04/09 13:07:49
Haskellだと、普通の多相型([]とかMaybeとか)に加えて
「型構築子から型構築子への写像」(StateTとか)のようなものを定義できるから、
単に「無引数の型構築子」だとか「1引数の型構築子」とかいうだけじゃ不十分だからだと思う。
まあ、似たような機能のあるC++では「類」なんて聞いたこともないんだけど。
関数型言語についてはよく知らんので誰かフォローよろしく。
498:デフォルトの名無しさん
05/04/09 13:52:32
WinXPで動くHaskellのコンパイラってある?
499:デフォルトの名無しさん
05/04/09 13:59:36
>>498
え?GHCがwindowsで動くでしょ???
500:デフォルトの名無しさん
05/04/09 14:23:03
∩ノ
/ つ
/ / / ̄ ̄ ̄ ̄
∧ ∧/ < 500ゲットぉぉぉぉ!
⊂(゚Д゚ ) 彡 \
⊂彡  ̄ ̄ ̄ ̄
____●●●___ バイーン
/ 〇 〇 \|/ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄|
501:デフォルトの名無しさん
05/04/09 17:40:30
498ではないが、
WINXP sp2 で GHC のインストーラはエラーで落ちました。
hugs98 は簡単にインストールできました。
502:デフォルトの名無しさん
05/04/10 11:03:22
言語仕様を見るとHaskellの方がはるかに機能的に見えるのだけど、実用面を見るとHaskellはボロボロ。
結局、開発するならOCamlに軍配があがるんだよね。
503:デフォルトの名無しさん
05/04/10 11:31:38
だから品質には期待するなとあれほど(ry
504:デフォルトの名無しさん
05/04/10 13:23:42
だからghcにバグはないとあれほど(ry
505:デフォルトの名無しさん
05/04/11 11:57:34
>>497
Haskellよく知らんけど、合ってるんじゃん?
C++のテンプレートは展開してからチェックするので、いらないんでしょ。たぶん。
506:デフォルトの名無しさん
05/04/11 12:08:44
>>463
>たぶんlazyな言語に対して割り込みのformal semanticsを与えた人はいないと思う。
>もの凄く難しい
Haskellよく知らんので何か勘違いしてるかもしれんが、
URLリンク(research.microsoft.com)
のA semantics for imprecise exceptionsの5.1節とか
Imprecise Exceptions, Co-Inductivelyは違うの?
507:デフォルトの名無しさん
05/04/11 20:32:57
Haskellで正規表現は標準でサポートされているのですか?
508:デフォルトの名無しさん
05/04/11 20:44:09
>>507
URLリンク(www.google.co.jp)
509:デフォルトの名無しさん
05/04/15 17:30:13
>>501
3月21日位にインストーラーが変わっている様なのですが、それでインストールしても
駄目ですか?
当方はXP SP2でインストールできています。
510:デフォルトの名無しさん
05/04/15 19:37:33
つーかインストーラーぐらいちゃんと作れませんか?
511:501
05/04/16 12:07:17
>>509
最新版でインストールもできましたし、ちゃんと動きました。
ありがとうございます。
512:デフォルトの名無しさん
05/04/17 22:00:14
imprecise exception 云々よりどっちかというと Asynchronous exceptions in Haskell の方が該当する希ガス。
513:デフォルトの名無しさん
05/04/17 22:05:22
この言語扱うのに数学の知識必須みたいだな。初めて使ったが…
514:デフォルトの名無しさん
05/04/17 22:19:40
そうなの?どの辺でそう感じた?
515:デフォルトの名無しさん
05/04/17 22:33:46
>>514
いや、大したことじゃないんだけど、集合論とか。
516:デフォルトの名無しさん
05/04/18 01:09:42
文系お断り言語
517:デフォルトの名無しさん
05/04/18 11:59:50
Text.Regex は入力を不必要に最後まで読んでくれたりして微妙に嬉しくないんだよなあ。
518:デフォルトの名無しさん
05/04/18 23:56:27
で、この言語なんて読むんだ?
はすくぇる?
519:デフォルトの名無しさん
05/04/18 23:57:21
ハスケルカリー
520:デフォルトの名無しさん
05/04/20 23:24:41
GHCのコンパイルがなかなか終わらない。
ひょっとして、マシンパワーがかなり必要なの?
普段使っているのはおんぼろラップトップなんだよね。
521:デフォルトの名無しさん
05/04/20 23:45:27
>>520
こちとら、PowerBookG4(867MHz,RAM640MB)で
2ステージ+testsuite が6〜8時間。
522:520
05/04/21 08:32:54
朝起きたら無事終わってた
GHCは普通のコンパイラとは内部構造がかなり違うようですな。
523:デフォルトの名無しさん
05/04/22 20:52:35
某スレでハスケルでGUIは辛いと言われてしまいました。
誰か反論の文句をおねがいします。
524:デフォルトの名無しさん
05/04/22 20:54:26
だからあれほどHaskellは実用アプリケーション作成向きでは無いと(小一時間
525:デフォルトの名無しさん
05/04/22 21:08:24
だからあれほどghcは完璧だと(ry
526:デフォルトの名無しさん
05/04/23 05:07:16
情処の記事を読んで触ってみた。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5385日前に更新/259 KB
担当:undef