関数型プログラミング言語Haskell
■ このスレッドは過去ログ倉庫に格納されています
0001潜伏していた1
NGNG前スレ
http://pc.2ch.net/test/read.cgi/tech/996131288/l50
関連 >>2 以降
0369デフォルトの名無しさん
NGNG誰かお遊びで作ったプログラムとか貼ってくれませんか?
0370デフォルトの名無しさん
NGNGHaskellでクイックソートのコードを以前見かけて、こんなにシンプルになるのかと感動しました。
では、バブルソート(二重for文で大小比較の単純なやつ)はどうなるのでしょうか。
iとjを引数にして二重に再帰を繰り返し、takeやdropで切り貼りするしか無いのでしょうか?
もっと効率のいいやり方があるのでは、と思うのですが…
0371デフォルトの名無しさん
NGNGそれらしいものを書いてみようとしたら
選択ソートとバブルソートが混ざったような中途半端なものになった。
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)
つか効率を気にすればするほど選択ソートっぽくなると思う。
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNG0375370
NGNG最小値を取り出して、それを x : bs rest [] で先頭に結合しているわけですか。
bs xs i j なんて関数を作って手続き型そのままにやろうとした俺とはえらい違いです。敬服。
0376370
NGNG>>371のコードですと、要素数に比例してスタックを消費してしまいませんか?
(半端な知識ですが、末尾再帰になってなく見えます。書き直せないところが厨ですが…)
関数型言語の場合、スタック消費は気にしない方がいいのでしょうか。
0377デフォルトの名無しさん
NGNG関数型言語では基本データ構造のリストが再帰的(末尾再帰ではない)に
定義されているわけで、そもそもスタックを消費しまくることを前提に
作られているでしょうから、スタックの消費をあまり気にしなくていい言語と
して使えるはず。
Haskell のような遅延評価が基本の言語では、自然な再帰のアルゴリズムの
プログラムを、末尾再帰のアルゴリズムのプログラムに書き換えることも、
計算のオーダーが変わるようなもの以外は、あまり、気にすることはない
気がします。
0378デフォルトの名無しさん
NGNGこの最後のSはどっからでてきたの?X,Y,Z,W,Vとかでいいじゃん。
Sなんてつけなくても
0379デフォルトの名無しさん
NGNG複数形のsです。
0380日曜Haskellerオヤジ
NGNG現在はプログラミング基礎論の勉強がてら一緒に Haskell もお勉強モードな土日です。
>>368
特に初心者がやるときには、英語を勉強しつつ Haskell の勉強もしようとすると
忙しくなりすぎて、とりわけ社会人だと極度のんびり勉強モードになってしまいます。
そうすると、どうしてもネタが尽き気味になりますよね、
和書の入門書がぜひとも欲しいところです。
大学院の学生さんたちの誰かが執筆してくれればいいんですが、だれか書きませんかね?
Haskell は離散数学とか圏論とかとセットにすると非常に面白い本ができると思うのですがどうでしょう?
あと、圏論の専門本も是非とも欲しいところですね、これも本当にない、
まったくと言って良いほど本がない、あっても絶版ばかりで手に入りません。
シュプリンガーフェアラーク出版の「代数学とは何か」に書かれてあるのが、
手に入りかつ、知っている範囲なのですが、
これは数学の専門書でプログラマには少々というかかなりの難解ぶりです。
自分がなんとか読めそうと感じられる範囲では、
ここ http://www.etl.go.jp/etl/divisions/~yoshiki/ut97/
にあるんですが、これも内容を充実して製本された本が欲しいところです。
初心者向きといえば、以前工科大のページがあったんですが
消滅してしまっているようです、越田センセまた何かページつくってくれないかな・・
0381デフォルトの名無しさん
NGNG0382デフォルトの名無しさん
NGNGはぎゃー先生のページ面白い
0383yuki
NGNGすみません。初心者なのですがこんな質問に誰か答えていただけるのでしょうか?
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になります。
誰か、アイデアでもいいので下さい。
すみません何分初心者なもので。 レスお待ちしてます。
=======================================================================
0384デフォルトの名無しさん
NGNGその区切り線には宗教的意味か何かでもあるのか?
0385デフォルトの名無しさん
NGNG宿題は自分でやりましょうね。
0386デフォルトの名無しさん
NGNG学校の授業でどのくらい使われてるの?
0387日曜Haskellerオヤジ
NGNG私だったらこんな感じで作りますかね。
見ているとスペースのところで文字列が切断されていて非常に感じが悪いのでそれをまず結合します。
つづいてこの文字列リストから ":" , ";" を取り除いて出来上がり
0388日曜Haskellerオヤジ
NGNG結合すべき文字列は直後が ";" ":" でないことに着目すると簡単に作れるでしょう。
0389383
NGNG「Haskell言語プログラミングレッスン <下> 関数型言語を始めよう」
出版準備です。
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG0392日曜Haskellerオヤジ
NGNGレコードみたいになっていますね ';' ':' ブラウザはの見分けがつかない
間違っているので上記2レスは無しということでお願いします
';' でいったん文字列リストのそのまたリストに分解して
先頭を順序対の左
上記を取り除いた上での、先頭と末尾を取り除いた文字列の結合を右の順序対として
リストを作ればよいみたいですね。
0393日曜Haskellerオヤジ
NGNG本当ならうれしいですね、ちょっと作ってみましょう、しばらくかかります。
0394デフォルトの名無しさん
NGNGtype Assoc = [(Field, Value)]
lookupAssoc :: [Key] -> Assoc -> Assoc
をつくれ、としたほうが抽象化のレベルがあうのでないか。まあ、
parseAssoc :: [Token] -> Assoc
をつくって
lookupTokens :: [Key] -> [Token] -> [(Field, Value)]
lookupTokens keys tokens = lookupAssoc keys (parseAssoc tokens)
とすれば元の題意にはあうだろうが。
0395デフォルトの名無しさん
NGNG題名的には上下逆だろ。
0396日曜Haskellerオヤジ
NGNG本できたら、このスレッドに報告してくださいね、買います。
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 )
0397日曜Haskellerオヤジ
NGNG-- トークン分解と ';' の取り除き
-- 末尾 ';' チェックはしていないので必要なら無限再帰防止策をとること
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
0398383
NGNGなんか、本を出すことで盛り上がってるみたいなのですが。。
すみません、>389 は私ではないです。誰かがネタでやったみたいです。
なのに、期待して答えて頂いて感謝してます。
それと、すぐ宿題ってばれましたね(苦笑)。事実、海外でITを勉強してる学生です。
これはアサイメントで来週提出で7問中、1問だけとけてる状態です。そして、苦肉の策で
このスレに質問をしてみました。そして、みなさんにヒントを頂き感謝してます。
みなさんはかなりの知識をお持ちのようで、私なんてJAVAの教科は自分では得意だと
思ってやってましたが、haskelになると途端にややこしくなり、自分の頭の悪さを、思い知らされてます。
数学の知識がさらに必要となってきてますね。
日曜Haskellerオヤジ さん、参考になりました。ありがとうございます。
ついでにこのアサイメントの全容を貼っときました。(期待しつつ)。自分でやるつもりです。
海外は教科をパスするのがきついですね。
http://www7.big.or.jp/~mb2/bbs/up/img-box/img20020820192929.zip
また、質問があればさせていただいていいですか?
お礼のレス遅れてしまってすみません。なんか、私の使ってるプロバ、規制されてるんです。うー
だから、友人にメールで送って、それからレスしてもらってるので。すみません。荒らしではないですよ。
0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNGhogehoge 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)
0401デフォルトの名無しさん
NGNG0402日曜Haskellerオヤジ
NGNGやっぱりそうか(笑)
関数型は脳の回路がスイッチしないとやっぱり大変です、
普段の仕事では普通の言語を使っているので、土日に関数型に切り替えると毎週のように戸惑います。
JAVA 等で使われているオブジェクト指向的な考え方が頭の中に残っているとうまく組めません。
関数型プログラムのコツは写像を追うことと、
自分が欲しい結果を細部に分解しながら欲しいものを定義してゆくことだと思います。
しかし、これは考えても無駄で、なれるしかないです
>また、質問があればさせていただいていいですか?
どうぞ、このスレッドは最近ずっと寂れていたようですし、私が答えなくても
だれかが答えてくれると思いますし、私も書いてみます。
#ダウンロードしようと思いましたが、ファイルはもうアップローダーに残っていないみたいです。
0403デフォルトの名無しさん
NGNG1. 次の関数
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にトークンのリストを渡します。
宿題の答えを書くのもアレなので、こういうかたちにしてみました。
0404デフォルトの名無しさん
NGNG> 2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら
2. gを使って関数fを定義します。関数fは、もしnがキーのリストkに現れていたら
でした。舌足らずですた。
0405デフォルトの名無しさん
NGNG0406デフォルトの名無しさん
NGNG0407日曜Haskellerオヤジ
NGNGん、お盆休み明けてのぞいてみれば、だれもレスを付けていないのか・・・
今週末ちょっと考えて見ます。
0408日曜Haskellerオヤジ
NGNGちょっと読んでみたんですが、正直題意が良くわからなかったです。
これはレスつけられないのでは、と思いました。
出題は、宿題のパターンでよいとは思います。ただし、宿題は自分の良心で自分でやりましょうね。(笑
ちなみに、引数に使ったラベルに意味説明を入れたほうが良いと思います。
いきなり v とか v1 とかで説明されてもわかりにくいです。
v1 v2 ... は入力トークンで、末尾は ":" です、
そのリストを [v1 , ... vn , ":" ] とします。
みたいな感じで書いた方がよいのではないかと感じました。
v はキー・・・・なんでしょうか?
あと、2については、 f の中に g が見当たりません。
( v ++ " "++v1++" "++...++" "++vn,f xs) = (n,v1++" "++...++" "++vn)
なんでしょうか?
0409デフォルトの名無しさん
NGNGどういうところで使われてるか不思議で。shcemeとかは
dr schemeのチュートリアルで結構仕事があるみたいなことを
書いてあったけど。
0410デフォルトの名無しさん
NGNG学校
0411デフォルトの名無しさん
NGNG(小)
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGそこでいう 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"})
と、こんなところで半年近くも前の話に質問をしてみるテスト。
0414デフォルトの名無しさん
NGNG君はこういう (http://www.bier-reise.com/cooking/recipe/go-ya/chample.htm)
つもりなのかもしれんが、"チャンプル" でなく "チャンプルー" と伸ばすこともあり、
chample よりは champloo って書くべきものなのだよ。
0415デフォルトの名無しさん
NGNGなんだそれは。
0416デフォルトの名無しさん
NGNG七行プログラミング part2
http://pc3.2ch.net/test/read.cgi/tech/1018840143/
に乱入して、関数型言語の恐ろしさを見せつけてやりませんか?
Haskellなら相当な事が出来そうですが(今↑ではやりのRLEとかも)
0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG大して戦果をあげれないと思う。入出力とか弱いし。
Haskell 向きなのを何か考えればアレかもしれんが。
0419デフォルトの名無しさん
NGNG0420
NGNG0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNG0423司馬乱
NGNG久しぶりにこのスレ覗いてみたら寂れてますねー.
コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
0424日曜Haskellerオヤジ
NGNG>コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
取り合えず私にはあります、だれか作ってー
離散数学に興味を持ったところ、そのまま勢いでこれも面白くなってきています。
もっとも、一般位相はしらないわ、集合論はしらないわで大変ですが・・・
Haskell という言語はこういうものを勉強するときに便利ですね。
0426石敢當
NGNGなぜコンピュータサイエンスに圏論なのか、圏論を勉強すると
プログラムを作成するにあたりどんな嬉しいことがあるのか、
などについて序章あたりに書かれているような本だったら買いたいです。
英語で書かれたのを1冊持っていますが、なかなか読み進めません。
ありがたみを実感できる章にたどり着けばはずみがつくと思うのですが・・。
0427デフォルトの名無しさん
NGNGその本とはなんでしょう?
さしつかえなければ教えてください。
0428デフォルトの名無しさん
NGNG情報数学講座7 プログラム意味論 横内寛文 共立出版 1994.6
それにしてもプログラミング処理系は、実用的にするため色々な拡張が施され
ています。そのため純粋な数学との間には大きな溝が出来てしまってい
るような気がします。
0429デフォルトの名無しさん
NGNG分かるようになるかも。
0430デフォルトの名無しさん
NGNG0431石敢當
NGNGBird & de Moor の "Algebra of Programming" です。
0432司馬乱
NGNG論理や型理論と一緒にやる方がいいと思いますが(代数は等式論理なので)
どうやって動機付けするのがいいのかな.
圏論には多分
- プログラムの意味論を厳密に議論するための言葉を提供してくれる
- 様々なプログラミングのメタファーを提供してくれる
という二つの面があると思いますが,お互いに依存しあっているので
最後まで引っ張っていく書き方というのは結構challengingかも.
きちんと書くと今度は厚くなりそうだし.
0433司馬乱
NGNGたしかallegoryとか使っているやつですか?
0434石敢當
NGNGはい、そうです。
>>きちんと書くと今度は厚くなりそうだし.
執筆する側としては厚い本を書くのは大変だと思いますが、
読む側としては多少厚くても難解な薄い本よりはずっと
ありがたいです。もっとも、431の本をなかなか読み進めない
一番の理由は十分な間を取れていないからで、難解とか言う
以前の問題です。
0435デフォルトの名無しさん
NGNGというような会話を、約10年程前にしてたんですけど、
相変わらずそのスジでは必須科目(wなのですか?
0436デフォルトの名無しさん
NGNG0437日曜Haskellerオヤジ
NGNG圏論というのは、集合論の代わりになるもので、集合論が「要素」の論理
であるのに対して、圏論は「要素」と「要素」の間の関係の論理です。
集合論を置き換える為の物のようです。( 多分(^^; )
圏論って定義は分るんですけれど、その意味しているところは難解です、いまだに分りません。
しかも定義も注意深く定義を読まないと、いきなり変なところにはまり込んでしまいます。
私は ob(C) が「点」とか書かれていて最初こんがらがっていました。
ついでに射も最初はこんがらがってました。
#といいますか、全部だ・・・
もし分らないのが圏論の定義なら
しょうもない集合でいいので一個具体的に作ってみると少しづつ分ってきます。
たとえば { {false,true} , {0,1} } = ob(C) から出発して
全部作ってみるといいですよ。
#ちかごの感じるんですが
# 圏論 : 関数型
# 集合 : オブジェクト指向
#「点」が中心の時がよいのか「射」が中心の時がよいのか
#時々強烈に的確に記述できる関数型の特徴の正体が見えたような見えないような・・・
0438デフォルトの名無しさん
NGNG集合論:構成的(実装を扱う)
圏論:公理的(インターフェースを扱う)
射の位相空間での実装は連続写像、群での実装は準同型写像って感じ。
インターフェースのみを使って記述すれば、そのインターフェースを
持っているどんな実装でも成り立つものを作ることができる。
また、インターフェースを前に出すことで、性質を明確に記述でき、
性質の比較ができる。
などのことが、圏論のメリットと感じます。
コンピュータサイエンスで圏論がどう使われているのかは知りませんが。
いや、数学でもあまり知らないんだけど。
0440デフォルトの名無しさん
NGNGテンキーの'/'が効かないのはなぜ?
0441日曜Haskellerオヤジ
NGNGチュートリアルとしては最適と思います、私もこれを使っておぽえました。
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNGなにそれ?
0444デフォルトの名無しさん
NGNG若者向けのLisp
0445デフォルトの名無しさん
NGNG若者向けのLisp
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNG0448442
NGNG公式のドキュメント読んでもいまいちだったけど、
これ読んだらけっこうすんなり入ってきました。
東京工科の学生には負けられません。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNG最近はヘタなキー押すとサスペンドしたりユーザー切り替わったりするらすいな。
なんでこれ以上ボタン増やしたがるのかわからんよ。
0453442
NGNG0454名無しさん@Emacs
NGNGfibStep :: (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 ぐらいまでは余裕みたいですが。
0455デフォルトの名無しさん
NGNG(略
0456名無しさん@Emacs
NGNGかなり汚いです。だれかスッキリした正解を教えて下さい。
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)
0457名無しさん@Emacs
NGNGinnerfunc :: 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]っていう書き方がなんとなくダサい気がします。
そういう関数は組込みであるんでしょうか?
というか組込み関数一覧みたいなのってどっかにありません?
0458名無しさん@Emacs
NGNGisPrime :: Int -> Bool
isPrime num
| num <= 2 = False
| length (divisors num) > 2 = False
| otherwise = True
なんとなくHaskellが楽しくなってきました。
東京工科大のやつらがうらやましひです。。。
早くIO使った実用的アプリを作れるところまでいきたいのぉ
0459名無しさん@Emacs
NGNGhugs上で
>:type "abc"
"abc" :: String
>:type ["abc"]
["abc"] :: [[Char]]
となってしまいます。本当は[String]となって欲しいわけですが、
Charのリストのリストになってしまうんですね。
どうしてなんでしょう? そこで、
>:type ["abc"::String]とかやってみてもダメですね。[[Char]]になります。
:type 1::Intならうまくいくんですが。。。
0460デフォルトの名無しさん
NGNGhttp://www.haskell.org/onlinereport/basic.html#characters
↑を見てみればわかるように言語仕様で
type String = [Char]
というセマンティクスが規定されてる.
0461名無しさん@Emacs
NGNGCharと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])
というエラーが出ます。んー、わからんです。
0462名無しさん@Emacs
NGNGでした。すんません。
0463名無しさん@Emacs
NGNG○returnLoan exampleBase remove_person remove_book
でした。質問忘れてください。m( )m
0464名無しさん@Emacs
NGNGもっとCやPerlと比べて難しいかと思っていたら
そうでもなかった。二日である程度慣れました。
ループを一切使わずに全て再帰で書くのは
なれないうちはしんどそうだけど、見返りとして
バグの出にくいプログラムになるのかな。
これがすらすら書けるようになったら
この言語で仕事してみたいですね。
手っ取り早くHaskellを活用できる分野というと
XMLの処理系でしょうか。
Haskellについてはまだよくは分っていませんが(藁)
他の言語より向いている気がするんですね。
もっとフォーマルなプログラムにおいてこそ
こういった言語は意味をなすのかもしれないけど、
多分そういうのはヘタレには無理だろうし(w
とりあえず、IO、スレッドが使えるまで基礎勉強ですね。
無料で使わせてもらっていて、講義より先に
問題に関する質問をここに書いてしまっては
先生に申し訳ないのでここらへんでやめにしておきます。
先生には入門者用の本を書いてほしいなあ。
0465デフォルトの名無しさん
NGNGIBMのdeveloperWorksサイトに、HaskellでXMLを云々って記事が有ったね。
既出だろうけど。
0466名無しさん@Emacs
NGNGなるほど、それでかな。
Haskellを使ってみる前からXMLの処理には
関数型言語が向いている気がしてたんです。
ただ単に自分が以前DWを読んだだけだったのですね(汗
関数型言語初体験の感想としてなんですが、
JavaやC++ではいかようにも書けてしまうのが
むしろあまりよくないことに思えてきました。
アルゴリズムを素直に表現してそれがそのまま
プログラムになっているという。素晴らしいです。
久しぶりに萌え萌えです。
もっと綺麗に書けるよう努力せないかんですね。
0467名無しさん@Emacs
NGNG2chに神が君臨したかのようなレベルですね(汗
自分の書き込みが恥かしくなって来たのでしばらく潜伏します。
早くみなさんのレベルに追いつきたひ。。。
これだけじゃ情報価値なしなのでせめてリンク
純粋遅延関数型言語 Concurrent Clean
http://sky.zero.ad.jp/~zaa54437/programming/clean/
このサイトの書評は私のような初心者には参考になりそうです。
また管理者の人はCleanシステムのドキュメントの翻訳を精力的に
行われています。素晴らしいです。
0468デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています