[表示 : 全て 最新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 以降

314 名前:哲板過去ログから mailto:sage [02/07/19 17:42]
哲学板「論理なぜなにスレッド」の最後のレス
mentai.2ch.net/philo/kako/996/996975732.html

114 名前: 考える名無しさん 投稿日: 02/03/08 02:04
「論理学」スレの過去ログから。

229 名前: 考える名無しさん 投稿日: 01/12/10 18:21
論理学の基本的教科書とは何ですか?
様相論理とか線形論理を一通り学びたいのですが。
英語のものでいいものを教えてください。

230 名前: ↑ 投稿日: 01/12/10 18:39
A.S. Troelstra, Lectures Linear Logic, CSLI Lecture Notes 29 (1991)

線形論理の入門書で、線形論理のゼロからを勉強できる本です。線形論理導入のモチベーシ
ョンから始まって、様々なヴァリエーションの線形論理とそれらの性質、代数的、圏論的モデル、
proofnetと、基本的な部分はかなり幅広くおさえてあり、そしてとても解りやすいです。しかも周辺
のトピックも広く紹介されているので、その辺を調べながら読めば、線形論理に限らず、証明論
の勉強になるのではないか、と思います。ただし、大きな問題は、GirardによるLinear Logicのオ
リジナル論文(その他、その後のLinear Logic関係のあらゆる論文)と記法が紛らわしい、というこ
と。嫌でも混同しやすいLinear Logicの記号なのに、同じ記号を別の意味で読み替えたりしなけ
ればならず、かなり厄介ですので、それは覚悟の上でどうぞ。

231 名前: ↑訂正 投稿日: 01/12/10 18:43
A.S. Troelstra, Lectures on Linear Logic, CSLI Lecture Notes 29 (1991)
www.amazon.co.jp/exec/obidos/ASIN/0937073784/

315 名前:314続き mailto:sage [02/07/19 17:43]
>>314-315続き
235 名前: 考える名無しさん 投稿日: 01/12/12 17:18
www.amazon.co.jp/exec/obidos/ASIN/0415126002/
をかいなさい。

242 名前: 考える名無しさん 投稿日: 02/01/06 15:37
>>229
いまどきならTroelstraとかHughes-Cresswell(古臭いっ)よりこっちがいい。
非古典論理を統一的に学べます.
www.amazon.co.jp/exec/obidos/ASIN/041521534X/

日本語なら小野寛晰先生の本がおすすめ。

244 名前: 考える名無しさん 投稿日: 02/01/10 02:32
>>242
おいおい、Hughes-Cresswell の第二版は 1996年に出たばかりだぞ。
なんかがらりとかわって別の本みたいになってると思ったけど、違うっけ?

今どきで、お手軽で様相論理絡みの非古典論理というなら、俺は、
www.amazon.co.jp/exec/obidos/ASIN/052179434X/

これをすすめたい。安いし、哲学の話もそれなりに多く書いてあるから、
この板の人向きと思うが。

316 名前:291 [02/07/21 09:40]
おひさしぶりの291です。
私にとって言語(英語)の壁は厚いので
そんな立派な本は、ちょっと・・・
という感じです。

とりあえず「コンピュータサイエンス入門」と「線型論理入門」は買いました。
ゆっくり勉強したいと思います。

317 名前:デフォルトの名無しさん [02/07/21 13:30]
あーまてまて。^^; 最終目的にもよるが、linear typeの勉強をするのに、
linear logicの教科書まで読破する必要はないべ。(してもいいけど)
俺もlogicのほうは耳学問程度だが、linear typeのほうは
関連する研究で論文を発表できたぐらいには理解してる…つもり。

それよりもプログラム理論のお勉強のほうが重要かも。大堀先生の
「プログラミング言語の基礎理論」って教科書なんかどうだ。
線形型までいってないけど、それ以前に線形でない普通の型の理論を
理解しないと。

本を読むにしても、何も予備知識がないときついだろうから、以下で概説。
もし説明が下手で余計に混乱させちゃったらスマソ

318 名前:317 [02/07/21 13:41]
HaskellとかMLとか使ってれば、普通の型は知ってることにしていいよな。
言語によっていろいろと書き方は違うが、たとえばintだったら整数だし、
floatやrealだったら浮動小数だし、int -> floatだったら
整数から浮動小数への関数だし、int * floatとか(int, float)とかは
整数と浮動小数の組だし、要するに値を分類してるわけだ。

で、線形型ってのは普通の値の分類をもっと細かくして、
その値を使う「回数」の情報まで付け加えた型なんだ。
テキストだと書きづらいが、int ->1 floatとか
int ->0 floatとかint ->ω floatとか。
それぞれ、「1回だけ呼び出される関数」「決して呼び出されない関数」
「何回でも呼び出させる関数」の型。

319 名前:317 mailto:sage [02/07/21 13:51]
で、そんなのが何の役に立つかというと、いろいろとあって

・もう「決して使わない」ことがわかった値はゴミなので、ガベコレできる
・式の遅延評価をするときに、「1回しか使わない」とわかっている値は
 後のために覚えなくても良いので、オーバーヘッドを減らせる
・逆に「必ず1回は評価される」ことがわかってる式は、そもそも
 遅延評価しなくて良いので、やっぱりオーバーヘッドを減らせる
・同じように、「必ず1回は実行される」ことがわかってる副作用は、
 (Haskellのモナドみたく)遅延しなくても良いので、MLみたく
 その場で直ちに実行できる(?)

って感じ。最後のは俺がよく知らないので、Cleanとかに詳しい人がいたら
フォローをきぼんぬ。

320 名前:Super Combinator mailto:sage [02/07/21 14:00]
>>316
竹内外史の本はかなり手ごわい。

321 名前:317 mailto:sage [02/07/21 14:04]
最後にlogicとの関係だが、linear logicっていう「命題を使える回数」も
考慮した論理があって、linear typeも元々はそこから派生したそうな。

どんな論理かというと、よくある説明なんだが、
 命題P = 「あなたは120円を持っている」
 命題Q = 「コーラを買える」
 命題R = 「お茶を買える」
とおいて、Pと「PならばQ」と「PならばR」の3つが成り立っているとする。
すると、普通の論理ならPを2回ほど使って「QかつR」を結論できてしまうわけだが、
120円でコーラとお茶の両方が買えるってのはおかしいよな。

だから、そういう「使ったらなくなる」ものを考えに入れて、
「命題Pは一回しか使えない」みたいな性質も考慮できるようにした論理が
linear logicというわけだ。上の例だと、Qを結論することはできるし、
それとは別個にRを結論することもできるが、「QかつR」を同時に
結論することはできない。

322 名前:317 mailto:sage [02/07/21 14:11]
と、これぐらい知っていれば、後はCleanを使ってみるなり、
上のほうのWadlerのチュートリアルを読んでみるのが
(linear logicの教科書を読破するよりは)手っ取り早いと
思うんだが、どう? もちろん、特定の目的じゃなくて
一般教養としてなら、linear logicの勉強もいいかもしれないけど。

もし英語が苦手だと最初は大変かもしれんが、この手の
(わりと)新しい話を少しでも突っ込んで調べようと思ったら、
何でも英語は避けて通れないと思われ。っていうか、下手な
日本語の解説よりも、上手な英語の説明のほうがわかりやすいかと。



323 名前:Super Combinator [02/07/21 15:24]
andとorに分配法則が成り立つのと成り立たないのと二種類ある、
それがlinear logic。>>321みたいなのを特にresource logicと呼ぶことがある。

324 名前:317 [02/07/21 15:39]
ええと、323さんはなんでそんな風に思った?^^;
嘘を教わっているか、思い違いをしてそうなので、
例のInformation & Computationをのっとった、Girardの
オリジナルの論文を読むと吉かと思われ。

Girardの「しゃべる」英語は激しいフランス訛りで、
発表を聞いてても個人的に話をしても言ってることが
すげーわかりにくいが(笑)、上の論文はわりとわかりやすい。

325 名前:覚え違いスマソ mailto:sage [02/07/21 15:43]
誤: Information and Computation
正: Theoretical Computer Science

326 名前:291 [02/07/21 23:32]
どうも291です。
みなさんの親切なレスが貰えてうれしいです。

>>319
論文読んでもlinear typeの構造が判ったような気がするというレベル
で止まっていました。なるほど。

linear type関連の論文て意外と少ないような気がしたので、そのバックにある
linear logicを勉強すればlinear typeのことが判るかな?という安易な動機しか
なんですけどね。
でも記号の操作のしかた忘れたなー。完璧に。

あとCleanですか?Downはしてますけど、使ったとき無いです。
うーんCleanも勉強すべきなのかな?

327 名前:291 [02/07/22 01:02]
>大堀先生の「プログラミング言語の基礎理論」
この本は持っています。
読んでいますし、3割ぐらいは理解しているつもりです。
型推論も基礎となるアイデアも理解しているつもりです。

>上のほうのWadlerのチュートリアルを読んでみるのが
「Linear types can change the World!」は読んでいます
(20ページ程度の文書なら、英語でも読む気がするんですがね。)
でも、この論文は、317さんの解説のやつとは少し違うかな?

328 名前:293,301 mailto:sage [02/07/24 11:54]
あ、論理カゼを吹かせてしまったのは自分だ。スマソ m(_ _)m

Wadler の解説に目を通してみました。World 型の
ような、捨てたり複製しちゃいけないとかいう値を
導入するための仕掛けが線形型ってことですね。

monad の解説 "Imperative functional programming"
の 4 節にある、評価順序を保証するためだけにある、
受け渡されるだけで値は運ばない変数 w を表面に
引っ張り出して活用する、という感じなのでしょうか。

↑これは激しく勘違いかも。

上の >>319 で説明されてるところは、Haskellコンパイラ
方面で研究されてる必須性解析やら更新回避解析やらを
プログラマが明示できる/しないといけない、と感じたん
ですが、どうでしょうか。


329 名前:デフォルトの名無しさん mailto:sage [02/07/24 23:14]
Cleanに関するページのようです。
Cleanってすごいですね。
ttp://sky.zero.ad.jp/~zaa54437/

330 名前:デフォルトの名無しさん mailto:sage [02/07/25 22:22]
ttp://www.sysj.co.jp/sichp/msg0104_2.htm

331 名前:デフォルトの名無しさん mailto:sage [02/07/26 13:33]
藁藁

332 名前:デフォルトの名無しさん mailto:sage [02/07/26 18:49]
>>329のサイト、ブラウザで画像もJavaScriptもOFFにしてたら、トップページから中に入れない。
しかたないからHTMLソース見てみたら…

><!--
>こういっちゃなんだけど、人のページのソースを見るのはどうかと思いますよ。
>そういう人は今後このサイトには来ないようにして下さい。ええ。
>-->

コワイヨー




333 名前:332 mailto:sage [02/07/26 18:59]
あ、上の書き込みだけだと中傷にしか見えませんね。スマソ。
初心者の僕にはとても勉強になりました。つーか、大堀先生の本が読めなくて
ちょっとへこんでたんですけど、書評読んだらすこし元気が出てきました。
がんばるぞー。

334 名前:デフォルトの名無しさん mailto:sage [02/07/26 19:22]
>>333
わかんなければソース見てもいいと思うぞ。勉強になる。
あっちが見られる様な媒体で見られたくないものを置いている方が悪いんだから。

335 名前:デフォルトの名無しさん mailto:sage [02/07/26 19:53]
(゜д゜)<あらやだ!
www.amazon.co.jp/exec/obidos/ASIN/0201882957/

未だ全部読んでないのに、
Haskell:the Craft of Functional Programming
の第三版が出ちゃった!

……と思ったら日付が、


336 名前:デフォルトの名無しさん mailto:sage [02/07/26 20:04]
スゲ〜

二度と見に行くかよ、と思わせるためにやってるとすれば、
とっても効果的だ。

337 名前:デフォルトの名無しさん mailto:sage [02/07/27 00:35]
>>335
俺も一瞬そう思った

338 名前:デフォルトの名無しさん [02/07/27 00:49]
age toku yo

339 名前:デフォルトの名無しさん mailto:sage [02/07/27 01:15]
<!--
すぐに出せるようにと思ったんで、
今後の更新予定とかをコメントでつけてましたが、
それらは全部削除しました。
まあ確かにそんなものをつけるべきではないのかもしれませんね。
-->

コメント変わった?
ここ読んでる?

340 名前:デフォルトの名無しさん [02/07/27 01:35]
>>329
の書き込みは要するに自作自演書き込みって事でしょ。


341 名前:デフォルトの名無しさん [02/07/27 01:35]
世間が狭いだけでは

342 名前:デフォルトの名無しさん mailto:sage [02/07/27 09:03]
>>339
削除した理由が、


「まあ確かにそんなものをつけるべきではないのかもしれませんね。」

誰かに注意を受けたと取るのが一番か。



343 名前:デフォルトの名無しさん [02/07/27 09:34]
書評も的を射ていないっぽ

344 名前:デフォルトの名無しさん mailto:sage [02/07/27 14:07]
スレ違い。

345 名前:デフォルトの名無しさん [02/07/27 18:13]
CLEANを紹介したのはエライが、
自作自演とか、偉そうにWeb作ってるのはイクナイ。

346 名前:デフォルトの名無しさん mailto:sage [02/07/27 23:11]
なぜ自作自演?
とか書くと、これも自作自演と勘違いされるのだろうか?

>偉そうにWeb作ってるのはイクナイ
作っている分だけ偉いです。
ヒガミはイケナイネ。

347 名前:デフォルトの名無しさん [02/07/28 08:06]
Cleanのページ作ってる奴はここを読んでるやうだな。
Cleanってば名前しか知らなかったので、ページ作ってくれたのは非常に
よろしいと思う。イイ。

だけど、自分の理解が怪しいこととかまで、無理して書いてないかの?
斜めにしか読んでないが、なんか外してるところがある気がちょっとする。
>>339とかもどうかと思われ。

348 名前:デフォルトの名無しさん [02/07/28 08:29]
Haskellの話をしよ〜ぜ。

349 名前:デフォルトの名無しさん [02/07/29 00:25]
Haskell がメインの開発言語になってる会社ってありますか?

350 名前:デフォルトの名無しさん [02/07/29 08:46]
>>349
Galois Connections
www.galconn.com/


351 名前:デフォルトの名無しさん mailto:sage [02/07/29 10:31]
もし、今後 Haskell 本とか書くヒトが居たら、是非

「本書の内容の正否・当否についての質問・意見は、明確で
具体的な理由をつけて、匿名ではなく、hoge@hoge.jp まで
お願いします。また、これら以外のことに関する本書への
批判・評論は刑法230条又は231条等に触れる恐れがあり
ますのであくまでも自己責任でお願い致します。」

とでも、表 2 カバー裏あたりに書いとけば良いかも :-)

