[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 16:29 / Filesize : 199 KB / Number-of Response : 769
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型プログラミング言語Haskell



1 名前:潜伏していた1 mailto:sage [02/02/16 16:55]
何とか生き残れました。
前スレ
pc.2ch.net/test/read.cgi/tech/996131288/l50

関連 >>2 以降

387 名前:日曜Haskellerオヤジ [02/08/20 12:50]
宿題だとすると・・・そのまま答えを書いたらまずいかな(笑
私だったらこんな感じで作りますかね。

見ているとスペースのところで文字列が切断されていて非常に感じが悪いのでそれをまず結合します。
つづいてこの文字列リストから ":" , ";" を取り除いて出来上がり


388 名前:日曜Haskellerオヤジ [02/08/20 12:52]
おまけ
結合すべき文字列は直後が ";" ":" でないことに着目すると簡単に作れるでしょう。


389 名前:383 mailto:sage [02/08/20 12:55]
「Haskell言語プログラミングレッスン <上> Haskell言語を始めよう」
「Haskell言語プログラミングレッスン <下> 関数型言語を始めよう」

出版準備です。

390 名前:デフォルトの名無しさん mailto:sage [02/08/20 13:02]
出版準備?大丈夫かよオイ

391 名前:デフォルトの名無しさん mailto:sage [02/08/20 13:04]
ネタだろ…

392 名前:日曜Haskellerオヤジ [02/08/20 13:11]
よく見てみると、単に複数文字列があるだけじゃなくて、
レコードみたいになっていますね ';' ':' ブラウザはの見分けがつかない
間違っているので上記2レスは無しということでお願いします

';' でいったん文字列リストのそのまたリストに分解して
先頭を順序対の左
上記を取り除いた上での、先頭と末尾を取り除いた文字列の結合を右の順序対として
リストを作ればよいみたいですね。


393 名前:日曜Haskellerオヤジ [02/08/20 13:25]
>>389
本当ならうれしいですね、ちょっと作ってみましょう、しばらくかかります。

394 名前:デフォルトの名無しさん [02/08/20 13:27]
個人的には関数の型が気にいらんな。

type Assoc = [(Field, Value)]
lookupAssoc :: [Key] -> Assoc -> Assoc

をつくれ、としたほうが抽象化のレベルがあうのでないか。まあ、

parseAssoc :: [Token] -> Assoc

をつくって

lookupTokens :: [Key] -> [Token] -> [(Field, Value)]
lookupTokens keys tokens = lookupAssoc keys (parseAssoc tokens)

とすれば元の題意にはあうだろうが。








395 名前:デフォルトの名無しさん mailto:sage [02/08/20 14:00]
>>389
題名的には上下逆だろ。



396 名前:日曜Haskellerオヤジ [02/08/20 15:52]
関数型言語の素人のコードなので変かも知れませんが大体こんな感じになります。
本できたら、このスレッドに報告してくださいね、買います。

type Token = String
type Key = String
type Field = String
type Value = String

hoge_key = [ "Name" , "Title" , "Address" ]

hoge_token = [ "Name" , ":" , "Yamada" , "Taroh" , ";" , "Title" , ":" , "Mr" , ";" , "Address" , ":" , "Tokyo" , "Shinjuku" , ";" ]

-- ここが本体
func :: [Key] -> [Token] -> [(Field, Value)]
func k t = receive [] t
  where
    receive xcomplete remain
      | remain == [] = xcomplete             -- 全部完了
      | nokey     = receive xcomplete raw_recs    -- キー無し
      | otherwise   = receive (rec:xcomplete) raw_recs -- 成功
        where
          -- 先頭レコードのその以外のレコードの定義
          ( raw_rec , raw_recs ) = sprit_records remain

          -- キーと ':' と結合前の値のリスト定義
          -- 必要ならコロンのチェックをすること
          ( key : ( colon : value_token ) ) = raw_rec

          -- キーがあるかどうかの定義
          nokey = (has_member k key) == False

          -- 値の定義
          value = cat_value value_token

          -- 整形済みレコード
          rec = ( key , value )



397 名前:日曜Haskellerオヤジ [02/08/20 15:53]
続きです

-- トークン分解と ';' の取り除き
-- 末尾 ';' チェックはしていないので必要なら無限再帰防止策をとること
sprit_records :: [Token] -> ( [Token] , [Token] )
sprit_records token = receive ( [] , token )
  where
    receive ( x , (y:ys) )
      | y == ";"   = ( x , ys )
      | otherwise   = receive ( x ++ [y] , ys )


-- 空白を入れながら文字列の結合をする
cat_value (x:xs) = receive x xs
  where
    receive complete remain
      | remain == [] = complete
      | otherwise   = receive ( complete ++ " " ++ x ) xs
        where
          (x:xs) = remain

-- キー名があるかどうかチェック
has_member (key:keys) x
  | x == key   = True
  | keys /= []  = has_member keys x
  | otherwise   = False



398 名前:383 [02/08/20 20:19]
日曜Haskellerオヤジさん ありがとうございます。

なんか、本を出すことで盛り上がってるみたいなのですが。。
すみません、>389 は私ではないです。誰かがネタでやったみたいです。
なのに、期待して答えて頂いて感謝してます。

それと、すぐ宿題ってばれましたね(苦笑)。事実、海外でITを勉強してる学生です。
これはアサイメントで来週提出で7問中、1問だけとけてる状態です。そして、苦肉の策で
このスレに質問をしてみました。そして、みなさんにヒントを頂き感謝してます。

みなさんはかなりの知識をお持ちのようで、私なんてJAVAの教科は自分では得意だと
思ってやってましたが、haskelになると途端にややこしくなり、自分の頭の悪さを、思い知らされてます。
数学の知識がさらに必要となってきてますね。

日曜Haskellerオヤジ さん、参考になりました。ありがとうございます。
ついでにこのアサイメントの全容を貼っときました。(期待しつつ)。自分でやるつもりです。
海外は教科をパスするのがきついですね。

www7.big.or.jp/~mb2/bbs/up/img-box/img20020820192929.zip

また、質問があればさせていただいていいですか?

お礼のレス遅れてしまってすみません。なんか、私の使ってるプロバ、規制されてるんです。うー
だから、友人にメールで送って、それからレスしてもらってるので。すみません。荒らしではないですよ。


399 名前:デフォルトの名無しさん mailto:sage [02/08/20 20:25]
日曜オヤジさん、カコ(・∀・)イイ!!

400 名前:デフォルトの名無しさん [02/08/21 09:00]
>>383
hogehoge ks ts
= filter (\ (k,v) -> elem k ks) $ map hogera $ hoge ts
where
hoge [] = []
hoge ts = case break (";" ==) ts of
(_,[]) -> [ts]
(xs,_:ys) -> xs : hoge ys

hogera ls = case break (":" ==) ls of
(_,[]) -> (unwords ls, "")
(x,_:y) -> (unwords x, unwords y)


401 名前:デフォルトの名無しさん [02/08/21 09:02]
uge

402 名前:日曜Haskellerオヤジ [02/08/21 22:12]
>すみません、>389 は私ではないです。誰かがネタでやったみたいです。
やっぱりそうか(笑)

関数型は脳の回路がスイッチしないとやっぱり大変です、
普段の仕事では普通の言語を使っているので、土日に関数型に切り替えると毎週のように戸惑います。
JAVA 等で使われているオブジェクト指向的な考え方が頭の中に残っているとうまく組めません。

関数型プログラムのコツは写像を追うことと、
自分が欲しい結果を細部に分解しながら欲しいものを定義してゆくことだと思います。
しかし、これは考えても無駄で、なれるしかないです

>また、質問があればさせていただいていいですか?
どうぞ、このスレッドは最近ずっと寂れていたようですし、私が答えなくても
だれかが答えてくれると思いますし、私も書いてみます。


#ダウンロードしようと思いましたが、ファイルはもうアップローダーに残っていないみたいです。


403 名前:デフォルトの名無しさん mailto:sage [02/08/22 03:18]
まずfという関数があり、それはトークンの列を受け取って題意の処理を行うと仮定します。

1. 次の関数
g v [v1, ..., vn,":"]++xs=(v++" "++v1++" "++...++" "++vn,f xs)
を作りましょう。

2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら
f [n,";",v1, ..., vn,":"]++xs = (n,v1++" "++...++" "++vn):f xs
そうじゃなかったらf xsを返します。fの定義はkのスコープの中で行われるものとします。

3. 最後に二つの関数をまとめてansを作りましょう。ansはキーのリストとトークンのリストをとり、
f,gを内部で定義してfにトークンのリストを渡します。

宿題の答えを書くのもアレなので、こういうかたちにしてみました。


404 名前:デフォルトの名無しさん mailto:sage [02/08/22 03:23]
>>403
> 2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら
2. gを使って関数fを定義します。関数fは、もしnがキーのリストkに現れていたら
でした。舌足らずですた。

405 名前:デフォルトの名無しさん mailto:sage [02/08/26 10:16]
東大の「こ・何とか」って人は何人?



406 名前:デフォルトの名無しさん mailto:sage [02/08/29 13:10]
nisseicom.co.jp

407 名前:日曜Haskellerオヤジ mailto:sage [02/08/30 00:01]
>>403
ん、お盆休み明けてのぞいてみれば、だれもレスを付けていないのか・・・
今週末ちょっと考えて見ます。


408 名前:日曜Haskellerオヤジ [02/08/31 17:37]
やっと週末、必死こいて圏論勉強中の日曜Haskellerオヤジです。

ちょっと読んでみたんですが、正直題意が良くわからなかったです。
これはレスつけられないのでは、と思いました。
出題は、宿題のパターンでよいとは思います。ただし、宿題は自分の良心で自分でやりましょうね。(笑

ちなみに、引数に使ったラベルに意味説明を入れたほうが良いと思います。
いきなり v とか v1 とかで説明されてもわかりにくいです。

v1 v2 ... は入力トークンで、末尾は ":" です、
そのリストを [v1 , ... vn , ":" ] とします。

みたいな感じで書いた方がよいのではないかと感じました。
v はキー・・・・なんでしょうか?
あと、2については、 f の中に g が見当たりません。
( v ++ " "++v1++" "++...++" "++vn,f xs) = (n,v1++" "++...++" "++vn)
なんでしょうか?



409 名前:デフォルトの名無しさん [02/08/31 17:43]
正直ハスケルってどこで使うの?別に煽りじゃなくて、
どういうところで使われてるか不思議で。shcemeとかは
dr schemeのチュートリアルで結構仕事があるみたいなことを
書いてあったけど。

410 名前:デフォルトの名無しさん mailto:sage [02/09/05 10:28]
>>409
学校

411 名前:デフォルトの名無しさん mailto:sage [02/09/07 12:25]
>>410
(小)

412 名前:デフォルトの名無しさん mailto:sage [02/09/07 12:25]
>>400 kakoii! tuka hutuu dakedo, >>396-397 no ato ni miruto kakoii!

413 名前:デフォルトの名無しさん [02/09/07 12:42]
www.sampou.org/nobsun/journal/?0320
そこでいう setter って x {foo = "chample"} みたいなのじゃないんすか?

data Foo = Coo { foo :: String, bar :: Integer} deriving Show
x = Coo { foo = "sample", bar = 12345 } -- 初期化
main = print x >> print (x {foo = "chample"})

と、こんなところで半年近くも前の話に質問をしてみるテスト。

414 名前:デフォルトの名無しさん [02/09/07 13:11]
>>413
君はこういう (www.bier-reise.com/cooking/recipe/go-ya/chample.htm)
つもりなのかもしれんが、"チャンプル" でなく "チャンプルー" と伸ばすこともあり、
chample よりは champloo って書くべきものなのだよ。

415 名前:デフォルトの名無しさん mailto:sage [02/09/07 15:41]
>>352
なんだそれは。



416 名前:デフォルトの名無しさん [02/09/07 23:10]
ここらへんで一丁Haskellで

七行プログラミング part2
pc3.2ch.net/test/read.cgi/tech/1018840143/

に乱入して、関数型言語の恐ろしさを見せつけてやりませんか?

Haskellなら相当な事が出来そうですが(今↑ではやりのRLEとかも)


417 名前:デフォルトの名無しさん mailto:sage [02/09/07 23:28]
おまえがやって見ろよ

418 名前:デフォルトの名無しさん mailto:sage [02/09/08 02:11]
>>416
大して戦果をあげれないと思う。入出力とか弱いし。
Haskell 向きなのを何か考えればアレかもしれんが。

419 名前:デフォルトの名無しさん mailto:sage [02/09/09 13:38]
モナドパーサ

420 名前: [02/09/18 03:35]


421 名前:デフォルトの名無しさん mailto:sage [02/09/18 06:54]
7行プログラミングってPerlが一番凄そう。


422 名前:デフォルトの名無しさん mailto:sage [02/09/18 16:41]
むしろperlはそのための言語。

423 名前:司馬乱 [02/09/27 23:46]
>>408
久しぶりにこのスレ覗いてみたら寂れてますねー.
コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?


424 名前:日曜Haskellerオヤジ [02/09/30 14:31]
そーですねー、淋しいです。

>コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
取り合えず私にはあります、だれか作ってー
離散数学に興味を持ったところ、そのまま勢いでこれも面白くなってきています。
もっとも、一般位相はしらないわ、集合論はしらないわで大変ですが・・・
Haskell という言語はこういうものを勉強するときに便利ですね。


425 名前:デフォルトの名無しさん mailto:sage [02/09/30 16:02]
www.mail-archive.com/haskell@sampou.quickml.com/index.html



426 名前:石敢當 [02/09/30 22:16]
>>423
なぜコンピュータサイエンスに圏論なのか、圏論を勉強すると
プログラムを作成するにあたりどんな嬉しいことがあるのか、
などについて序章あたりに書かれているような本だったら買いたいです。

英語で書かれたのを1冊持っていますが、なかなか読み進めません。
ありがたみを実感できる章にたどり着けばはずみがつくと思うのですが・・。


427 名前:デフォルトの名無しさん [02/09/30 22:58]
>>426
その本とはなんでしょう?
さしつかえなければ教えてください。

428 名前:デフォルトの名無しさん [02/09/30 23:17]
圏論ですか、下の本で見たときがあります。
情報数学講座7 プログラム意味論 横内寛文 共立出版 1994.6

それにしてもプログラミング処理系は、実用的にするため色々な拡張が施され
ています。そのため純粋な数学との間には大きな溝が出来てしまってい
るような気がします。


429 名前:デフォルトの名無しさん mailto:sage [02/10/01 00:43]
これが圏論だっていうコードを見れば
分かるようになるかも。

430 名前:デフォルトの名無しさん mailto:sage [02/10/01 23:00]
Frege構造って何?

431 名前:石敢當 [02/10/02 01:07]
>>427
Bird & de Moor の "Algebra of Programming" です。


432 名前:司馬乱 [02/10/02 01:08]
コンピュータサイエンスの場合,圏論の代数的な面を強く出すよりは
論理や型理論と一緒にやる方がいいと思いますが(代数は等式論理なので)
どうやって動機付けするのがいいのかな.

圏論には多分
- プログラムの意味論を厳密に議論するための言葉を提供してくれる
- 様々なプログラミングのメタファーを提供してくれる
という二つの面があると思いますが,お互いに依存しあっているので
最後まで引っ張っていく書き方というのは結構challengingかも.
きちんと書くと今度は厚くなりそうだし.

433 名前:司馬乱 [02/10/02 01:27]
>>431
たしかallegoryとか使っているやつですか?

434 名前:石敢當 [02/10/02 22:07]
>>433
はい、そうです。

>>きちんと書くと今度は厚くなりそうだし.

執筆する側としては厚い本を書くのは大変だと思いますが、
読む側としては多少厚くても難解な薄い本よりはずっと
ありがたいです。もっとも、431の本をなかなか読み進めない
一番の理由は十分な間を取れていないからで、難解とか言う
以前の問題です。


435 名前:デフォルトの名無しさん [02/10/02 22:17]
>>432
というような会話を、約10年程前にしてたんですけど、
相変わらずそのスジでは必須科目(wなのですか?




436 名前:デフォルトの名無しさん [02/10/02 22:34]
多分、答えないと思うけど(w

437 名前:日曜Haskellerオヤジ [02/10/04 00:02]
>>429
圏論というのは、集合論の代わりになるもので、集合論が「要素」の論理
であるのに対して、圏論は「要素」と「要素」の間の関係の論理です。
集合論を置き換える為の物のようです。( 多分(^^; )

圏論って定義は分るんですけれど、その意味しているところは難解です、いまだに分りません。
しかも定義も注意深く定義を読まないと、いきなり変なところにはまり込んでしまいます。
私は ob(C) が「点」とか書かれていて最初こんがらがっていました。
ついでに射も最初はこんがらがってました。
#といいますか、全部だ・・・

もし分らないのが圏論の定義なら
しょうもない集合でいいので一個具体的に作ってみると少しづつ分ってきます。
たとえば { {false,true} , {0,1} } = ob(C) から出発して
全部作ってみるといいですよ。

#ちかごの感じるんですが
# 圏論 : 関数型
# 集合 : オブジェクト指向
#「点」が中心の時がよいのか「射」が中心の時がよいのか
#時々強烈に的確に記述できる関数型の特徴の正体が見えたような見えないような・・・


438 名前:デフォルトの名無しさん [02/10/04 02:09]
わたしの、数学から見たイメージでは、
集合論:構成的(実装を扱う)
圏論:公理的(インターフェースを扱う)

射の位相空間での実装は連続写像、群での実装は準同型写像って感じ。

インターフェースのみを使って記述すれば、そのインターフェースを
持っているどんな実装でも成り立つものを作ることができる。
また、インターフェースを前に出すことで、性質を明確に記述でき、
性質の比較ができる。
などのことが、圏論のメリットと感じます。

コンピュータサイエンスで圏論がどう使われているのかは知りませんが。
いや、数学でもあまり知らないんだけど。

439 名前:デフォルトの名無しさん [02/10/09 23:28]
>>423 >>432
もしかして書く気ですか?

440 名前:デフォルトの名無しさん [02/10/14 04:00]
Hugsって、そろそろバージョンアップしたりしないのかな。
テンキーの'/'が効かないのはなぜ?


441 名前:日曜Haskellerオヤジ [02/10/15 22:08]
越田一郎先生のページが復活していたので記念上げしておきます。
チュートリアルとしては最適と思います、私もこれを使っておぽえました。
www.teu.ac.jp/kougi/koshida/Prog6/index.html


442 名前:デフォルトの名無しさん [02/10/28 04:33]
寝られないので今さっき勉強始めてみました、あげ

443 名前:デフォルトの名無しさん [02/10/28 05:04]
Haskell ?
なにそれ?

444 名前:デフォルトの名無しさん mailto:sage [02/10/28 05:09]
>>443
若者向けのLisp


445 名前:デフォルトの名無しさん [02/10/28 05:18]
>>444
若者向けのLisp



446 名前:デフォルトの名無しさん [02/10/28 09:38]
prologの方がいいよ

447 名前:デフォルトの名無しさん mailto:sage [02/10/28 09:47]
んなわきゃねぇ(w

448 名前:442 mailto:sage [02/10/28 10:08]
越田先生のチュートリアルいいよ。
公式のドキュメント読んでもいまいちだったけど、
これ読んだらけっこうすんなり入ってきました。

東京工科の学生には負けられません。

449 名前:デフォルトの名無しさん mailto:sage [02/10/28 10:56]
`ってどこ?っていうのがFAQかよ(藁

450 名前:デフォルトの名無しさん mailto:sage [02/10/28 11:29]
pの横にあるキーボードもありますけどね。

451 名前:デフォルトの名無しさん mailto:sage [02/10/28 11:41]
キーマップが違っててもすぐ分かるだろ

452 名前:デフォルトの名無しさん mailto:sage [02/10/28 12:15]
わからんキーはかたっぱしから押してみるのが近道だろうが
最近はヘタなキー押すとサスペンドしたりユーザー切り替わったりするらすいな。
なんでこれ以上ボタン増やしたがるのかわからんよ。

453 名前:442 mailto:sage [02/10/28 12:20]
あのー、スレ違いなんですけど。。。

454 名前:名無しさん@Emacs [02/10/29 18:38]
越田先生の
fibStep :: (Integer, Integer) -> (Integer, Integer)
fibStep (u, v) = (v, u+v)
fibPair :: Int -> (Integer, Integer)
fibPair n
  | n == 0 = (0, 1)
  | otherwise = fibStep (fibPair (n-1))
nacchi :: Integer -> Integer
nacchi = fst . fibPair
このnacchi関数サイコー!
ところでIntegerは最高何桁まで扱えるんでしょうか?
nacchi 10000 ぐらいまでは余裕みたいですが。

455 名前:デフォルトの名無しさん mailto:sage [02/10/29 18:45]
(●

(略




456 名前:名無しさん@Emacs [02/10/29 20:17]
越田先生の10/9の再帰的関数と組の問題を解いたのだけど、
かなり汚いです。だれかスッキリした正解を教えて下さい。

maxOccursTwo :: Int -> Int -> (Int, Int)
maxOccursTwo a b
| a > b = (a, 1)
| a == b = (a, 2)
| otherwise = (b, 1)

maxThreeAux :: Int -> (Int, Int) -> (Int, Int)
maxThreeAux a (b, c)
| a == b = (a, c + 1)
| a > b = (a, 1)
| a < b = (b, c)

maxOccursThree :: Int -> Int -> Int -> (Int, Int)
maxOccursThree a b c =
maxThreeAux a (maxOccursTwo b c)

457 名前:名無しさん@Emacs [02/10/29 21:25]
越田先生の10/16の「リスト」の問題なんですが、

innerfunc :: Int -> Int -> [Int]
innerfunc num op
  | op == 0 = []
  | num `mod` op == 0 = innerfunc num (op-1) ++ [op]
  | otherwise = innerfunc num (op-1)
divisors :: Int -> [Int]
divisors num
  | num <= 0 = []
  | otherwise = innerfunc num num

これでリストに要素を追加しようと思い":"を使おうと
思ったのですが、これの型はa -> [a] ->[a]
なので使うことができません。
[a] -> a ->[a]という型の関数はないんでしょうか?
[op]っていう書き方がなんとなくダサい気がします。
そういう関数は組込みであるんでしょうか?

というか組込み関数一覧みたいなのってどっかにありません?

458 名前:名無しさん@Emacs mailto:sage [02/10/29 21:47]
divisors関数を使った素数判定はこうかな?

isPrime :: Int -> Bool
isPrime num
  | num <= 2 = False
  | length (divisors num) > 2 = False
  | otherwise = True

なんとなくHaskellが楽しくなってきました。
東京工科大のやつらがうらやましひです。。。

早くIO使った実用的アプリを作れるところまでいきたいのぉ

459 名前:名無しさん@Emacs [02/10/29 22:27]
型変換するよい方法はないでしょうか?

hugs上で
>:type "abc"
"abc" :: String
>:type ["abc"]
["abc"] :: [[Char]]

となってしまいます。本当は[String]となって欲しいわけですが、
Charのリストのリストになってしまうんですね。
どうしてなんでしょう? そこで、
>:type ["abc"::String]とかやってみてもダメですね。[[Char]]になります。
:type 1::Intならうまくいくんですが。。。

460 名前:デフォルトの名無しさん mailto:sage [02/10/29 22:47]
String は [Char] の別名だから。

www.haskell.org/onlinereport/basic.html#characters
↑を見てみればわかるように言語仕様で
type String = [Char]
というセマンティクスが規定されてる.


461 名前:名無しさん@Emacs [02/10/30 00:05]
>>761 ありがとうございます。
CharとStringの扱いですが、なかなか難しいですね。
おなじくhugs上で
>("aaa","b") == ("aaa", 'b')
というのはもちろんエラーになるわけですが、
Stringとなって欲しいようなところで[Char]と評価されて
しまうので。。。

チュートリアルの図書館データベースの問題で、

type Person = String
type Book  = String
type Record = (Person, Book)

-- 図書の返却を行う関数
isData :: Record -> Record -> Bool
isData record1 record2
  = record1 /= record2
returnLoan :: Database -> Person -> Book -> Database
returnLoan remove_person remove_book
  = [ record | record <- exampleBase, isData record (remove_person, remove_book)]

これだと
ERROR "library.hs":54 - Type error in application
*** Expression : isData record (remove_person,remove_book)
*** Term : (remove_person,remove_book)
*** Type : ([([Char],[Char])],[Char])
*** Does not match : ([Char],[Char])
というエラーが出ます。んー、わからんです。

462 名前:名無しさん@Emacs mailto:sage [02/10/30 00:06]
s/761/460/
でした。すんません。

463 名前:名無しさん@Emacs mailto:sage [02/10/30 00:10]
×returnLoan remove_person remove_book
○returnLoan exampleBase remove_person remove_book
でした。質問忘れてください。m(  )m

464 名前:名無しさん@Emacs mailto:sage [02/10/30 01:06]
それでもあれですね。思ったより簡単ですね。
もっとCやPerlと比べて難しいかと思っていたら
そうでもなかった。二日である程度慣れました。
ループを一切使わずに全て再帰で書くのは
なれないうちはしんどそうだけど、見返りとして
バグの出にくいプログラムになるのかな。

これがすらすら書けるようになったら
この言語で仕事してみたいですね。
手っ取り早くHaskellを活用できる分野というと
XMLの処理系でしょうか。
Haskellについてはまだよくは分っていませんが(藁)
他の言語より向いている気がするんですね。
もっとフォーマルなプログラムにおいてこそ
こういった言語は意味をなすのかもしれないけど、
多分そういうのはヘタレには無理だろうし(w
とりあえず、IO、スレッドが使えるまで基礎勉強ですね。

無料で使わせてもらっていて、講義より先に
問題に関する質問をここに書いてしまっては
先生に申し訳ないのでここらへんでやめにしておきます。

先生には入門者用の本を書いてほしいなあ。

465 名前:デフォルトの名無しさん mailto:sage [02/10/30 01:31]
>>464
IBMのdeveloperWorksサイトに、HaskellでXMLを云々って記事が有ったね。
既出だろうけど。




466 名前:名無しさん@Emacs mailto:sage [02/10/30 01:47]
>>465
なるほど、それでかな。
Haskellを使ってみる前からXMLの処理には
関数型言語が向いている気がしてたんです。
ただ単に自分が以前DWを読んだだけだったのですね(汗

関数型言語初体験の感想としてなんですが、
JavaやC++ではいかようにも書けてしまうのが
むしろあまりよくないことに思えてきました。
アルゴリズムを素直に表現してそれがそのまま
プログラムになっているという。素晴らしいです。
久しぶりに萌え萌えです。

もっと綺麗に書けるよう努力せないかんですね。

467 名前:名無しさん@Emacs mailto:sage [02/10/30 07:49]
朝起きてから、Haskellスレパート1を見てたのですが、
2chに神が君臨したかのようなレベルですね(汗
自分の書き込みが恥かしくなって来たのでしばらく潜伏します。
早くみなさんのレベルに追いつきたひ。。。

これだけじゃ情報価値なしなのでせめてリンク
純粋遅延関数型言語 Concurrent Clean
sky.zero.ad.jp/~zaa54437/programming/clean/
このサイトの書評は私のような初心者には参考になりそうです。
また管理者の人はCleanシステムのドキュメントの翻訳を精力的に
行われています。素晴らしいです。

468 名前:デフォルトの名無しさん [02/10/31 21:02]
英語サイトで東工大くらいの難易度のチュートリアルってあります?

469 名前:デフォルトの名無しさん [02/10/31 21:19]
ゲージンはいきなりGentle〜を読んでコード書き出すの?
なんか信じられないんだけど、あれより簡単なドキュメントって
英語じゃみたことないよ。

470 名前:468 mailto:sage [02/10/31 21:31]
>>469
情報どうもです。
テーマごとに手ごろな課題がついてて段階的に
ステップアップできるようなのがいいんですが。
もうちょっと探してみます。

471 名前:デフォルトの名無しさん [02/11/02 09:19]
これってまじですか?
research.microsoft.com/Users/simonpj/papers/meta-haskell/

というかAlexandrescuに触発されたとか。。

472 名前:デフォルトの名無しさん [02/11/02 11:51]
>>464
関数型言語でXMLを扱う例としてこんなのがあります。
xduce.sourceforge.net/
メインの開発者は日本人です。
実装はHaskellじゃなくてMLだけど。


473 名前:デフォルトの名無しさん [02/11/02 15:15]
Haskell.NETはどうなりますたか?


474 名前:デフォルトの名無しさん [02/11/03 11:45]
classって使ってます?
ghcのソースコード見ても殆ど使ってないんだけど、、、
C++がめんどくさくなるとという理由から敬遠されるのと
同じような理由で型クラスも使われてないとか?

475 名前:460 mailto:sage [02/11/04 11:04]
ttp://www.haskell.org/onlinereport/basic.html#sect6.3
(6.3 Standard Haskell Classes)の図にある如く
言語仕様で定義されてる基本型からして使いまくりですが? >>474




476 名前:デフォルトの名無しさん mailto:age [02/11/07 21:28]
>>471


477 名前:デフォルトの名無しさん [02/11/07 21:57]
I/Oとかの副作用処理って、モナドがファイナルアンサーですか?
他に良い方法無いの?(Haskell固有の話じゃなくて)

478 名前:デフォルトの名無しさん mailto:sage [02/11/07 23:30]
自分で考えろ

479 名前:名無しさん@Meadow mailto:sage [02/11/07 23:44]
pc3.2ch.net/test/read.cgi/tech/1007387924/717


480 名前:デフォルトの名無しさん [02/11/10 23:22]
ユニークな型ねー。
これだけで解決?

>>478
あなたも一緒に考えましょうよ。

481 名前:デフォルトの名無しさん mailto:sage [02/11/10 23:43]
他にもあるよ。
・lazyなストリームとみなす。
・continuationを使う。

482 名前:デフォルトの名無しさん [02/11/11 01:28]
そもそもLazyなのがいけないんだろ

483 名前:デフォルトの名無しさん mailto:sage [02/11/11 16:00]
このスレ相変わらずプログラムコード量が著しく少ないねぇ

484 名前:480 [02/11/12 03:32]
>>481
その2つの方法もありますね。
でも古典的(あまり普及できない)方法なのでは?

485 名前:名無しさん@Meadow mailto:sage [02/11/12 12:55]
>>482
> そもそもLazyなのがいけないんだろ

‥‥‥誰もつっこまないのか。


っつうかオレ釣られた?




486 名前:デフォルトの名無しさん mailto:sage [02/11/13 15:44]
面倒なんで突っ込む必要なし

487 名前: ◆y3A2MadQ16 mailto:sage [02/11/14 05:57]
苦労の割にありがたみが少ないということかもね…。
嫌いじゃないんだけど、導入の旨みが苦労に勝っていると証明できないんで、
最近はLazyにも個人的に放置気味…。>Lazy Evaluation

代わりにという訳でもないが最近は部分評価野郎になってまつ。
(その上、HaskellどころかJava野郎に成り下がってまつ(w。)






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef