関数型プログラミング言語Haskell
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGHaskellを通じて、みんなで勉強しましょう。
0002デフォルトの名無しさん
NGNGhttp://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デフォルトの名無しさん
NGNGhttp://piza2.2ch.net/test/read.cgi?bbs=tech&key=987954395
0004デフォルトの名無しさん
NGNGmyfactorial 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デフォルトの名無しさん
NGNGLispの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などは趣味でいじっているだけなので、
なかなかゆっくり本を読む時間を取れません。
仕事で使う機会があれば・・という思いは
実現しそうにありません。
00081
NGNGHaskellを通じてどうのこうの、じゃないっすね。
ちなみに、他の関数型言語に関しては、>>3 を参考にされると
よろしいかと思われます。
0009デフォルトの名無しさん
NGNGプログラミングレベルでは「状態」でなくても、Haskellで構築された
アプリケーションのユーザーから見て「状態」はどうしても
あるわけですよね?
それをHaskellプログラミングではどのように対処したら良いのでしょう?
0010デフォルトの名無しさん
NGNG>純粋な関数型言語(Haskell等)には代入がない。つまり状態はありません。
>ではどうしているかというと、mainルーチンを現在の計算機の状態をうけとり
>新しい計算機の状態を返す関数だと考えることで回避しています。
となっております。
…関数型言語の定義から勉強してきます
0011デフォルトの名無しさん
NGNGWhy Functional Programming Matters
http://www.cs.chalmers.se/~rjmh/Papers/whyfp.html
0012名無しさん
NGNGモナ度がワケ、分か、らん┐(´_`)┌
0013デフォルトの名無しさん
NGNG> Why Functional Programming Matters
> なぜ関数型言語が重要なのか、その利点をわかりやすく解説した ためになる文書。翻訳したいなあ。
してよ。
っつーか、やっぱ Haskell の前に英語勉強した方がいいよな。
0014デフォルトの名無しさん
NGNGfoo :: Int -> Int
のような、関数の引数と返り値の型定義を行っても行わなくても
関数は実行できるのですが、これは実行速度の向上や、
不正な型が来たときにエラーを返すため、と考えていいのでしょうか?
0015デフォルトの名無しさん
NGNG(コンパイル速度は変わりそうだけど。)
fooの定義だけで入出力の型が決定すれば、
明示的な型宣言は必要無いんじゃなかったかな。
もし、型が曖昧であれば、コンパイル時に処理系がエラーを返す筈。
あと、haskellは静的型付けだから、実行時に不正な型とかで
エラーになる様な事は無い気がするけど。
Haskellでも動的型とかで実行時型エラーって起きるのかな?
0016デフォルトの名無しさん
NGNGその先、親しみやすいサンプルプログラムがないんですよね。
他にも僕みたいな人は結構いると思うので
なんか面白いソースで短いのあったらみんなで載せていく、っていうのはどうでしょう。
0017デフォルトの名無しさん
NGNGそれの答えを載せてしまっては、東工大の学生さんに申し訳ないですよね
0018Haskellを256倍……
NGNGつーか、1に出てる東工大の先生に書かせるしか。
0019デフォルトの名無しさん
NGNG落とすファイルってこれだけでいいんですかね?
hugs98-Feb2001.zip
win32exes.zip
hugs.hlp
(コンパイラ(GHC)の方は大きい(22M)ので止めた)
002019
NGNGPrelude>
とプロンプトまでは出ました。
さて何しよう・・・
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGちなみに先に言っておくと、
そのHugsはソースファイルをエディタで作って、窓にドロップするしか、関数定義する方法はありません。
どうやっても環境中で関数定義はできないのでご注意を。
0023デフォルトの名無しさん
NGNGhttp://www.teu.ac.jp/kougi/koshida/Prog6/index.html
0024石敢當
NGNGやっぱり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>>17 コードの表現方法は幾通りもあるでしょうか、その中の
ひとつということでよろしいのではないでしょうか。掲載された
ものが自分のよりも良いコードであれば勉強になるし、自分の方が
良いと思って優越感に浸れるかもしれないし。
私はまだ東工大の演習は読んでいませんが・・。
0026石敢當
NGNG正)コードの表現方法は幾通りもあるでしょうから、
0027デフォルトの名無しさん
NGNGどうしたら一番スマートか、って悩んでる。
fillもfactもできているんだけど、どう出力するのが一番かな?と…
nもfact nも数字だから、文字列に変換しなければならないんだが、変換だるい(wara
0028石敢當
NGNGshowを使っておけばどうでしょ?
(例 show 12345 = "12345")
0029無名λ式
NGNG> た。C言語などではこんな風に無限列は扱えませんものね。
exact real numberって知ってる?
0030デフォルトの名無しさん
NGNG東工大と間違われるとは、幸せな大学だな。(w
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG詳しく教えてくれません?
0033石敢當
NGNG不勉強にして知りません。名前からすると多倍長(無限)精度演算
ライブラリのようなものに思えますが、遅延評価を行えるもの
なのでしょうか。概略を教えて頂ければ幸いです。
0034デフォルトの名無しさん
NGNGドキュ大とは思わんが、トップレベルの大学ではないからわかりやすく説明してあるんだろ。
いいことじゃないか。東大だったら難しく書いてあるだろ。
0035無能な姦理人@Shiri-Q
NGNG□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGおまえ生きる価値無し。死ね
0039デフォルトの名無しさん
NGNG~/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何故コンパイルするの?
http://www.cse.ogi.edu/PacSoft/projects/Hugs/pages/downloading.htm#Win32
0041デフォルトの名無しさん
NGNG004239
NGNGWindowsのバイナリの方つかうわい。
0043無名λ式
NGNG無限精度の計算を行なう枠組です。
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デフォルトの名無しさん
NGNGWinのバイナリをCygwinの/usr/local/なんたら に置いて
/usr/local/binに、必要なプログラムのシンボリックリンク貼ればOKよ。
0045名無しさん
NGNG「こんな感じで組めるぜ」と提示してみてくれよ。
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGこれを転載します。
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ありがとうございます。無限精度の演算プログラムを作って遊んでいた
ことがあったので、XRに興味があります。私は高速乗算の実装で挫折して
しまいました。ここはHaskellのスレッドなのでこのくらいにしておきます。
>>47
A Short Introduction to Haskell(http://www.haskell.org/aboutHaskell.html)
に書かれているHaskellのQuicksortを見たときは、感激というよりも、
「えっ、こんな風に書けちゃうの!?」と驚異を感じました。それ以来、
ずるずるとHaskellの魅力に引きずりこまれています。
(と言うほど最近はいじっていないのですが…)
0049無名λ式
NGNG> 関数型言語故の、本質を忠実に表現している記述ですね。
関数型言語というより、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デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
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> の後にコードを書くってに驚いた。
0057デフォルトの名無しさん
NGNG通常(?)の*.hsだと、>から始めないので平和です。
0059俺
NGNG象牙の塔とか言う人も多いみたいだけど、オブジェクト指向もそうだったんだし。
OOでは一部で「有機的なプログラミング」みたいな考え方があるみたいだけど
そういうのに不信感を抱くんだよね。
って単なるOO批判になってしまったけど。
0060デフォルトの名無しさん
NGNG*.lhsの「>」形式のコードはクセがあると思いません?
0061デフォルトの名無しさん
NGNG使いやすくして。
0062デフォルトの名無しさん
NGNG何が言いたいのかさっぱり分からん。
オブジェクト指向言語と関数型言語は直交する概念だろ。
0063デフォルトの名無しさん
NGNG状態を持つ/持たないという意味で対立しているようにも思える
解説してちょ
006459
NGNGだからこそ、今後のプログラミングにおける主要な概念は
関数型言語的なアプローチに移っていくだろう、と言いたいわけです。
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGむしろ排他的でしょう。
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG日本語のHaskell解説書とかないんですかね?
だれか翻訳しないかな〜
0071デフォルトの名無しさん
NGNGどう書くの?
漏れは、Stringをsplitする関数作っただけで疲れ切った。
つか、既存のモジュールにそういう関数(汎用的なwords?)があるのかどうかさえ分からんかったよ。トホホ
あと、Intを16進数の文字列として出力するにはどうするのか、教えてきぼん。
0072無名λ式
NGNG> *.lhsの「>」形式のコードはクセがあると思いません?
Knuthの文芸的プログラミングの影響を受けて、
codeとdocumentを同時に書く、ってやりかた。
Mirandaにも同じようなモードがあった。
0073デフォルトの名無しさん
NGNG実用的によく利用するI/Oのライブラリを整備することは、
実績のあるSchemeあたりでも立ち後れている分野ではあり
ますね。みんな関心がないんだろうなあ。
SML/NJには、yacc/flexをSML/NJで実装したライブラリが
あったと思いますけど、それあたりを参考にすればいける
のでは。
# と思いつつ、僕はHaskellに興味を持ってまだ3日なので、
# 具体的なコードはパス
0074デフォルトの名無しさん
NGNG下の通りでいいと思うんだけどなぁ。
iter :: Int -> (a -> a) -> a -> a
iter n f x = f (iter (n - 1) f x)
iter 1 f x = f x
0075失業おやじ
NGNGだるだるコードだけどこんなので
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デフォルトの名無しさん
NGNG55の質問には、仕様ですとしか答えられない自分(鬱
Prologは触ったことがないので間違いかも知れませんが、
Prologは論理を記述するから、同じ変数=同じものとなる(?)のでしょうが、
Haskellは論理記述とは少々異なる雰囲気を醸し出しているので…
参りました。降参します(鬱)
0077デフォルトの名無しさん
NGNGHaskellにもSchemeにもオブジェクト指向機能があるけど?
OOってのは汎用的な抽象化技術に過ぎないから、特にコンフリクトするとは思わないけどな。
逆にオブジェクト指向型言語を関数型言語みたいな考え方で使うのも楽しい。
007871
NGNGあー、やっぱ自分でそういう関数書かなきゃだめか。
こういう基本的な関数は、普通の開発環境には付属してるような気がしたんだが。
0079デフォルトの名無しさん
NGNGであるとは限らないから。
でいいかな?
# 東工大で haskellを教えてる先生がいるかと思ってびっくりしたよ..
0080石敢當
NGNG\begin{code} ... \end{code}で囲まれている部分にプログラムコードを
置き、それ以外の部分には任意のテキストを書けるというものですね。
ちょっと試してみたことがありますが、良いのかどうか、経験が浅くて
なんとも言えません。どなたかが作られたLaTeXのマクロもどこかに
あったように思います。
以前、HaskellのMLで "Literate Programming"というテーマが上がった
ことがありました。お名前は忘れましたが、\begin{code} ... \end{code}
のスタイルは全然ダメだ、ということを言っている人がいました。
どのような理由でダメだと言っていたのか忘れてしまいましたが、
個人的には毎行頭に > をつけるよりは書きやすいのではないかと
思います。(読みやすいかどうかは保留)
0081石敢當
NGNGiter 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 とも書けます)
お勧め図書:
Conception, Evolution, and Application of Functional Programming Languages, P. Hudak, ACM Computing Surveys, 21(3):359-411.
関数型言語の歴史からHaskellに至るまでのお話が面白い。関数型言語の基本も易しく説明してくれます。
0083デフォルトの名無しさん
NGNGお勧め洋書って何かありますかね?>石敢當さん
0084デフォルトの名無しさん
NGNGhttp://www2.ttcn.ne.jp/~aee0372/bindings/haskell.html
0085石敢當
NGNGぞのうち読んでみたいですが、これはACMの会員にならないと
入手できないものなのでしょうか。大学の図書館でも使えれば
いいのですが、大学関係者じゃないものですから・・。
0086無名λ式
NGNGCSVか〜、関数型言語で使ったことねーよ。
"["と"]"で挟めば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ほとんどの大学が身分証明書があれば入れるよ。事前に電話して聞いてみれば?
閉架か開架なのかも調べた方がいいな。開架じゃないといろいろ見れなくてつまらないでしょ。
>>86に、http://www.haskell.org/tutorial/書き忘れた。
0088無名λ式
NGNGああ、雑誌は学科の図書室にあるのか、図書館にあるのか、も。
図書館の所蔵で学科に置いてあるってのが良くあるパターンなので。
0089デフォルトの名無しさん
NGNG反則? ほとんど手間はないんだけど。
0090石敢當
NGNGHaskellの本で持っているのは >>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パターンマッチのこと、俺も考えなおしてみた。
Prologは述語論理式で同じ変数が2度でてもおかしくないけど、
Haskellは関数で、仮引数に同じ変数が2度でると、確かに
おかしいな。
述語論理式で f(X,X) としても全然OKだけど、
関数の仮引数で f(x,x) とするのは確かに変な記述だ。
もうひとつ質問なんだけど、
エラーやら無限大やら、定義できない値を表現するTをさかさまに
した_|_というやつ、実際にHugs98でどのようにコードするの
か教えてくれ。
0093デフォルトの名無しさん
NGNG| エラーの起こる条件 = error "error message"
とかかなぁ。
これは簡単なエラーメッセージを出力する方法だけど、
エラー処理でしか書けないような?
0094デフォルトの名無しさん
NGNG>エラーやら無限大やら、定義できない値を表現するT
lispならそういう場合、単に適当な未定義のシンボル
(infinityとか)置いておくだけだと思うけど、
haskellってそういう場合どうすんのかね。なんかあるの?
0095デフォルトの名無しさん
NGNGやっぱりSICPとかいわれているSchemeのやつですか?
あれもpdf化されるとよさそうですけどね
0096デフォルトの名無しさん
NGNG並列プログラミングをサポートしたHaskellの発展形のような
感じのものなんですけど? どうでしょう?
0097無名λ式
NGNG> エラーやら無限大やら、定義できない値を表現するTをさかさまに
> した_|_というやつ、実際にHugs98でどのようにコードするの
> か教えてくれ。
扱えない。そもそも未定義な値がbottomなんだから。
ある時に明示的に値を未定義にしたいならば、そこで、
bottom = bottom
とでも定義しておいて使えばいいけど、普通はexception使うよ。
ちなみにghcでこの式使うと無限ループでexceptionが起きるよ。
0098無名λ式
NGNGやっぱ、一番敷居が高いのはmonadの考え方とその利用だと思うよ。
それさえこなせば、後は簡単。文字列操作は(効率はともかく)非常に得意。
なんせ文字列は文字のリストだから。リスト処理はギャフンと言うくらい強い。
0099無名λ式
NGNG> オンラインで関数型言語周りのプログラミングの独学教材でいいのありますか?
>>90に上がっている奴でいいんじゃないの?
Monadは載ってないけど、武市正人(訳). 関数プログラミング. 近代科学社, 平成3年(1991).
(原著: R.Bird and P.Wadler. Introduction to Functional Programming. Prentice-Hall, 1988).
はめちゃ「(BakusのFP的)リスト遊び」が楽しい本。
0100デフォルトの名無しさん
NGNGそういや、その訳者の人の授業受けたよ。
0101デフォルトの名無しさん
NGNGちょっとだけ説明があった
http://www.sra.co.jp/people/nishis/learning/fpl/stairway.html
■ このスレッドは過去ログ倉庫に格納されています