352 名前:デフォルトの名無しさん [02/07/29 10:38]
>>351
なんだそれは。
Cleanのページ作った人ですか?
突っ込まれたから、ぼやいている?

Haskellのページとかschemeのページは前からあるけど、
だれも苦情は言わないし、ありがとうしか言わない・・ですが?



353 名前:デフォルトの名無しさん mailto:sage [02/07/29 10:38]
「本書の内容の正否・当否についての質問・意見は、明確で
具体的な理由をつけて、匿名ではなく、hoge@hoge.jp まで
お願いします。また、これら以外のことに関する著作者への
批判・評論は刑法230条又は231条等に触れる恐れがあり
ますのであくまでも自己責任でお願い致します。」

こうだな、正確には。

354 名前:デフォルトの名無しさん mailto:sage [02/07/29 10:52]
>>351
バイアスかけるのは止めてね
Haskellのスレだし。

355 名前:デフォルトの名無しさん [02/07/29 11:30]
>>351
おまえ私怨か?

356 名前:デフォルトの名無しさん [02/07/29 13:33]
>>351マンセー(ww

357 名前:デフォルトの名無しさん [02/07/29 17:34]
Haskeルン

358 名前:デフォルトの名無しさん mailto:sage [02/07/29 20:55]
ああ、DUAL!ってやつ?


359 名前:デフォルトの名無しさん mailto:sage [02/07/29 23:02]
?

360 名前:デフォルトの名無しさん mailto:sage [02/07/30 18:13]
>>352
ぼやきか・・・
それはもしかしたらイタイ発言ではなかろうか

361 名前:332 mailto:sage [02/07/30 20:28]
なんか俺のカキコのせいで荒らされちゃってますね、スレの皆さんごめんなさい。
もう夏休みに入ってるって事をすっかり忘れてました。

362 名前:デフォルトの名無しさん mailto:sage [02/07/31 00:54]
>>361
お前のような万年厨も問題だがな



363 名前:デフォルトの名無しさん mailto:sage [02/07/31 02:40]
>>362
ハー。
人の振り見て・・・ということで。

364 名前:デフォルトの名無しさん mailto:sage [02/07/31 17:02]
>>363


365 名前:石敢當 [02/08/02 22:28]
Haskell 98 Report が本になるみたいですね。

366 名前:デフォルトの名無しさん mailto:sage [02/08/02 23:01]
>>365
母さんソース

367 名前:デフォルトの名無しさん mailto:sage [02/08/02 23:08]
じゃ、誰かものすごい勢いで日本語版も
出版してくれよな。

368 名前:デフォルトの名無しさん [02/08/03 08:55]
気づいたら最初のスレが立ってから一年過ぎてる。
最初のころはHaskellスレ限定コテハンも何人かいて妙にまたーりとしていた
気がするのだが、最近廃れっぷりが激しいな。最初のころのような勢いも無いし。


懐 古 う ざ い











          よね。

すまん。逝ってくる。

369 名前:デフォルトの名無しさん mailto:sage [02/08/03 09:25]
ネタがないんじゃよー

誰かお遊びで作ったプログラムとか貼ってくれませんか?

370 名前:デフォルトの名無しさん [02/08/03 15:03]
関数型言語初心者です。

Haskellでクイックソートのコードを以前見かけて、こんなにシンプルになるのかと感動しました。

では、バブルソート(二重for文で大小比較の単純なやつ)はどうなるのでしょうか。
iとjを引数にして二重に再帰を繰り返し、takeやdropで切り貼りするしか無いのでしょうか?
もっと効率のいいやり方があるのでは、と思うのですが…

371 名前:デフォルトの名無しさん mailto:sage [02/08/04 05:06]
>>370
それらしいものを書いてみようとしたら
選択ソートとバブルソートが混ざったような中途半端なものになった。

bubbleSort :: Ord a => [a] -> [a]
bubbleSort xs = bs xs []

bs [] _ = []
bs [x] rest = x : bs rest []
bs (x1:x2:xs) rest = bs (min x1 x2 : xs) (max x1 x2 : rest)

つか効率を気にすればするほど選択ソートっぽくなると思う。

372 名前:デフォルトの名無しさん [02/08/04 05:20]
このスレってほとんどコード出てきてないのな。



373 名前:デフォルトの名無しさん mailto:sage [02/08/04 07:27]
Haskellは犬ですか?

374 名前:デフォルトの名無しさん mailto:sage [02/08/04 13:54]
Haskellerと言ってもその程度。

375 名前:370 mailto:sage [02/08/04 16:19]
何故>>371でソートになるのか悩んで、紙に書いてようやく理解しました。
最小値を取り出して、それを x : bs rest [] で先頭に結合しているわけですか。

bs xs i j なんて関数を作って手続き型そのままにやろうとした俺とはえらい違いです。敬服。

376 名前:370 mailto:sage [02/08/07 22:54]
数日間が空いてはっと気付く…

>>371のコードですと、要素数に比例してスタックを消費してしまいませんか?
(半端な知識ですが、末尾再帰になってなく見えます。書き直せないところが厨ですが…)

関数型言語の場合、スタック消費は気にしない方がいいのでしょうか。

377 名前:デフォルトの名無しさん [02/08/10 10:05]
>>376
関数型言語では基本データ構造のリストが再帰的(末尾再帰ではない)に
定義されているわけで、そもそもスタックを消費しまくることを前提に
作られているでしょうから、スタックの消費をあまり気にしなくていい言語と
して使えるはず。

Haskell のような遅延評価が基本の言語では、自然な再帰のアルゴリズムの
プログラムを、末尾再帰のアルゴリズムのプログラムに書き換えることも、
計算のオーダーが変わるようなもの以外は、あまり、気にすることはない
気がします。

378 名前:デフォルトの名無しさん [02/08/10 11:42]
よく関数型言語で Xs, とかYsってvariableなんだけど、なんでXsなの?
この最後のSはどっからでてきたの?X,Y,Z,W,Vとかでいいじゃん。
Sなんてつけなくても

379 名前:デフォルトの名無しさん mailto:sage [02/08/10 12:14]
x:xs
複数形のsです。

380 名前:日曜Haskellerオヤジ [02/08/11 06:22]
ものすごい久々です、
現在はプログラミング基礎論の勉強がてら一緒に Haskell もお勉強モードな土日です。

>>368
特に初心者がやるときには、英語を勉強しつつ Haskell の勉強もしようとすると
忙しくなりすぎて、とりわけ社会人だと極度のんびり勉強モードになってしまいます。
そうすると、どうしてもネタが尽き気味になりますよね、
和書の入門書がぜひとも欲しいところです。
大学院の学生さんたちの誰かが執筆してくれればいいんですが、だれか書きませんかね?
Haskell は離散数学とか圏論とかとセットにすると非常に面白い本ができると思うのですがどうでしょう?

あと、圏論の専門本も是非とも欲しいところですね、これも本当にない、
まったくと言って良いほど本がない、あっても絶版ばかりで手に入りません。
シュプリンガーフェアラーク出版の「代数学とは何か」に書かれてあるのが、
手に入りかつ、知っている範囲なのですが、
これは数学の専門書でプログラマには少々というかかなりの難解ぶりです。

自分がなんとか読めそうと感じられる範囲では、
ここ www.etl.go.jp/etl/divisions/~yoshiki/ut97/
にあるんですが、これも内容を充実して製本された本が欲しいところです。

初心者向きといえば、以前工科大のページがあったんですが
消滅してしまっているようです、越田センセまた何かページつくってくれないかな・・


381 名前:デフォルトの名無しさん [02/08/11 07:14]
プログラムはじめてやるのにラムダカルキュラスは難しすぎる

382 名前:デフォルトの名無しさん mailto:sage [02/08/11 09:07]
nicosia.is.s.u-tokyo.ac.jp/members/hagiya.html
はぎゃー先生のページ面白い



383 名前:yuki [02/08/20 07:38]
====================================================================

すみません。初心者なのですがこんな質問に誰か答えていただけるのでしょうか?

function type は
[Key] -> [Token] -> [(Field, Value)]

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

Key で Token を検索して、結果があればFieldとValueでOutput すると言う
ファンクションです。例えば、
[key] = ["Name","Title","Address"]

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


output
[("Name","Yamada Taroh"),("Title","Mr"),("Address","Tokyo Shinjuku")]

になります。
TokenのArrayの中で、Fieldのあとは必ず ':', Valueのあとは ';'
になってます。それと、outputのfieldは単語ごとにスペースでくぎられた1つのstringになります。

誰か、アイデアでもいいので下さい。
すみません何分初心者なもので。 レスお待ちしてます。

=======================================================================

384 名前:デフォルトの名無しさん [02/08/20 08:36]
>>383
その区切り線には宗教的意味か何かでもあるのか?

385 名前:デフォルトの名無しさん mailto:sage [02/08/20 09:14]
>>383
宿題は自分でやりましょうね。

386 名前:デフォルトの名無しさん mailto:sage [02/08/20 11:42]
Haskellって、
学校の授業でどのくらい使われてるの?

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 って書くべきものなのだよ。






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

前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