トップページtech
983コメント385KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
あまり馴染みのない人の多い関数型プログラミング。
Haskellを通じて、みんなで勉強しましょう。
0002デフォルトの名無しさんNGNG
Haskellの公式HP
http://www.haskell.org
インタプリタHugs
http://www.haskell.org/hugs
日本語サイト
http://www.sampou.org/haskell
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
0003デフォルトの名無しさんNGNG
参考スレ:関数型言語
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=987954395
0004デフォルトの名無しさんNGNG
さくっと作ってみた階乗計算。
myfactorial 0 = 1
myfactorial n = n * myfactorial (n - 1)

関数myfactorialの引数が0の時、1を返し、
それ以外なら、n * myfactorial(n - 1)を返します。
再帰を用いて記述しております。
簡単すぎる例かな?
0005デフォルトの名無しさんNGNG
参考図書
「プログラミング言語」

岩波講座  ソフトウェア科学〔基礎〕4

ISBN4-00-010344-X  岩波書店

武市 正人 著

菊判  248頁  本体 3,200円  1994年6月17日 発行
0006デフォルトの名無しさんNGNG
関数型プログラミングっていいよね。
Lispのcondや、Haskellの | を読むとき、
その条件ごとの文の内容が、非常に読みやすい。

HaskellはLispと違って、中置記法じゃないのも自分としては良かったかな。
0007石敢當NGNG
参考図書

>>1 「Haskellを通じて」

ということなので、Haskell以外でも良いのかな?

MLの本になりますけれど、次の本は効率の
良いコードを書くための大変良い参考書となりました。
(後半はほとんど読んでいませんが・・)
Haskellのコードを書く際にも役立つと思います。

Lawrence C. Paulson
"ML for the Working Programmer(2nd Ed)"
Cambridge University Press, 1996


面白そうに思ったので先日つい衝動買いしてしまった本が、

Chris Okasaki
"Purely Functional Data Structures"
Cambridge University Press, 1998

です。最初のほうをパラパラと斜め読みした程度
ですが、面白そうな匂いを感じました。

Haskellなどは趣味でいじっているだけなので、
なかなかゆっくり本を読む時間を取れません。
仕事で使う機会があれば・・という思いは
実現しそうにありません。
00081NGNG
あぁしまった
Haskellを通じてどうのこうの、じゃないっすね。
ちなみに、他の関数型言語に関しては、>>3 を参考にされると
よろしいかと思われます。
0009デフォルトの名無しさんNGNG
Haskellで、「状態」を扱いたいときはどう組めばいいんでしょう?
プログラミングレベルでは「状態」でなくても、Haskellで構築された
アプリケーションのユーザーから見て「状態」はどうしても
あるわけですよね?
それをHaskellプログラミングではどのように対処したら良いのでしょう?
0010デフォルトの名無しさんNGNG
関数型言語スレの25を引用すると…
>純粋な関数型言語(Haskell等)には代入がない。つまり状態はありません。
>ではどうしているかというと、mainルーチンを現在の計算機の状態をうけとり
>新しい計算機の状態を返す関数だと考えることで回避しています。

となっております。
…関数型言語の定義から勉強してきます
0011デフォルトの名無しさんNGNG
たぶん 1 はもう知っているんだろうけど。

Why Functional Programming Matters
http://www.cs.chalmers.se/~rjmh/Papers/whyfp.html
0012名無しさんNGNG
じゃあ、とりあえず、
 モナ度がワケ、分か、らん┐(´_`)┌
0013デフォルトの名無しさんNGNG
http://tanaka-www.cs.titech.ac.jp/%7Eeuske/scm/index.html
> Why Functional Programming Matters
> なぜ関数型言語が重要なのか、その利点をわかりやすく解説した ためになる文書。翻訳したいなあ。
してよ。

っつーか、やっぱ Haskell の前に英語勉強した方がいいよな。
0014デフォルトの名無しさんNGNG
質問君ですみません。
foo :: Int -> Int
のような、関数の引数と返り値の型定義を行っても行わなくても
関数は実行できるのですが、これは実行速度の向上や、
不正な型が来たときにエラーを返すため、と考えていいのでしょうか?
0015デフォルトの名無しさんNGNG
実行速度とかには影響無いです。>>14
(コンパイル速度は変わりそうだけど。)
fooの定義だけで入出力の型が決定すれば、
明示的な型宣言は必要無いんじゃなかったかな。
もし、型が曖昧であれば、コンパイル時に処理系がエラーを返す筈。

あと、haskellは静的型付けだから、実行時に不正な型とかで
エラーになる様な事は無い気がするけど。
Haskellでも動的型とかで実行時型エラーって起きるのかな?
0016デフォルトの名無しさんNGNG
Haskell 入門は読んだはいいけど、
その先、親しみやすいサンプルプログラムがないんですよね。
他にも僕みたいな人は結構いると思うので
なんか面白いソースで短いのあったらみんなで載せていく、っていうのはどうでしょう。
0017デフォルトの名無しさんNGNG
一生懸命、東工大の課題を解いていますが、
それの答えを載せてしまっては、東工大の学生さんに申し訳ないですよね
0018Haskellを256倍……NGNG
Haskell本出ないのかなぁ。
つーか、1に出てる東工大の先生に書かせるしか。
0019デフォルトの名無しさんNGNG
Hugs98使ってみようと思うんですが、
落とすファイルってこれだけでいいんですかね?
hugs98-Feb2001.zip
win32exes.zip
hugs.hlp
(コンパイラ(GHC)の方は大きい(22M)ので止めた)
002019NGNG
あ、winhugs.exe実行したら、無事窓が出て、
Prelude>
とプロンプトまでは出ました。

さて何しよう・・・
0021デフォルトの名無しさんNGNG
とりあえず、東工大の演習問題で鍛えてみるのはいかがでしょう?
0022デフォルトの名無しさんNGNG
>>20
ちなみに先に言っておくと、
そのHugsはソースファイルをエディタで作って、窓にドロップするしか、関数定義する方法はありません。
どうやっても環境中で関数定義はできないのでご注意を。
0023デフォルトの名無しさんNGNG
東工大って>>2のこれ↓ですか。
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
0024石敢當NGNG
>>8
やっぱりHaskellのみですね。すみません。

それじゃあ>>2からたどっていける所にありますが、次の本をあげときます。

The Haskell School of Expression(以下「SOE本」と記す)
http://haskell.cs.yale.edu/soe/


Haskellでは遅延評価を採用しているので無限リストを扱える・・
と読んでもピンと来ませんでした。

SOE本の無限リストに関する章に母関数を使ってフィボナッチ
数列を求めるExerciseがあります。つまり、

1/(1 - x - x^2) = 1 + x + 2x^2 + 3x^3 + 5x^4 + ...

x^nの係数がフィボナッチ数列の第n項となるというものです。

無限列に対する四則演算を準備しておけば、
a = [1, 0, 0,0,0,...(以下すべて0)]
b = [1,-1,-1,0,0,...(以下すべて0)]
fib = a / b
とするだけで上記母関数が得られます。実際にこのコードを
書いてフィボナッチ数列が出てきたときは結構感激しました。
C言語などではこんな風に無限列は扱えませんものね。
0025石敢當NGNG
>>16 同感です。

>>17 コードの表現方法は幾通りもあるでしょうか、その中の
ひとつということでよろしいのではないでしょうか。掲載された
ものが自分のよりも良いコードであれば勉強になるし、自分の方が
良いと思って優越感に浸れるかもしれないし。
私はまだ東工大の演習は読んでいませんが・・。
0026石敢當NGNG
誤)コードの表現方法は幾通りもあるでしょうか、
正)コードの表現方法は幾通りもあるでしょうから、
0027デフォルトの名無しさんNGNG
東工大資料の「リスト」って所の課題3がね、
どうしたら一番スマートか、って悩んでる。
fillもfactもできているんだけど、どう出力するのが一番かな?と…
nもfact nも数字だから、文字列に変換しなければならないんだが、変換だるい(wara
0028石敢當NGNG
>>27 変換だるい

showを使っておけばどうでしょ?
(例 show 12345 = "12345")
0029無名λ式NGNG
> 実際にこのコードを書いてフィボナッチ数列が出てきたときは結構感激しまし
> た。C言語などではこんな風に無限列は扱えませんものね。

exact real numberって知ってる?
0030デフォルトの名無しさんNGNG
東京工科大学じゃねぇか。
東工大と間違われるとは、幸せな大学だな。(w
0031デフォルトの名無しさんNGNG
東京工科大学なんてドキュ大でHaskellを教えるのかぁ。
0032デフォルトの名無しさんNGNG
>>29
詳しく教えてくれません?
0033石敢當NGNG
>>29
不勉強にして知りません。名前からすると多倍長(無限)精度演算
ライブラリのようなものに思えますが、遅延評価を行えるもの
なのでしょうか。概略を教えて頂ければ幸いです。
0034デフォルトの名無しさんNGNG
>>31
ドキュ大とは思わんが、トップレベルの大学ではないからわかりやすく説明してあるんだろ。
いいことじゃないか。東大だったら難しく書いてあるだろ。
0035無能な姦理人@Shiri-QNGNG
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□





続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
0036デフォルトの名無しさんNGNG
haskellにもgcってやっぱ必要?
0037デフォルトの名無しさんNGNG
というかGCある。
0038デフォルトの名無しさんNGNG
>>35
おまえ生きる価値無し。死ね
0039デフォルトの名無しさんNGNG
Cygwin上で噂のHaskellを使ってみるかー

~/hugs98/src/unix $ ./configure

無事通過。

~/hugs98/src $ make
gcc -c -g -O2 hugs.c
hugs.c: In function `initialize':
hugs.c:278: warning: assignment makes pointer from integer without a cast

あやしい・・・。

~/hugs98/src $ hugs
__ __ __ __ ____ ___ _________________________________________
|| || || || || || ||__ Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__|| __|| Copyright (c) 1994-2001
||---|| ___|| World Wide Web: http://haskell.org/hugs
|| || Report bugs to: [email protected]
|| || Version: February 2001 _________________________________________

0 [main] hugs 1256 open_stackdumpfile: Dumping stack trace to hugs.exe.stackdump
Segmentation fault (core dumped)

~/hugs98/src $ make install
unix/install-sh -d /usr/local/bin
unix/install-sh hugs /usr/local/bin
mv: `hugs' and `/usr/local/bin/#inst.1428#' are the same file
make: *** [install_bin] Error 1

インストールすらできねー俺になにか助言ない?
0040デフォルトの名無しさんNGNG
>>39
何故コンパイルするの?
http://www.cse.ogi.edu/PacSoft/projects/Hugs/pages/downloading.htm#Win32
0041デフォルトの名無しさんNGNG
Windous Installerで一発だったけど・・・なにか?
004239NGNG
もー、しょうがねーなー。
Windowsのバイナリの方つかうわい。
0043無名λ式NGNG
>>33
無限精度の計算を行なう枠組です。
Haskel上の実装は遅延評価を用いています。
http://www.dcs.ed.ac.uk/home/mhe/plume/node95.html
http://www.dcs.ed.ac.uk/home/mhe/plume/
http://www.btexact.com/people/briggsk2/XR.html
言語が遅延評価を備えてない場合も実質的に同じ事をやる必要があります。
0044デフォルトの名無しさんNGNG
>>39
WinのバイナリをCygwinの/usr/local/なんたら に置いて
/usr/local/binに、必要なプログラムのシンボリックリンク貼ればOKよ。
0045名無しさんNGNG
何か、有りがちで単純なコマンドラインツールをHaskellで組み直して
「こんな感じで組めるぜ」と提示してみてくれよ。
0046デフォルトの名無しさんNGNG
まずおまえがやれ>45
0047デフォルトの名無しさんNGNG
非常に感動したのが、関数型言語スレで登場していたquicksortです。
これを転載します。
qsort [] = []
qsort (x:xs) = qsort [a|a<-xs,a<=x] ++ [x] ++ qsort [a|a<-xs,a>x]
これは、例えば[3, 2, 4, 6, 1, 8]なるリストがあるとき、
先頭の3より小さいもの[2, 1]と大きいもの[4, 6, 8]に分け、
小さい数字のリスト+先頭の数字+大きい数字のリスト、と結合します。
再帰前>[2, 1, 3, 4, 6, 8]
小さい数字リストと大きい数字リストは再帰呼び出しなので、
完全にソートされる、というわけです。
関数型言語故の、本質を忠実に表現している記述ですね。
0048石敢當NGNG
>>43
ありがとうございます。無限精度の演算プログラムを作って遊んでいた
ことがあったので、XRに興味があります。私は高速乗算の実装で挫折して
しまいました。ここはHaskellのスレッドなのでこのくらいにしておきます。

>>47
A Short Introduction to Haskell(http://www.haskell.org/aboutHaskell.html)
に書かれているHaskellのQuicksortを見たときは、感激というよりも、
「えっ、こんな風に書けちゃうの!?」と驚異を感じました。それ以来、
ずるずるとHaskellの魅力に引きずりこまれています。
(と言うほど最近はいじっていないのですが…)
0049無名λ式NGNG
>>47
> 関数型言語故の、本質を忠実に表現している記述ですね。

関数型言語というより、ZF記法とlist処理のpowerだと思われ

Prologも美しい。

qsort([], []):-!.
qsort([X], [X]):-!.
qsort([P|X], S):- partition(X, P, L, H), qsort(L,SL), qsort(H,SH),append(SL, [P | SH], S).

partition([], _, [], []).
partition([X|Y], P, [X|L], H):- X<=P, partition(Y, P, L, H).
partition([X|Y], P, L, [X|H]):- X>P, partition(Y, P, L, H).

;; partitionがZF記法の役割。[ | ]はLispの( . ) と同じ。

美しく感じるのは、要素の移動に相当する操作を、
ZF記法(と++)では陽に見えないconsとgcに任せているから。
0050デフォルトの名無しさんNGNG
つかみんななに作ってんの?
0051デフォルトの名無しさんNGNG
放っておいてよ!
0052デフォルトの名無しさんNGNG
いや、今のところ勉強してるだけ。理由はかっこいいから(ワラ
0053デフォルトの名無しさんNGNG
確かに出来上がったコードが数学的でカッコイイYO
0054デフォルトの名無しさんNGNG
それより、Haskellを構築してる理論の中で難しい研究の成果を使ってるところがカコイイ
0055デフォルトの名無しさんNGNG
パターンマッチで同じ変数を使えないのはなぜなんでしょう。

たとえば、リストの中からxをみつけて、それ以降の
リストを返す関数searchなるものを定義すると
search x [] = []
search x (y:ys)
| x==y = y:ys
| otherwise = search x ys
とするとOKなのですが、
search x [] = []
search x (x:xs) = x:xs
search x (y:xs) = search x xs
とすると
Repeated variable "x" in pattern
というエラーメッセージが出ます。

ちなみにPrologでは
search(X,[],[]).
search(X,[X|S],[X|S]).
search(X,[Y|S],Z) :- search(X,S,Z).
でOKなのです。

Prologのようにパターンマッチで同じ変数を使えると便利だと
思うのですが、どうして使えないんでしょうね?
0056デフォルトの名無しさんNGNG
今日初めてHello,worldしてみた。
> の後にコードを書くってに驚いた。
0057デフォルトの名無しさんNGNG
それって*.lhsのファイルですかね?
通常(?)の*.hsだと、>から始めないので平和です。
005856NGNG
>>57
そうそう、lhsで作った。
コード主体で書く方法は *.hs か、なるほど。
拡張子でフォーマットを判断しているわけやね。
0059NGNG
このスレとか見てるとやっぱり関数型言語にこそプログラミングの未来があると思う。
象牙の塔とか言う人も多いみたいだけど、オブジェクト指向もそうだったんだし。

OOでは一部で「有機的なプログラミング」みたいな考え方があるみたいだけど
そういうのに不信感を抱くんだよね。

って単なるOO批判になってしまったけど。
0060デフォルトの名無しさんNGNG
>>57
*.lhsの「>」形式のコードはクセがあると思いません?
0061デフォルトの名無しさんNGNG
だれかRubyチックに「関数型スクリプト言語」作らないかな?
使いやすくして。
0062デフォルトの名無しさんNGNG
>>59
何が言いたいのかさっぱり分からん。
オブジェクト指向言語と関数型言語は直交する概念だろ。
0063デフォルトの名無しさんNGNG
>オブジェクト指向言語と関数型言語は直交する概念だろ。
状態を持つ/持たないという意味で対立しているようにも思える
解説してちょ
006459NGNG
>>62
だからこそ、今後のプログラミングにおける主要な概念は
関数型言語的なアプローチに移っていくだろう、と言いたいわけです。
0065デフォルトの名無しさんNGNG
オブジェクト指向言語と関数型言語って関係あるの?
0066デフォルトの名無しさんNGNG
>>65
むしろ排他的でしょう。
0067デフォルトの名無しさんNGNG
じゃあ、>>62は何の事をいってるの?
0068デフォルトの名無しさんNGNG
Haskellは人の名前なのね
0069デフォルトの名無しさんNGNG
モナドって何ですか?食べ物ですか?
0070デフォルトの名無しさんNGNG
最近関数型言語に非常に重要性を感じてたりするのですが、
日本語のHaskell解説書とかないんですかね?
だれか翻訳しないかな〜
0071デフォルトの名無しさんNGNG
例えば、CSVファイルを読み込んで、各フィールドの合計値を出すだけのプログラムは
どう書くの?
漏れは、Stringをsplitする関数作っただけで疲れ切った。
つか、既存のモジュールにそういう関数(汎用的なwords?)があるのかどうかさえ分からんかったよ。トホホ
あと、Intを16進数の文字列として出力するにはどうするのか、教えてきぼん。
0072無名λ式NGNG
>>60
> *.lhsの「>」形式のコードはクセがあると思いません?

Knuthの文芸的プログラミングの影響を受けて、
codeとdocumentを同時に書く、ってやりかた。
Mirandaにも同じようなモードがあった。
0073デフォルトの名無しさんNGNG
>>71
実用的によく利用するI/Oのライブラリを整備することは、
実績のあるSchemeあたりでも立ち後れている分野ではあり
ますね。みんな関心がないんだろうなあ。

SML/NJには、yacc/flexをSML/NJで実装したライブラリが
あったと思いますけど、それあたりを参考にすればいける
のでは。

# と思いつつ、僕はHaskellに興味を持ってまだ3日なので、
# 具体的なコードはパス
0074デフォルトの名無しさんNGNG
工科大学の演習問題(11/17)の2番がいまいちわからん。
下の通りでいいと思うんだけどなぁ。
iter :: Int -> (a -> a) -> a -> a
iter n f x = f (iter (n - 1) f x)
iter 1 f x = f x
0075失業おやじNGNG
>Intを16進数の文字列として出力するにはどうするのか、教えてきぼん

だるだるコードだけどこんなので
toHexCode x = map ("0123456789abcdef"!!) (toHex x)
toHex x
| q < 16 = q:r:[]
| otherwise = toHex q ++ (r:[])
where q = div x 16
r = mod x 16

ところで俺55だけど、パターンマッチングの仕組み誰か教えてきぼん
0076デフォルトの名無しさんNGNG
>>75
55の質問には、仕様ですとしか答えられない自分(鬱
Prologは触ったことがないので間違いかも知れませんが、
Prologは論理を記述するから、同じ変数=同じものとなる(?)のでしょうが、
Haskellは論理記述とは少々異なる雰囲気を醸し出しているので…

参りました。降参します(鬱)
0077デフォルトの名無しさんNGNG
>>66
HaskellにもSchemeにもオブジェクト指向機能があるけど?
OOってのは汎用的な抽象化技術に過ぎないから、特にコンフリクトするとは思わないけどな。
逆にオブジェクト指向型言語を関数型言語みたいな考え方で使うのも楽しい。
007871NGNG
>>75
あー、やっぱ自分でそういう関数書かなきゃだめか。
こういう基本的な関数は、普通の開発環境には付属してるような気がしたんだが。
0079デフォルトの名無しさんNGNG
>>55 そりゃすべての typeが Eqのインスタンス (i.e. (==) を持つ)
であるとは限らないから。
でいいかな?
# 東工大で haskellを教えてる先生がいるかと思ってびっくりしたよ..
0080石敢當NGNG
>>72
\begin{code} ... \end{code}で囲まれている部分にプログラムコードを
置き、それ以外の部分には任意のテキストを書けるというものですね。
ちょっと試してみたことがありますが、良いのかどうか、経験が浅くて
なんとも言えません。どなたかが作られたLaTeXのマクロもどこかに
あったように思います。

以前、HaskellのMLで "Literate Programming"というテーマが上がった
ことがありました。お名前は忘れましたが、\begin{code} ... \end{code}
のスタイルは全然ダメだ、ということを言っている人がいました。
どのような理由でダメだと言っていたのか忘れてしまいましたが、
個人的には毎行頭に > をつけるよりは書きやすいのではないかと
思います。(読みやすいかどうかは保留)
0081石敢當NGNG
>>74
iter 1 f x の定義を iter n f x の前に持ってこないと再帰が
終わらないです。

大学の演習なので、本文で使っている foldr などを使うことを期待されて
いるのかもしれません。

iter :: Int -> (a -> a) -> a -> a
iter n f x = foldr (\x y -> f y) x [1..n]

[1..n]のリストは単にn回繰り返すためだけのものです。
(\x y -> f y)は引数x, yに対して f(y) を返す関数です。
(つまり、回数カウントのためだけのリストの要素 x を無視する)

あるいは次のように書いても同じです。

iter n f x = foldr g x [1..n]
where g x y = f y

(より簡単に where g x = f とも書けます)
0082 NGNG
まだ出てなかったので。

お勧め図書:

Conception, Evolution, and Application of Functional Programming Languages, P. Hudak, ACM Computing Surveys, 21(3):359-411.

関数型言語の歴史からHaskellに至るまでのお話が面白い。関数型言語の基本も易しく説明してくれます。
0083デフォルトの名無しさんNGNG
英語ダメダメだけど、洋書買っちゃうゾ〜
お勧め洋書って何かありますかね?>石敢當さん
0084デフォルトの名無しさんNGNG
HaskellでGtk+, Gnomeライブラリ群を紹介しているらしい
http://www2.ttcn.ne.jp/~aee0372/bindings/haskell.html
0085石敢當NGNG
>>82
ぞのうち読んでみたいですが、これはACMの会員にならないと
入手できないものなのでしょうか。大学の図書館でも使えれば
いいのですが、大学関係者じゃないものですから・・。
0086無名λ式NGNG
>>71
CSVか〜、関数型言語で使ったことねーよ。
"["と"]"で挟めばList型の表現だから簡単だな。

import IO
calcSum :: String -> Integer
calcSum s = (sum . fst . head) ((reads ("[" ++ s ++ "]")) ::[([Integer],String)])
printSum :: String -> IO ()
printSum s = putStr (show (calcSum s) ++ "\n")
main = do file <- openFile "test.dat" ReadMode
cvs <- IO.hGetContents file
rows <- return (lines cvs)
sequence_ (map printSum rows)

こんな感じでどう? (offside ruleに気を付けてねー)

IO _型を理解しないと単純なfilterも書けないよ。do, return, sequence_など。

>>55
pattern matchでの制限は、計算がprologと違い一方向であること、
eqの問題、lazinessを制御したいことがあること辺りが理由だと思うけどね〜。
実際、分解とmatchingのruleとformalなsemantics考えるのうっとうしいよね。
eqが複雑なdata typeの場合があるから。ruleによって関数のstrictnessが変わってくるでしょ。
0087無名λ式NGNG
>>85
ほとんどの大学が身分証明書があれば入れるよ。事前に電話して聞いてみれば?
閉架か開架なのかも調べた方がいいな。開架じゃないといろいろ見れなくてつまらないでしょ。

>>86に、http://www.haskell.org/tutorial/書き忘れた。
0088無名λ式NGNG
>>87
ああ、雑誌は学科の図書室にあるのか、図書館にあるのか、も。
図書館の所蔵で学科に置いてあるってのが良くあるパターンなので。
0089デフォルトの名無しさんNGNG
CSVファイルをエディタでhaskellなりschemeなりのリストに書き換えちゃうのって
反則? ほとんど手間はないんだけど。
0090石敢當NGNG
>>83 お勧め洋書って何かありますかね?>石敢當さん

Haskellの本で持っているのは >>24 に書いたSOE本1冊だけですので、
「これがいいよ」と薦められるほど知っていません。

本当は http://www.haskell.org/bookshelf/ に載っている、
Haskell: The Craft of Functional Programming または
Introduction to Functional Programming using Haskell を
予約するつもりで洋書屋さんに行ったのですが、たまたまSOE本が棚に
乗っていて、現物を見たら買わずにはいられず買ってしまったのです。
SOE本には"Learning Functional Programming through Multimedia"
という副題がついていて、Haskellでマルチメディアをやろうとは
思っていなかったので違う本にしたかったのですが、買って読んで
みたところ読みやすいように感じました。
Haskellの解説の章とグラフィックスを使った演習みたいな章が
交互に出てくるような構成になっていて、色々と楽しめました。
Hugs用のグラフィックスライブラリがあったのですが、最新の
"Feb 2001 version"では使えなくなっているようなのがちょっと残念です。

>>7 に書いた、Chris Okasaki氏の本ではMLのコードが使われて
いますが、巻末にHaskellのコードも掲載されていますのでHaskellの
学習にも使えるかもしれません。ただ、この本は私にとっては手ごわい
です。SOE本は「ふむふむ」とか「なるほど!」などと思いながら、時々
辞書を引いて読み進むことができましたが、Chris Okasaki氏の本は
やたらと知らない単語が出てくるので辞書を引いてばかり、まるで英語の
授業の予習をしているような気分になります。単に私の英語力がないだけ
なのですけれども、勝手ながらコンピュータの本は平易な文章で書いて
欲しいなと思いました。というわけで、こちらはほとんど読めていません。

書籍も良いですが、もしまだお読みになっていなければ
A Gentle Introduction to Haskell Version 98
を一度読まれると良いと思います。このスレッドのおかげで
邦訳( http://www.sampou.org/haskell/tutorial-j/index.html )が
あることを知りました。私もモナドあたりで挫折しているので、
邦訳版を読み直してみようかと思っています。
0091石敢當NGNG
↑ごめんなさい。長すぎでした。

>>87
身分証明書は運転免許証などでいいのでしょうか?
ACM Computing Surveys を置いてあるかどうかも問題ですね。
そのうち調べてみます。ありがとうございました。
0092失業おやじNGNG
55だけど、76、86さんありがとさん。

パターンマッチのこと、俺も考えなおしてみた。
Prologは述語論理式で同じ変数が2度でてもおかしくないけど、
Haskellは関数で、仮引数に同じ変数が2度でると、確かに
おかしいな。
 述語論理式で f(X,X) としても全然OKだけど、
 関数の仮引数で f(x,x) とするのは確かに変な記述だ。

もうひとつ質問なんだけど、
エラーやら無限大やら、定義できない値を表現するTをさかさまに
した_|_というやつ、実際にHugs98でどのようにコードするの
か教えてくれ。
0093デフォルトの名無しさんNGNG
f x
| エラーの起こる条件 = error "error message"
とかかなぁ。
これは簡単なエラーメッセージを出力する方法だけど、
エラー処理でしか書けないような?
0094デフォルトの名無しさんNGNG
>>92
>エラーやら無限大やら、定義できない値を表現するT
lispならそういう場合、単に適当な未定義のシンボル
(infinityとか)置いておくだけだと思うけど、
haskellってそういう場合どうすんのかね。なんかあるの?
0095デフォルトの名無しさんNGNG
オンラインで関数型言語周りのプログラミングの独学教材でいいのありますか?
やっぱりSICPとかいわれているSchemeのやつですか?

あれもpdf化されるとよさそうですけどね
0096デフォルトの名無しさんNGNG
ところで、Concurrent Cleanって知ってますか?
並列プログラミングをサポートしたHaskellの発展形のような
感じのものなんですけど? どうでしょう?
0097無名λ式NGNG
>>92
> エラーやら無限大やら、定義できない値を表現するTをさかさまに
> した_|_というやつ、実際にHugs98でどのようにコードするの
> か教えてくれ。

扱えない。そもそも未定義な値がbottomなんだから。
ある時に明示的に値を未定義にしたいならば、そこで、

bottom = bottom

とでも定義しておいて使えばいいけど、普通はexception使うよ。
ちなみにghcでこの式使うと無限ループでexceptionが起きるよ。
0098無名λ式NGNG
>>89
やっぱ、一番敷居が高いのはmonadの考え方とその利用だと思うよ。
それさえこなせば、後は簡単。文字列操作は(効率はともかく)非常に得意。
なんせ文字列は文字のリストだから。リスト処理はギャフンと言うくらい強い。
0099無名λ式NGNG
>>95
> オンラインで関数型言語周りのプログラミングの独学教材でいいのありますか?

>>90に上がっている奴でいいんじゃないの?
Monadは載ってないけど、武市正人(訳). 関数プログラミング. 近代科学社, 平成3年(1991).
(原著: R.Bird and P.Wadler. Introduction to Functional Programming. Prentice-Hall, 1988).
はめちゃ「(BakusのFP的)リスト遊び」が楽しい本。
0100デフォルトの名無しさんNGNG
>>99
そういや、その訳者の人の授業受けたよ。
0101デフォルトの名無しさんNGNG
>>96
ちょっとだけ説明があった
http://www.sra.co.jp/people/nishis/learning/fpl/stairway.html
■ このスレッドは過去ログ倉庫に格納されています