02/08/04 16:19
何故>>371でソートになるのか悩んで、紙に書いてようやく理解しました。
最小値を取り出して、それを x : bs rest [] で先頭に結合しているわけですか。
bs xs i j なんて関数を作って手続き型そのままにやろうとした俺とはえらい違いです。敬服。
376:370
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:デフォルトの名無しさん
02/08/10 12:14
x:xs
複数形のsです。
380:日曜Haskellerオヤジ
02/08/11 06:22
ものすごい久々です、
現在はプログラミング基礎論の勉強がてら一緒に Haskell もお勉強モードな土日です。
>>368
特に初心者がやるときには、英語を勉強しつつ Haskell の勉強もしようとすると
忙しくなりすぎて、とりわけ社会人だと極度のんびり勉強モードになってしまいます。
そうすると、どうしてもネタが尽き気味になりますよね、
和書の入門書がぜひとも欲しいところです。
大学院の学生さんたちの誰かが執筆してくれればいいんですが、だれか書きませんかね?
Haskell は離散数学とか圏論とかとセットにすると非常に面白い本ができると思うのですがどうでしょう?
あと、圏論の専門本も是非とも欲しいところですね、これも本当にない、
まったくと言って良いほど本がない、あっても絶版ばかりで手に入りません。
シュプリンガーフェアラーク出版の「代数学とは何か」に書かれてあるのが、
手に入りかつ、知っている範囲なのですが、
これは数学の専門書でプログラマには少々というかかなりの難解ぶりです。
自分がなんとか読めそうと感じられる範囲では、
ここ URLリンク(www.etl.go.jp)
にあるんですが、これも内容を充実して製本された本が欲しいところです。
初心者向きといえば、以前工科大のページがあったんですが
消滅してしまっているようです、越田センセまた何かページつくってくれないかな・・
381:デフォルトの名無しさん
02/08/11 07:14
プログラムはじめてやるのにラムダカルキュラスは難しすぎる
382:デフォルトの名無しさん
02/08/11 09:07
URLリンク(nicosia.is.s.u-tokyo.ac.jp)
はぎゃー先生のページ面白い
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:デフォルトの名無しさん
02/08/20 09:14
>>383
宿題は自分でやりましょうね。
386:デフォルトの名無しさん
02/08/20 11:42
Haskellって、
学校の授業でどのくらい使われてるの?
387:日曜Haskellerオヤジ
02/08/20 12:50
宿題だとすると・・・そのまま答えを書いたらまずいかな(笑
私だったらこんな感じで作りますかね。
見ているとスペースのところで文字列が切断されていて非常に感じが悪いのでそれをまず結合します。
つづいてこの文字列リストから ":" , ";" を取り除いて出来上がり
388:日曜Haskellerオヤジ
02/08/20 12:52
おまけ
結合すべき文字列は直後が ";" ":" でないことに着目すると簡単に作れるでしょう。
389:383
02/08/20 12:55
「Haskell言語プログラミングレッスン <上> Haskell言語を始めよう」
「Haskell言語プログラミングレッスン <下> 関数型言語を始めよう」
出版準備です。
390:デフォルトの名無しさん
02/08/20 13:02
出版準備?大丈夫かよオイ
391:デフォルトの名無しさん
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:デフォルトの名無しさん
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オヤジ さん、参考になりました。ありがとうございます。
ついでにこのアサイメントの全容を貼っときました。(期待しつつ)。自分でやるつもりです。
海外は教科をパスするのがきついですね。
URLリンク(www7.big.or.jp)
また、質問があればさせていただいていいですか?
お礼のレス遅れてしまってすみません。なんか、私の使ってるプロバ、規制されてるんです。うー
だから、友人にメールで送って、それからレスしてもらってるので。すみません。荒らしではないですよ。
399:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
02/08/22 03:23
>>403
> 2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら
2. gを使って関数fを定義します。関数fは、もしnがキーのリストkに現れていたら
でした。舌足らずですた。
405:デフォルトの名無しさん
02/08/26 10:16
東大の「こ・何とか」って人は何人?
406:デフォルトの名無しさん
02/08/29 13:10
nisseicom.co.jp
407:日曜Haskellerオヤジ
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:デフォルトの名無しさん
02/09/05 10:28
>>409
学校
411:デフォルトの名無しさん
02/09/07 12:25
>>410
(小)
412:デフォルトの名無しさん
02/09/07 12:25
>>400 kakoii! tuka hutuu dakedo, >>396-397 no ato ni miruto kakoii!
413:デフォルトの名無しさん
02/09/07 12:42
URLリンク(www.sampou.org)
そこでいう 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
君はこういう (URLリンク(www.bier-reise.com))
つもりなのかもしれんが、"チャンプル" でなく "チャンプルー" と伸ばすこともあり、
chample よりは champloo って書くべきものなのだよ。
415:デフォルトの名無しさん
02/09/07 15:41
>>352
なんだそれは。
416:デフォルトの名無しさん
02/09/07 23:10
ここらへんで一丁Haskellで
七行プログラミング part2
スレリンク(tech板)
に乱入して、関数型言語の恐ろしさを見せつけてやりませんか?
Haskellなら相当な事が出来そうですが(今↑ではやりのRLEとかも)
417:デフォルトの名無しさん
02/09/07 23:28
おまえがやって見ろよ
418:デフォルトの名無しさん
02/09/08 02:11
>>416
大して戦果をあげれないと思う。入出力とか弱いし。
Haskell 向きなのを何か考えればアレかもしれんが。
419:デフォルトの名無しさん
02/09/09 13:38
モナドパーサ
420:
02/09/18 03:35
421:デフォルトの名無しさん
02/09/18 06:54
7行プログラミングってPerlが一番凄そう。
422:デフォルトの名無しさん
02/09/18 16:41
むしろperlはそのための言語。
423:司馬乱
02/09/27 23:46
>>408
久しぶりにこのスレ覗いてみたら寂れてますねー.
コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
424:日曜Haskellerオヤジ
02/09/30 14:31
そーですねー、淋しいです。
>コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
取り合えず私にはあります、だれか作ってー
離散数学に興味を持ったところ、そのまま勢いでこれも面白くなってきています。
もっとも、一般位相はしらないわ、集合論はしらないわで大変ですが・・・
Haskell という言語はこういうものを勉強するときに便利ですね。
425:デフォルトの名無しさん
02/09/30 16:02
URLリンク(www.mail-archive.com)
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:デフォルトの名無しさん
02/10/01 00:43
これが圏論だっていうコードを見れば
分かるようになるかも。
430:デフォルトの名無しさん
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
越田一郎先生のページが復活していたので記念上げしておきます。
チュートリアルとしては最適と思います、私もこれを使っておぽえました。
URLリンク(www.teu.ac.jp)
442:デフォルトの名無しさん
02/10/28 04:33
寝られないので今さっき勉強始めてみました、あげ
443:デフォルトの名無しさん
02/10/28 05:04
Haskell ?
なにそれ?
444:デフォルトの名無しさん
02/10/28 05:09
>>443
若者向けのLisp
445:デフォルトの名無しさん
02/10/28 05:18
>>444
若者向けのLisp
446:デフォルトの名無しさん
02/10/28 09:38
prologの方がいいよ
447:デフォルトの名無しさん
02/10/28 09:47
んなわきゃねぇ(w
448:442
02/10/28 10:08
越田先生のチュートリアルいいよ。
公式のドキュメント読んでもいまいちだったけど、
これ読んだらけっこうすんなり入ってきました。
東京工科の学生には負けられません。
449:デフォルトの名無しさん
02/10/28 10:56
`ってどこ?っていうのがFAQかよ(藁
450:デフォルトの名無しさん
02/10/28 11:29
pの横にあるキーボードもありますけどね。
451:デフォルトの名無しさん
02/10/28 11:41
キーマップが違っててもすぐ分かるだろ
452:デフォルトの名無しさん
02/10/28 12:15
わからんキーはかたっぱしから押してみるのが近道だろうが
最近はヘタなキー押すとサスペンドしたりユーザー切り替わったりするらすいな。
なんでこれ以上ボタン増やしたがるのかわからんよ。
453:442
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:デフォルトの名無しさん
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
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:デフォルトの名無しさん
02/10/29 22:47
String は [Char] の別名だから。
URLリンク(www.haskell.org)
↑を見てみればわかるように言語仕様で
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
02/10/30 00:06
s/761/460/
でした。すんません。
463:名無しさん@Emacs
02/10/30 00:10
×returnLoan remove_person remove_book
○returnLoan exampleBase remove_person remove_book
でした。質問忘れてください。m( )m
464:名無しさん@Emacs
02/10/30 01:06
それでもあれですね。思ったより簡単ですね。
もっとCやPerlと比べて難しいかと思っていたら
そうでもなかった。二日である程度慣れました。
ループを一切使わずに全て再帰で書くのは
なれないうちはしんどそうだけど、見返りとして
バグの出にくいプログラムになるのかな。
これがすらすら書けるようになったら
この言語で仕事してみたいですね。
手っ取り早くHaskellを活用できる分野というと
XMLの処理系でしょうか。
Haskellについてはまだよくは分っていませんが(藁)
他の言語より向いている気がするんですね。
もっとフォーマルなプログラムにおいてこそ
こういった言語は意味をなすのかもしれないけど、
多分そういうのはヘタレには無理だろうし(w
とりあえず、IO、スレッドが使えるまで基礎勉強ですね。
無料で使わせてもらっていて、講義より先に
問題に関する質問をここに書いてしまっては
先生に申し訳ないのでここらへんでやめにしておきます。
先生には入門者用の本を書いてほしいなあ。
465:デフォルトの名無しさん
02/10/30 01:31
>>464
IBMのdeveloperWorksサイトに、HaskellでXMLを云々って記事が有ったね。
既出だろうけど。
466:名無しさん@Emacs
02/10/30 01:47
>>465
なるほど、それでかな。
Haskellを使ってみる前からXMLの処理には
関数型言語が向いている気がしてたんです。
ただ単に自分が以前DWを読んだだけだったのですね(汗
関数型言語初体験の感想としてなんですが、
JavaやC++ではいかようにも書けてしまうのが
むしろあまりよくないことに思えてきました。
アルゴリズムを素直に表現してそれがそのまま
プログラムになっているという。素晴らしいです。
久しぶりに萌え萌えです。
もっと綺麗に書けるよう努力せないかんですね。
467:名無しさん@Emacs
02/10/30 07:49
朝起きてから、Haskellスレパート1を見てたのですが、
2chに神が君臨したかのようなレベルですね(汗
自分の書き込みが恥かしくなって来たのでしばらく潜伏します。
早くみなさんのレベルに追いつきたひ。。。
これだけじゃ情報価値なしなのでせめてリンク
純粋遅延関数型言語 Concurrent Clean
URLリンク(sky.zero.ad.jp)
このサイトの書評は私のような初心者には参考になりそうです。
また管理者の人はCleanシステムのドキュメントの翻訳を精力的に
行われています。素晴らしいです。
468:デフォルトの名無しさん
02/10/31 21:02
英語サイトで東工大くらいの難易度のチュートリアルってあります?
469:デフォルトの名無しさん
02/10/31 21:19
ゲージンはいきなりGentle~を読んでコード書き出すの?
なんか信じられないんだけど、あれより簡単なドキュメントって
英語じゃみたことないよ。
470:468
02/10/31 21:31
>>469
情報どうもです。
テーマごとに手ごろな課題がついてて段階的に
ステップアップできるようなのがいいんですが。
もうちょっと探してみます。
471:デフォルトの名無しさん
02/11/02 09:19
これってまじですか?
URLリンク(research.microsoft.com)
というかAlexandrescuに触発されたとか。。
472:デフォルトの名無しさん
02/11/02 11:51
>>464
関数型言語でXMLを扱う例としてこんなのがあります。
URLリンク(xduce.sourceforge.net)
メインの開発者は日本人です。
実装はHaskellじゃなくてMLだけど。
473:デフォルトの名無しさん
02/11/02 15:15
Haskell.NETはどうなりますたか?
474:デフォルトの名無しさん
02/11/03 11:45
classって使ってます?
ghcのソースコード見ても殆ど使ってないんだけど、、、
C++がめんどくさくなるとという理由から敬遠されるのと
同じような理由で型クラスも使われてないとか?
475:460
02/11/04 11:04
URLリンク(www.haskell.org)
(6.3 Standard Haskell Classes)の図にある如く
言語仕様で定義されてる基本型からして使いまくりですが? >>474
476:デフォルトの名無しさん
02/11/07 21:28
>>471
う
477:デフォルトの名無しさん
02/11/07 21:57
I/Oとかの副作用処理って、モナドがファイナルアンサーですか?
他に良い方法無いの?(Haskell固有の話じゃなくて)
478:デフォルトの名無しさん
02/11/07 23:30
自分で考えろ
479:名無しさん@Meadow
02/11/07 23:44
スレリンク(tech板:717番)
480:デフォルトの名無しさん
02/11/10 23:22
ユニークな型ねー。
これだけで解決?
>>478
あなたも一緒に考えましょうよ。
481:デフォルトの名無しさん
02/11/10 23:43
他にもあるよ。
・lazyなストリームとみなす。
・continuationを使う。
482:デフォルトの名無しさん
02/11/11 01:28
そもそもLazyなのがいけないんだろ
483:デフォルトの名無しさん
02/11/11 16:00
このスレ相変わらずプログラムコード量が著しく少ないねぇ
484:480
02/11/12 03:32
>>481
その2つの方法もありますね。
でも古典的(あまり普及できない)方法なのでは?
485:名無しさん@Meadow
02/11/12 12:55
>>482
> そもそもLazyなのがいけないんだろ
‥‥‥誰もつっこまないのか。
っつうかオレ釣られた?
486:デフォルトの名無しさん
02/11/13 15:44
面倒なんで突っ込む必要なし
487: ◆y3A2MadQ16
02/11/14 05:57
苦労の割にありがたみが少ないということかもね…。
嫌いじゃないんだけど、導入の旨みが苦労に勝っていると証明できないんで、
最近はLazyにも個人的に放置気味…。>Lazy Evaluation
代わりにという訳でもないが最近は部分評価野郎になってまつ。
(その上、HaskellどころかJava野郎に成り下がってまつ(w。)
488:デフォルトの名無しさん
02/11/17 23:10
ガイシュツな話題。
Lazyが悪い訳じゃないのに・・・・
>>477
他にも色々なアンサーがありますよ。時制理論とね。
透明参照性を保つためには、時間とか状況とかを導入すれば良い。
489:デフォルトの名無しさん
02/11/18 10:18
効率性の問題に行き当たる
490:デフォルトの名無しさん
02/11/19 11:00
>>488
もちろん悪くはないんだ。漏れも個人的には好きだ。
ただ好みの問題を越えて、
実装の苦労と実行効率を補ってなお十分にいいと言い得るかが問題…。
491:デフォルトの名無しさん
02/11/19 23:09
>>489 >>490
実行速度も、もちろん気になるので言語に新しい要素を導入するときは
慎重にするべきですね。
でも構文で制限かければ良いような
もしくは処理系のanalysisによる最適化(正格性判断による末尾再帰とかね)
とかで何とかなりそうな気もします。
だれか何とかして。
492:デフォルトの名無しさん
02/11/20 16:59
Hugs98 November 2002 release
URLリンク(haskell.org)
493:デフォルトの名無しさん
02/11/20 17:04
November 2002 release (November 19, 2002)
We are pleased to announce a new major release of Hugs98. The most important features of this release are:
・ Much improved FFI support (contributed by Alastair Reid), bringing Hugs really very close to the Haskell
FFI specification.
・ Adoption of a significant subset of GHC's hierarchical libraries (contributed by Ross Paterson).
・ An (allegedly) complete implementation of the Haskell98 module system (Sigbjorn Finne).
Most reported bugs have also been fixed; however, some issues still remain. See Hugs Bugs & Features for
further information.
494:デフォルトの名無しさん
02/11/20 18:40
随分とでかくなったな・・・
495:デフォルトの名無しさん
02/11/21 15:25
>>440
バージョンアップしてもテンキーの"/"は効かないままな模様(Winhugs on W2k)
つーか日本語キーボードじゃないと再現しなくて
開発元は気づいてないなんてオチじゃないだろうな。
英語キーボード持ちの人だれか試してプリーズ。
496:デフォルトの名無しさん
02/11/22 01:10
>>495
漏れは英語キーボードだが。
日本語OSでしか再現しないのか?
497:495
02/11/22 21:57
>>496
英語KBでも効かないか。
ウチにゃ日本語W2kしかないから、英語OSの検証は無理だし。
もうちっと色々してみてダメだったらバグレポするつもり。
498:デフォルトの名無しさん
02/11/26 09:05
新しいHugs、なんかインストーラがおかしくない?
アクセス権の設定とか。
499:デフォルトの名無しさん
02/12/02 00:14
誰か、
lispとhaskellとocamlの
メリットデメリットを教えてください。
500:デフォルトの名無しさん
02/12/02 00:31
500get
501:デフォルトの名無しさん
02/12/02 00:41
501got!
502:デフォルトの名無しさん
02/12/02 04:55
新しいhugsにはwinhugsはついてないの?
503:デフォルトの名無しさん
02/12/02 20:57
越田先生の「値しての関数」と「オーバーロードとクラス」の問題が
全然分からない・・・。
誰かお助けを~
504:デフォルトの名無しさん
02/12/04 11:46
(´-`).。oO(tab-width 4文字にしててはまった。あー悩んだ悩んだ。do で。)
505:デフォルトの名無しさん
02/12/05 00:49
GHC 5.04.2 Released
URLリンク(www.haskell.org)
506:デフォルトの名無しさん
02/12/05 01:40
HaskellはMS Research所属の人間が関わっているのに、
UNIX指向なんでつか?
507:デフォルトの名無しさん
02/12/05 02:41
さあ
508:506
02/12/05 10:28
「GHCは」、だった。
509:デフォルトの名無しさん
02/12/06 09:11
ネタ?
もともとグラスゴ大のプロジェクトで,
大学の研究者を MSR が引っこ抜いてきて,
継続してる研究だからってかんじか.
ってゆ~か MSR ってマジで全く何の要求も
されない,ってウワサっすけど,本当?
個人的に一番参照してるサイモン博士の頁は↓だったりするが.
URLリンク(research.microsoft.com)
510:デフォルトの名無しさん
02/12/06 14:02
いや、GHCの最新版で一番最初に出るのがUNIX版なもんで
511:デフォルトの名無しさん
02/12/07 10:04
え,ソースは CVS でいつでも最新だよ? とかボケてみる(w
URLリンク(www*haskell.org)
彼らが常用してる開発環境が↑の Windows ビルド用環境ではない,
というだけかな,と.
512:デフォルトの名無しさん
02/12/11 20:50
>502
>新しいhugsにはwinhugsはついてないの?
オレも見つけられない。どこにあるの?
513:デフォルトの名無しさん
02/12/14 15:59
URLリンク(www.haskell.org)
>Emacs in Haskell の計画
これはネタですか?こんなことやってる人いるのかな?
514:デフォルトの名無しさん
02/12/16 06:01
URLリンク(www.haskell.org)
↑これのどこが面白いのか、誰かひとつ解説してくれ。
515:デフォルトの名無しさん
02/12/20 16:48
その面白さを理解できないあなたはHaskellerではなし。
無理にでも笑いなさい。
516:デフォルトの名無しさん
02/12/22 11:30
URLリンク(yzg.3nopage.com)
質問なんですが、これってなんていう本だか分かりますか?
おそらく、Haskell:the Craft of Functional Programmingの和訳だと思われるのですが……
検索しても出てこないもので……
517:デフォルトの名無しさん
02/12/24 10:15
>>516 何処ぞの大学か何かの授業用のテキストじゃないかなぁ.
前の年には毎回配ってたプリントを,次の年は一括して印刷・
簡易製本とかいうパターンって結構あるから
518:デフォルトの名無しさん
03/01/06 23:34
んが
519:IP記録実験
03/01/08 21:43
IP記録実験
スレリンク(accuse板)
1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
520:デフォルトの名無しさん
03/01/09 02:32
IP記録するのはいいけど串も規制しないと意味ないよな
521:デフォルトの名無しさん
03/01/09 03:16
フシアナ標準にすればいいのに。
困るのは厨くらいだろ?
522:デフォルトの名無しさん
03/01/09 03:58
>>292
どのIPがどの垢かは、ISPが記録してます。
だから、悪い事すればモデムだろとADSLだろうと捕まりますよ。
523:ぶん
03/01/09 14:08
始めまして。今私はplorogの勉強をしています。問題集に並べ替えのプログラムがあったのですが、よくわからないのでどなたか教えて下さい。
concatenate([],List,List).
concatenate([Head | This Tail],List,[Head | That Tail]):-
concatenate(This Tail,List,That Tail).
sort([],[]).
sort([Head|[]],[Head]).
sort([Head|[THead|[]]],Result):-
Head <= THead, concatenate([Head],[THead],Result).
sort([Head|[THead|[]]],Result):-
Head > THead, concatenate([THead],[Head],Result).
sort([First|[second|Tail]],Result):-
First <= Second,
concatenate([Second],Tail,Temp),
[First|RTail]=Result,
sort(Temp,RTail).
sort([First|[second|Tail]],Result):-
First>second,
concatenate([First],Tail,Temp),
[Second|RTail]=Result,
sort(Temp,RTail).
それで、これをどう繰り返せばいいのかがわからないのです。何かわかる人がいたら教えて下さい。
524:デフォルトの名無しさん
03/01/09 14:21
これからは馬鹿って書いただけで訴えられる可能性がでてきたわけで
525:デフォルトの名無しさん
03/01/09 15:05
既に訴えられているわけだが。ひろゆきが責任を取ってるだけで。
526:デフォルトの名無しさん
03/01/09 17:49
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
──────────────
Keep your thread alive !
スレリンク(software板)l50
──────────────
527:デフォルトの名無しさん
03/01/09 23:41
2ch板一覧
URLリンク(www.skipup.com)
>728 ( ´∀`)σ)Д`) プニ
528:デフォルトの名無しさん
03/01/10 08:39
そりゃ最初はよほどの大事でもない限りIPを渡すことはしないだろう、
でも物事はだんだんエスカレートしていく物、そのうち密告とかも「誹謗中傷」として
IPを渡すようになる、、、
529:デフォルトの名無しさん
03/01/10 10:39
最近、腐れさん見ないね・・
530:デフォルトの名無しさん
03/01/10 11:09
★ ひろゆき重大な決意を語る。
スレリンク(news板)l50
531:デフォルトの名無しさん
03/01/10 11:55
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
URLリンク(www.m-net.ne.jp)
ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
532:デフォルトの名無しさん
03/01/10 12:24
>>754
まともじゃない掲示板なんて存在意義ないね。
そういうことならここじゃ意味ないと思うが。
533:デフォルトの名無しさん
03/01/10 13:16
スレタイの日本語、微妙におかしいね。
534:デフォルトの名無しさん
03/01/10 15:37
(前略)815様
落ち着け。お前の感じている感情は精神的疾患の一種だ。
静める方法は俺が(中略)
鯖の前で両目をひんむいて「びっくりするほどユートピア」と唱えながらキュウリを(以下略
535:デフォルトの名無しさん
03/01/10 17:05
なつかし。
536:デフォルトの名無しさん
03/01/10 23:26
ひろゆき
お前にはがっかりした。
2chにも。さいなら。
537:デフォルトの名無しさん
03/01/10 23:34
全部ミギーが書きましたって言えば問題ナッシング
538:デフォルトの名無しさん
03/01/11 00:50
ううん、既存のTripodとかじゃなくて新たにそういうシステムを
作っちゃうの。
どう作るかはわかりませんw
しかし嵐とか不愉快な対策には「こいつがむかつく」と
ひとり1票で投票してきめます。
そしてその人はもうカキコ禁止。
どうやってカキコ禁止にするとかそういうのはわかりませんw
539:デフォルトの名無しさん
03/01/11 00:57
記録されてる分なにかと現社会より厳しくなった感じします、
540:デフォルトの名無しさん
03/01/11 12:22
とりあえず、訴えられたらスレ住人全員で土下座しよう。
ていうか、それくらいの気概で書き込め。
今までひろゆきに丸投げしていた負担を、個人個人で背負えばイイだけの話だろ。
ここからが本当の市民運動のスタートだよ。
541:デフォルトの名無しさん
03/01/11 13:21
>1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:???
>そんなわけで、qbサーバでIPの記録実験をはじめましたー。
IP記録実験
スレリンク(accuse板)l20
IP記録実験PART2
スレリンク(accuse板)l20
これまでのあらすじは あたりに誰かお願い。
542:デフォルトの名無しさん
03/01/11 13:47
マターリしてるのにスレ違いな質問はどーかと。
それに、会社立ち上げたんだし、たぶんにその辺からだろ~ね。
543:デフォルトの名無しさん
03/01/11 16:35
2chをはけ口にしていた人はどこで憂さ晴らしをするのか少し興味ある
544:デフォルトの名無しさん
03/01/11 16:42
漏れはどこもさくさく行ける。
プロバ次第だと思われ。
545:デフォルトの名無しさん
03/01/12 00:47
漏らすバカが出るだろうというのが一番の問題なんだよ
546:デフォルトの名無しさん
03/01/12 00:56
ごめん、なんで「それを言うなら」になるのかがわからん(^_^;)
後半の批判は批判でいいと思うんだけど、書き込む人間の自己責任ってのとどう関係してるの?
547:デフォルトの名無しさん
03/01/12 11:06
だろ。
461みたいなことばっか起こるだろ。
ろくなことなないな。2ちゃんなんか。
それもやられ損かなぁ?
訴えてやればいいのに。
548:デフォルトの名無しさん
03/01/12 15:22
>>1-517
荒らされる前までのリンク。
なんでプログラム技術板で私が覗いてる全スレでやられてるんだか・・・。
549:デフォルトの名無しさん
03/01/12 20:37
全ての責任は当事者同士で解決しろってこと
人が書き込んだものに対して賠償するのもアホらしいしな
ごく当り前な考えだわな
騒ぐ程のもんでもない
わかるか?
550:デフォルトの名無しさん
03/01/12 20:41
プチ法廷ごっこでは、詭弁で開き直る2ちゃん擁護派は強い。
でもリアル法廷ではボロ負け。
551:デフォルトの名無しさん
03/01/12 20:49
過度の期待は禁物です。
552:山崎渉
03/01/13 18:34
(^^)
553:デフォルトの名無しさん
03/01/13 22:25
そんなに世の中が嫌いか。
年収600万円に満たない屑でも愉快に暮らせる楽しい世の中じゃないか。
いちいち爆破するな。
554:デフォルトの名無しさん
03/01/14 10:32
Functional Programming With Haskell
URLリンク(www.amazon.com)
こんな本が出てました。誰か読んだ人はいますか?
あと4月いは損氏の本。といっても仕様書そのままかもしれないけど
Haskell 98 Language and Libraries : The Revised Report
URLリンク(www.amazon.com)
555:山崎渉
03/01/15 17:56
(^^)
556:デフォルトの名無しさん
03/01/17 00:03
標準ライブラリ関数のクイックリファレンス本って無いのかな?
入門本は取り敢えず読んだから、
簡潔な説明と簡単な使用例が有ると嬉しいんだけど。
>>554の本は、ちょっと違うみたいだし、
1969年にならないと手に入らないって書いてある……バグってるな。
557:デフォルトの名無しさん
03/01/17 10:46
>>554 後者って
URLリンク(www.haskell.org)
↑の最初にある Report ふたつの PS・PDF を
印刷製本したものではとか思われ
558:デフォルトの名無しさん
03/01/17 14:39
URLリンク(research.microsoft.com)
これだろ
559:山崎渉
03/01/23 20:13
(^^)
560:デフォルトの名無しさん
03/01/24 10:19
圧縮ツール bzip2 の作者 Julian Seward さん、Haskellerになったんですね。
URLリンク(sources.redhat.com)
561:デフォルトの名無しさん
03/01/25 15:44
つってもなー、Haskellerにはlurkerが多いらしいからな
562:デフォルトの名無しさん
03/01/26 15:59
www.haskell.org内にも Seward氏の名前はたくさん出てるから、lurkerではないのでは?
563:デフォルトの名無しさん
03/01/26 20:59
今日からHaskell使ってプログラミング始めます。
とりあえずHP作ってみた。
URLリンク(haskell.tripod.co.jp)
564:デフォルトの名無しさん
03/01/27 00:30
>>563
(・∀・)イイ!
応援しますよ
565:デフォルトの名無しさん
03/01/27 15:15
>>563
もう解決したんだろうか。":?"
566:デフォルトの名無しさん
03/01/27 16:57
>>564
心強いです。感謝。
>>565
解決しました。感謝感謝。
567:デフォルトの名無しさん
03/01/31 15:57
荒すな
568:デフォルトの名無しさん
03/02/03 22:53
WinHugsでテンキーの'/'が効かない件、
バグか仕様か知らないけど、取り敢えず直してみた。
Windowsでプログラム組んだ事無いんで、変な事してる
かもしれないけど、一応動いたよ。
*** Wintext.c.origTue Aug 6 07:29:18 2002
--- Wintext.cMon Feb 3 21:20:30 2003
***************
*** 2497,2502 ****
--- 2497,2506 ----
goto otherKey;
}
+ if (readKey.KeyCode == '/') {
+ readKey.IsExtended = 0;
+ }
+
return readKey;
}
569:デフォルトの名無しさん
03/02/05 16:32
template haskell まだあ~?
570:デフォルトの名無しさん
03/02/12 03:53
Hoshkell
571:デフォルトの名無しさん
03/02/23 03:23
素朴な疑問Haskell使ってる人たちって情報系の人ばかり?
572:デフォルトの名無しさん
03/02/26 20:26
【何処も】情報科学総合スッドレ【板違い】
スレリンク(rikei板)l50
573:デフォルトの名無しさん
03/03/12 16:17
11 March 2003 GHC 5.04.3 Released
574:デフォルトの名無しさん
03/03/12 17:10
どこが変わったのかわかりゃしねぇ。
ところで最近寂れてるな。
やっぱもうネタないのかね。
575:デフォルトの名無しさん
03/03/12 19:03
Haskellコミュニティは議論は盛んなんだけどなー
576:デフォルトの名無しさん
03/03/12 22:05
はやく日本語で本出ないかなー。
577:デフォルトの名無しさん
03/03/13 01:50
lazy evaluation ってなんですか?
578:
03/03/15 17:45
遅延評価 (lazy evaluation)
遅刻の回数を基準にボーナスの額を決めること。
URLリンク(www.nurs.or.jp)
579:デフォルトの名無しさん
03/03/15 23:18
>>577
値が実際に必要となるまで引数の評価を遅らせること。
要求呼び出し(call by need)
580:デフォルトの名無しさん
03/03/15 23:23
命令型言語ではほとんど実現されていない。
引数の評価は何らかの副作用を伴うことがあり、
引数がいつ必要になるか正確に知るのは難しい。
また、要求呼び出しはスタックによる実現が難しい。
581:デフォルトの名無しさん
03/03/16 00:47
URLリンク(www.generic-haskell.org)
ここで作られてるコンパイラを使っている人はいますか?
582:デフォルトの名無しさん
03/03/16 23:20
>>579-580
説明ありがとうございます。
583:デフォルトの名無しさん
03/03/17 12:38
Haskellerの中にはまたストリームベースを唱えている人もいるようだが
584:デフォルトの名無しさん
03/03/17 23:18
URLリンク(www.sampou.org)
585:デフォルトの名無しさん
03/03/18 13:48
意味不明でっす
586:デフォルトの名無しさん
03/03/18 20:49
>>583
この板にも居ますよ。たぶん数学屋の方でしょうけど。
ところでデータ構築子って理論的にカリー化できないのでしょうか?
最弱頭正規形を作ればいいのだから可能なのでは?と思いますが。
587:デフォルトの名無しさん
03/03/19 13:58
可能だからといって言語仕様にいれるとは限らないでしょう
その辺は言語設計上の様々な観点を
考慮しながら決定するということで
588:デフォルトの名無しさん
03/03/20 11:04
> 586
カリー化されてるんじゃないの?
589:デフォルトの名無しさん
03/03/20 12:49
余裕でっす
590:デフォルトの名無しさん
03/03/20 20:56
されているね、十分。
----code
data Tree a = Node a [Tree a]
instance (Show a) => Show (Tree a)
where show (Node item xs) = show item ++ show xs
-----実行
*Main> :type Node 1
forall a. (Num a) => [Tree a] -> Tree a
*Main> Node 0 (map (Node 1) (map (map (flip Node [])) [[2,3],[4,5]]))
0[1[2[],3[]],1[4[],5[]]]
-----
それとも、もしかして、こんなん?
-----code追加
test (Node a) = a
-----予想実行
*Main > test (Node 0)
0
*Main > test (Node 1 [])
1
-----
上はともかく、下はあってもおかしくないし、欲しいな。
あとで少し探してみるか…。
591:586
03/03/23 22:27
>>588-590
すでに可能だったのか・・。
すまんかった。
592:デフォルトの名無しさん
03/03/24 02:45
Windows版のHugsって、ドキュメントのバージョンがずれてない?
.hlp .pdf .htmlが古くて、.chmだけちょっと新しいような?
あと、Trexライブラリがうまく使えないんだけど、
もしかして再コンパイルが必要なのかな?
Hugs mode: Restart with command line option +98 for Haskell 98 mode
Reading file "C:\Hugs98\libraries\Hugs\Prelude.hs":
Reading file "C:\Hugs98\libraries\Prelude.hs":
Type :? for help
Prelude> :load Hugs.Trex
Reading file "C:\Hugs98\libraries\Hugs\Trex.hs":
ERROR "C:\Hugs98\libraries\Hugs\Trex.hs" - Illegal export of a lone
data constructor "EmptyRec"
593:デフォルトの名無しさん
03/03/25 08:06
はあー、MLはまだ何とかなりそうだが、haskellさっぱりわかんね。
594:デフォルトの名無しさん
03/03/25 15:07
漏れは逆にMLの構文がわけわからん、つーか好みに合わん。
Haskellも一部複雑だけどね。
URLリンク(www.teu.ac.jp)
とか見て動かしてみれば慣れるよ。
595:デフォルトの名無しさん
03/04/05 15:58
haskell.org維持費用捻出できなくなったのかよ
596:デフォルトの名無しさん
03/04/05 16:02
ワラタ
2ちゃんねらーで金出してやれよ。
トップページのλの隣にモナー飾ってもらえるかもしれんぞ。
597:デフォルトの名無しさん
03/04/05 17:32
>>595
April fool じゃないのか?
598:デフォルトの名無しさん
03/04/05 20:53
そうなら、もう消すだろ
599:デフォルトの名無しさん
03/04/06 12:06
1 Apr 2003 のニュースだから、永久保存かも
600:600
03/04/08 17:22
でも、去年は April fool なかったみたい age
601:山崎渉
03/04/17 15:36
(^^)
602:デフォルトの名無しさん
03/04/25 17:31
ホシュ
603:デフォルトの名無しさん
03/04/27 01:31
このゴールデンウィークにでも勉強したいと思いまフ。
604:デフォルトの名無しさん
03/04/27 05:18
これ、行列の対角化とかできますか?
605:デフォルトの名無しさん
03/04/27 14:04
対角化の計算を自分で書けばもちろんできる。
行列計算用のモジュールも公式サイトから辿れる。
あとはやりたい本人の裁量次第でいくらでも。
606:デフォルトの名無しさん
03/04/27 17:03
>>605
アリガ㌧
607:デフォルトの名無しさん
03/04/27 21:58
初期のhaskellはschemeで作られたって本当?
昔Yale大学のサイトになんか書かれてたけど。
608:デフォルトの名無しさん
03/04/29 08:28
けど・・けど・・
609:デフォルトの名無しさん
03/04/29 14:15
Common Lisp?
610:動画直リン
03/04/29 14:26
URLリンク(homepage.mac.com)
611:デフォルトの名無しさん
03/05/05 17:03
f x = let a = 1; b = c g
y = exp2
in exp1
f x = let a = 1; b = c
g y = exp2
in exp1
612:デフォルトの名無しさん
03/05/14 12:10
最強
613:デフォルトの名無しさん
03/05/15 17:49
logoが変わった
614:デフォルトの名無しさん
03/05/16 14:53
前よりよくなったねえ
615:デフォルトの名無しさん
03/05/16 14:58
そ…、そうか?
かなりビミョーなデザインだと思うが。
616:デフォルトの名無しさん
03/05/16 23:07
λの回りにゴミが付着してる様に見える
617:デフォルトの名無しさん
03/05/17 00:44
:: = 静的型付け
-> = 高階関数
∀ = 多相
=> = 型クラス
>> = モナド
つーことかいな。
618:デフォルトの名無しさん
03/05/17 01:29
そう考えると凝ってるな
619:デフォルトの名無しさん
03/05/20 07:11
凝ってる、っつーか、まんまやん。
620:デフォルトの名無しさん
03/05/22 16:57
CGAの話止まってるけど、なかなかまとまらんのかね。
621:デフォルトの名無しさん
03/05/26 19:20
>>619
featuring static typing, higher-order functions,
polymorphism, type classes and monadic effects
にそれぞれ対応してるという解釈のようだけどそれ分かって言ってんの?
622:山崎渉
03/05/28 12:56
∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎―◎ 山崎渉
623:デフォルトの名無しさん
03/05/30 18:14
結局、wxWindowsのバインディングで終わりそうな気配だな
624:遅報
03/06/02 00:56
ghc major version up
625:デフォルトの名無しさん
03/06/02 06:41
6.0の目玉はTemplateということになるのかな?
URLリンク(www.haskell.org)
626:デフォルトの名無しさん
03/06/02 17:06
教えて君で申し訳ないのですけど、他の関数型言語と比べて Haskell のどのあたりが
(・∀・)イイ! or (゚д゚)マズー なのですか?
できれば、いい面と悪い面の両方を聞いてみたいです。
627:デフォルトの名無しさん
03/06/02 17:37
>>626
(・∀・)イイ!
実装がいくつかある。
(゚д゚)マズー
末尾再帰じゃない。
628:デフォルトの名無しさん
03/06/02 17:45
○:数少ない遅延評価な言語の一つ
△:clean は遅延/正格の切替えができるらしいが、Haskellは…
629:デフォルトの名無しさん
03/06/02 18:58
>>627 実装がいくつかある。
SchemeやSMLも実装はいくつかあるが。
個々の実装の間に互換性がなければ、却って混乱するのでは?
630:Lazy eva.
03/06/02 21:31
call by need
必要なら呼んで
631:デフォルトの名無しさん
03/06/02 21:39
>>627
>(゚д゚)マズー
>末尾再帰じゃない。
lazyだと末尾の最適化はいらないんじゃなかった?
おれが勘違いしてるのかも知れないけど
632:デフォルトの名無しさん
03/06/03 10:04
(´-`).。oO( Haskell の (・∀・)イイ! 点がこの程度しか挙がらなくていいのだろうか)
633:デフォルトの名無しさん
03/06/03 22:56
いいところ:
純粋な関数型言語
厳格な型チェック
比較的豊富なライブラリ
遅延評価
わるいところ:
遅い
flatなarrayが無い
634:デフォルトの名無しさん
03/06/07 03:00
スレの伸びが lazy ...
635:デフォルトの名無しさん
03/06/07 23:24
>>634
…実はこのスレの定義は既にすべて準備されていて、誰かが問いを放つとレスが見えるようになる?
636:デフォルトの名無しさん
03/06/09 12:38
Haskell: The Craft of Functional Programming
これの新しいバージョンがでるっていううわさは本当なの?
Ruby系サイトのどこかで書いてあった気がするのだけど。
637:デフォルトの名無しさん
03/06/09 13:06
URLリンク(www.amazon.co.jp)
638:637
03/06/09 13:07
あ、だめだった。Amazonで検索すれ。
639:デフォルトの名無しさん
03/06/09 22:20
>>635
逆かも?
問いが放たれてから、必要に応じて定義を考える。
640:デフォルトの名無しさん
03/06/11 00:32
問に対して常に同じ答えが返ってきます。
641:デフォルトの名無しさん
03/06/11 09:51
文脈が変っていても同じ質問に対しては同じ答えが返ってきます。
642:デフォルトの名無しさん
03/06/11 09:52
>>640
問いの系列がmonadな演算で関連付けられてるので、
単独の問いに対しては当てはまらないカモッ!
643:デフォルトの名無しさん
03/06/12 18:05
>>641
それではガイシュツ処理が出来ませんので、
不具合発生です。
644:モナd
03/06/16 12:58
ΛΛ
(´d`) .。o〇(monad∈モナー?)
645:デフォルトの名無しさん
03/06/17 18:46
モナドは、人間から見て、副作用を扱ってるコードとほとんど
同じように見える。
人間にとって副作用のあるコードと同じように見えてる
とすれば、モナドって何の意味があるの?
人間が関数プログラミングしやすくするために副作用が
禁止されてるんじゃ無かったの?
646:デフォルトの名無しさん
03/06/17 18:51
「ある」と「あるように見えるけどない」は違うだろ…
647:_
03/06/17 18:53
URLリンク(homepage.mac.com)
648:デフォルトの名無しさん
03/06/17 18:55
>>646
違うけど、プログラマから見て同じように見えてるんだったら
プログラマにとっては同じでは?
コンパイラにとっての意味しかないのですか?
649:デフォルトの名無しさん
03/06/17 20:07
関数型の場合、コンパイラにとっては「ない」方が都合がいいけど、
人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。
で、「ない」ものをあるように見せるモナドは、便利ってことにならない?
それならモドキじゃなくて本物の副作用を認めてもいいじゃんという話はまた別
650:デフォルトの名無しさん
03/06/17 20:29
>>649
> 人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。
それは関数プログラミングに反するから、関数プログラミング
の立場から見た場合、扱いが良いとは言えないんじゃないですか?
651:デフォルトの名無しさん
03/06/17 20:29
話が逆なんじゃないか?モナドは副作用をわざわざあるように見せるためのものでもないだろう。
652:デフォルトの名無しさん
03/06/19 21:09
a <- hoge
ってやったら、あとは a は見るからに完全に副作用の無い
関数型プログラミングであつかうわけだから、
モナドがあるおかげで関数型の意味がなくなるなんてことは全然無い。
結局モナドって、
副作用や、コードを書いた時点では決まらないものを
普通の関数の引数なんかにつかって破綻するのをさけるために、
型の前にMとかつけてそのままじゃつかえなくする仕組みでしょう。
653:デフォルトの名無しさん
03/06/24 08:16
日本語扱えるhaskellの処理系ってありますか?
654:デフォルトの名無しさん
03/06/24 09:06
いやらしいリンク集作った
URLリンク(homepage3.nifty.com)
655:デフォルトの名無しさん
03/06/26 07:32
Haskellはじめますた。
面白いですね~
・リストの内包表現に萌えた
・無限データ構造萌え
numForm n = n : numForm (n+1) とか。
あるもんをあるように書いたらいいって言うのがすどい。
詳しい方々、わかんないことがあったら教えてください。
アフォなんですが何とかがんばって基本を理解してから、
モナドを通って詳しい皆さんのところにゆきつきますので。
いまは、組み込み関数?を調べるのに困ってたりします。
IntをDoubleに変換するのってどうするの?
IntとIntegerの変換どうするんでうか?
とか、わからん。
「**」が解らなくて困ってた事も。
(-1)で懲りて、あらゆるところに括弧つけまくりのコードを書いてたり。
656:デフォルトの名無しさん
03/06/27 10:48
>>655
fromIntegral :: forall b a. (Num b, Integral a) => a -> b
toInteger :: forall a. (Integral a) => a -> Integer
fromInteger :: forall a. (Num a) => Integer -> a
657:デフォルトの名無しさん
03/06/27 13:05
今年もICFPの時期が来ましたがみなさんいかがお過ごしですか?
658:デフォルトの名無しさん
03/06/28 13:34
>>655
$をつかうと
f (g (h x))
みたいなのを
f $ g $ h x
とかけて括弧削減。
659:デフォルトの名無しさん
03/06/29 21:21
初心者質問いいですか?
GHCで、API、例えばIsDBCSLeadByte Char -> Bool を使いたいと思ったらどうすればいいのでしょう
660:貧乏脱出!これであなたはお金持ち
03/06/29 21:30
普通に働いてお金持ちになれるのは全体の1%のみって本当!?
本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
URLリンク(www.adultshoping.com)(直リン不可)
///////.......///////////////////////////
661:デフォルトの名無しさん
03/06/29 22:10
誤解があるようだが、モナドは純粋な関数型言語が
手続き風にコードを書くためのシンタックストリックに過ぎない。
拡張でもなんでもない。
(もちろんシーケンシャルのオプションと使われることが多いわけだが)
662:デフォルトの名無しさん
03/06/29 22:22
_,..............._,.......
,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_
_ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、
(::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
_ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::)
(::::::::::::::::::/  ̄ , ‐-、 |::::::::::::::::::::::::::::::::) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::) | トリックだ。
):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::( |
(::::::::::::/`i´ ,└=゚'┘ |::::| 6 |:::::::::::::::::::} < 副作用があるように見えているに
`~、 ゝ| _コ、_、 /|::::| ソ/::::::::::;~" | 過ぎん。
ヾ|||ll|||||||||||l〉| 三ー'~~" |
|||:二三|||| l ,三 ヽ、 \______________
|l ⌒ ||| :// ヽ=、-、_
|l、:( : : ||/ / ヽ, |  ̄\
/  ̄ / ノ / \
663:デフォルトの名無しさん
03/06/29 22:37
サータン,サータン!
664:デフォルトの名無しさん
03/06/30 00:06
ところで、日本語訳のページが見れなくないですか??
665:デフォルトの名無しさん
03/06/30 02:53
>>659わかるひといませんか~
666:デフォルトの名無しさん
03/06/30 07:59
>>664
URLリンク(www.sampou.org) ならサーバマシンの調子が悪いそうです
667:デフォルトの名無しさん
03/06/30 18:04
>>666
復活したようです。
>>665
いないんじゃないですか。人少なそうだし。
俺は、外界との繋がりはsystem :: String -> IO ExitCodeくらいしか知らない。
668:659=665
03/07/02 07:35
検索の結果、MessageBoxを呼んでいる例は見つけました。(真似たらできました)
でも、*.hiをバイナリ検索しても、IsDBCSLeadByteはインポートされて無いようです。
(CharNextとか、代用できそうなAPIも同様)
これは、Haskellで全角文字を扱うなというお告げでしょうか…
669:デフォルトの名無しさん
03/07/02 08:58
>>668
IsDBCSLeadByteってwindowsのAPI?
そういうものはそのライブラリとリンクしてつかうんじゃないのかな。
haskellに入ってるわけがないというか。
URLリンク(www.haskell.org)
のInterfacing with other Languages and Systemsとか。
670:デフォルトの名無しさん
03/07/02 13:46
>>668
>(真似たらできました)
おー、あなたも私から見たらすどい。
よろしければ、MessageBoxを出すコードをこのスレに張って
共有していただければありがたいです。
671:デフォルトの名無しさん
03/07/02 19:54
>>669
いや、GHC(Win版)には既にWin32 API(の一部)のHaskell用インポートが付いてるんですよ。
>>670
どーせ丸写しなので、いくらでも共有しましょう。
import Win32
main = messageBox nullHANDLE "Text" "Title" mB_OK
たった二行。
コンパイル時に -package win32オプションが必要です。
(win32ディレクトリ以下はデフォルトでは見てくれないので)
↓見つけたページ
URLリンク(www.haskell.org)
なお、同じようにしてMessageBeepを呼ぼうとしましたが、挫折中です。
672:デフォルトの名無しさん
03/07/02 20:21
>>669
あ、でもリンク先のFFIとか使えばできそう?できるのか俺に?
…ありがとうございます
673:デフォルトの名無しさん
03/07/05 01:11
FranTkを使った事のあるかたは居られますか?
使おうとしたけど何だかよくわからんかった。(窓使いです)
674:デフォルトの名無しさん
03/07/06 22:26
>659
URLリンク(www.sampou.org)
>6.1.2 文字と文字列
>文字型 Char は列挙型のひとつで、16 bit の値からなり、Unicode 標準 [10] に準拠する。
Unicodeなので要らないのでは?
ちゃんと実装されているならばだが。
675:デフォルトの名無しさん
03/07/07 10:39
> ちゃんと実装されているならばだが。
内部ではUnicodeかもしれないけど、全角文字をgetCharで読むと二回に分けて来るんですよ…
676:デフォルトの名無しさん
03/07/07 17:07
>>674
Unicodeとその(バイトでの)エンコーディングは別物だ。
677:デフォルトの名無しさん
03/07/08 02:44
>>676
実際
I/O functionsがbyte読んでそれをかえすだけだから、
Charが16ビットである意味がないんだよな。
謎の設計。
678:デフォルトの名無しさん
03/07/14 01:55
return () << [1,2,3] が [1,2,3] を返すのは何で? ()モナドの定義?
679:デフォルトの名無しさん
03/07/14 01:56
ごめん。わかってると思うけど << じゃなくて >> の間違い
680:
03/07/14 03:29
>>678
リストはモナドだから。
681:デフォルトの名無しさん
03/07/14 03:58
そういや、漏れもIOモナドはちょっと分かったつもりだけど、
なんでリストがモナドなのがいまいちよく分からん。
682:デフォルトの名無しさん
03/07/14 04:22
m がモナドのとき return () << m が m になるのはなんで? ()モナドの定義?
683:デフォルトの名無しさん
03/07/14 04:29
また >> を間違えて << にしてまった
書いた後気づいたのだが return [3,4] >> [1,2] も [1,2] 返すのか
() がポイントではなく return の方がポイントだった
かきまぜてスマン
684:デフォルトの名無しさん
03/07/14 04:42
return 1 >> [1,2] でも return 'a' >> [1,2] でも同じだな
685:デフォルトの名無しさん
03/07/14 14:12
>>682
>>の型からわかる型推論。
686:デフォルトの名無しさん
03/07/14 14:13
もっというと()はどのモナドでも返せる。
687:デフォルトの名無しさん
03/07/14 18:52
getChar って結局何返すの?
参照透明性からいって 'a' が入力されたからといって IO 'a' が返るわけじゃないんだよね
たびたび出る話題でスマンが毎回納得にいたらない
688:デフォルトの名無しさん
03/07/14 19:05
IO
689:デフォルトの名無しさん
03/07/14 19:27
>>687
意味不明。IO Charだけど?
690:デフォルトの名無しさん
03/07/14 20:13
>>687
強いて言えば IO 'a'だろうが、それで参照透明性に何の問題が?
691:デフォルトの名無しさん
03/07/14 22:08
そもそもモナドを理解するのにIOモナドから入る,っていうのが間違っている
という気がする.モナドを理解するためには,次の論文を読むのが吉かと.
Wadler, P. : Monads for functional programming
692:デフォルトの名無しさん
03/07/14 22:22
>>691
URLリンク(www.research.avayalabs.com)
ここにあるやつ?
693:デフォルトの名無しさん
03/07/14 23:45
>> 692
そうそう.
694:デフォルトの名無しさん
03/07/15 00:39
関数型では同じ関数なら何回呼んでも同じ値が返る建前では
実は暗黙のworldが渡されていて暗黙の新しいworldも返されている?
695:デフォルトの名無しさん
03/07/15 00:47
モナドって、食べ物じゃなかったのか。
696:デフォルトの名無しさん
03/07/15 01:05
理解するのに論文を読ませる必要がある事自体に
何か問題があるような気もするがー。
697:デフォルトの名無しさん
03/07/15 01:28
今印刷して読んでます…辞書片手に…どなたか、厨房向けに噛み砕いて説明してホスィ
698:デフォルトの名無しさん
03/07/15 01:31
>>697
_,..............._,.......
,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_
_ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、
(::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
_ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::)
(::::::::::::::::::/  ̄ , ‐-、 |::::::::::::::::::::::::::::::::) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::) | トリックだ。
):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::( |
(::::::::::::/`i´ ,└=゚'┘ |::::| 6 |:::::::::::::::::::} < 副作用があるように見えているに
`~、 ゝ| _コ、_、 /|::::| ソ/::::::::::;~" | 過ぎん。
ヾ|||ll|||||||||||l〉| 三ー'~~" |
|||:二三|||| l ,三 ヽ、 \______________
|l ⌒ ||| :// ヽ=、-、_
|l、:( : : ||/ / ヽ, |  ̄\
/  ̄ / ノ / \
699:デフォルトの名無しさん
03/07/15 06:43
>>682
return () >> [1,2,3]
後ろがリストなので、これはリストモナド
returnを外して、>> を >>= に変換すると、
[()] >>= (\x -> [1,2,3])
前のリストの要素それぞれに対して後ろの関数を呼んで、その結果を連結したものがこの式の値なので、
(\x -> [1,2,3]) ()
[1,2,3]
700:デフォルトの名無しさん
03/07/15 08:15
>>694
その通り。IO a はHaskellの側から見ると、
data IO a = IO (World -> (a, World))
このような構造になっていて、実行結果がIOだった場合に、表示する前にWorldが渡されて実行される。
実際はそんな面倒なことしていないと思うけどね。
701:デフォルトの名無しさん
03/07/15 08:48
半分ぐらい読みました…まさに>>698のおっしゃる通り…それ以後の式を全部λとして渡して、
でっかい合成関数を組み立てて、最後に一括して実行してるようなイメージでいいのでしょうか?→モナド
(と同時に、実装までそうなってないよなあと信じたい)
702:デフォルトの名無しさん
03/07/15 09:03
>>698
モナドを使えば副作用は「ある」というべきだろう。
たとえばモナドを利用したカウンタを利用して、
あるいは、ファイルに1, 2, ...と書き込んでループをつくれば、
あきらかにそこには副作用があるわけだ。
むしろWorldを変化させながら渡し続けるという発想の転換で(言語に対し)
無いように見せかけているだけだ。人間にとっては副作用は存在する。
703:デフォルトの名無しさん
03/07/15 09:26
>>702
あるように見せかけているだけだろ?
そうじゃなきゃモナドの意味がない
704:山崎 渉
03/07/15 09:34
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
705:デフォルトの名無しさん
03/07/15 11:33
>>701 よいはず。
あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。
706:デフォルトの名無しさん
03/07/15 18:29
>>703
逆だよ。というか循環論法。
そもそも関数型言語には本来副作用は存在し得ない。状態ってものが無いからね。
しかし、特に外部とアクセスするプログラムのためには副作用が必要だ。
関数型言語と、その副作用をともなう処理を、
副作用の種類(IOとか)毎の(内部状態を保持する)モナドを導入することで*分離*してるだけだ。
707:デフォルトの名無しさん
03/07/15 18:34
>>705
701のイメージはあってるが、
> あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。
遅延実行だからこそそういう式の組み立てと式の保存をやらないといけないわけで、
むしろ遅延評価だからと言ってそういう実装をするととんでもないことになる
というべき。
通常の式の評価でも下手に(末尾)再帰すると未評価の式の列が莫大になって
すぐオーバーフローする。
708:701
03/07/15 21:26
大雑把に読みました。後半のパーサは読み飛ばしましたが…
データ型としてのモナドは、要するにC++のクラスtemplate、のようなもの…ですよね?
ということは、IO a -> aな関数が記述不可能なのは、言語の外を相手にしたIOモナドに限った制限で
一般的にはそんな制限は無い、で合ってます?
簡単なサンプルコードどこかにないかな…
709:デフォルトの名無しさん
03/07/15 21:44
>>708
リストから成分を抽出できるでしょ。
710:デフォルトの名無しさん
03/07/16 00:34
>>709
ありがとです。
で、>>681氏と同じ疑問に行き当たるわけですが…
リストが状態を持っているとは思えないのですが、なぜモナド?
(a, b)とか他の一般の構造化型はモナドじゃ無いですよね。
711:デフォルトの名無しさん
03/07/16 01:00
>>710
リストを丸ごと全部で値と思わずに一部だけ更新したいんじゃない?
一部だけ更新するような操作には普通副作用がある。
…違うかな?
712:デフォルトの名無しさん
03/07/16 01:52
リストは >>= と return がモナド演算の法則を 満たしているからモナドなんじゃないかな
(a,b)とか一般の構造型はコンテナの中身の個数が1個ではない定数なのでうまく
モナド演算を定義できないような気がする
リストモナドの中身は任意個数。IOモナドは1個固定。
713:デフォルトの名無しさん
03/07/16 02:29
眠れない…
えーと、要するに、必然性は無いけど、
モナドということにすると [a] >>= (\e -> return (f e)) みたいな便利機能として使えるので
モナドということにしてある、ということですか。
>>711
よく見て無いのですが、ライブラリリファレンスにMutable ArraysとしてIOArrayが書かれてますので、
もしリストモナドで一部の更新が可能なら、こんなもの用意しないと思うので、それは違う気が
(我ながら無茶苦茶な論法だ…)
714:デフォルトの名無しさん
03/07/16 02:51
あれもこれも、Haskellの和書が出ないのが悪い。
715:デフォルトの名無しさん
03/07/16 10:48
>>707
すまんが、そういうふうにする以外の方法が自分には想像できない。
doも普通の再帰なので問題はなさそうだが?
>>711
リストモナド≒内包表記
副作用を発生できるモナドはIOモナドだけです。
>>710
ListとMaybeだけだね。
試しに、(a, b) でMonadを作ってみたが…きつい。
---
instance Monad ((,) a) where
(>>=) (sub, main) f = (sub, main') where
(sub', main') = f main
return main = (bottom, main)
bottom = bottom
test = do x <- (("a", 2), 1)
y <- return $ x+1
return $ y*2
---
*Main> test
(("a",2),4)
716:デフォルトの名無しさん
03/07/16 12:02
だれとはなくに
「型構築子」IO はモナドだけど IO a はモナドじゃないよ。
「型構築子」[] はモナドだけど [a] はモナドじゃないよ。
717:デフォルトの名無しさん
03/07/16 12:17
>>713
haskellのリストやアレイはは一部を変更すると全部コピー。
というのは、そのデータ(リスト等)が他の場所で使われるかもしれないから。
一部を変更したということがそのデータを使うプログラムの他の部分にも
わからないといけない。
そのためには、使う部分全部をそのデータの内部状態をあらわすモナドでくるんで
おく必要がある。
# 変更し終わったら、それはモナドの外に出してもいい。
>>715
701の件については、誤読していた。それ以降の式、ってのが何を指すのかわからない。
それはともかくとして、
(IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。
> 副作用を発生できるモナドはIOモナドだけです。
haskellプログラムがわからみればIOも他のモナドもかわらない。
プログラマから見たときも結局は同じこと。謎の内部状態をもつ
モナドを受渡しながら処理を順次実行するわけだから。
内部で定義されたモナドでもそのモナドの性質をみとおさなければ、
副作用と同様でしょう。
718:デフォルトの名無しさん
03/07/16 12:30
別のいいかたをすれば、711が書いているように、普通一部を変更すると
副作用が出るわけで、関数型言語では一般にはそれができない。
だが、その副作用/状態を追跡するモナド(STArray,IOArray等)を引数と
して渡し続けながらの順次計算であれば一部変更もできるわけだ。
719:デフォルトの名無しさん
03/07/16 12:45
だれとはなくに
「データ構築子」はファーストクラスだけど
「型構築子」はファーストクラスじゃないよ。
720:デフォルトの名無しさん
03/07/16 13:13
だれとはなくに
モナドは「型構築子」の性質であって、データの性質じゃないよ。
721:デフォルトの名無しさん
03/07/16 15:29
>>717
まず、すまんかった。
確かに中身を見なければ副作用を起こすことは可能だ。そちらの言う通り。
以降の式だが、自分は a >>= (\x -> b) の式に出てくるλのことだと思っている。
そして、715のそういうふうにとは、どでかい合成関数を作ってからそれを実行するということ。
もちろん、遅延実行されるので、少し作ってはそれを実行してというふうになると思っているが。
>(IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。
main = sequence_ $ reverse $ [putStr "\n", putStr "a", putStr "b"]
こう言うのはどうする…?
…特殊すぎるか。他は最適化されててもおかしくないやね。
>>718
少なくともIOArrayはIOモナドの一部であってモナドそのものではないと思うが。
>>719
しかし少なくともカリー化はされている。
722:デフォルトの名無しさん
03/07/16 16:39
>>715
サンプルとして活用させていただきます
で、勝手にインデント。
module Main where
instance Monad ((,) a) where
(>>=) (sub, main) f = (sub, main') where
(sub', main') = f main
return main = (bottom, main)
bottom = bottom
test = do
x <- (("a", 2), 1)
y <- return $ x+1
return $ y*2
>>721
表現が悪くて申し訳ないです。そのつもりでした。do A; B… と書いた時のB以降です。
723:デフォルトの名無しさん
03/07/16 17:37
data Id a = Id a deriving Show
instance Monad Id where
Id x >>= f = f x
return = Id
foo :: Int -> Id Int
foo arg =
do { x <- ID arg
; x <- ID (x * 2)
; x <- ID (x + 1)
; return x }
というHaskell のプログラムと、
int
foo (int arg)
{
int x;
x = arg;
x = x * 2;
x = x + 1;
return x;
}
は、そっくり。上は副作用をつかってないですけど、
下は副作用をつかっています。
そんだけ。
int
724:デフォルトの名無しさん
03/07/16 18:28
>>723
ID じゃなくて Id
725:デフォルトの名無しさん
03/07/16 20:17
突然ながら、FFIを試してみたり…
#include "hsFFI.h"
#include <stdio.h>
void __stdcall print_hex(HsInt a)
{
printf("%x", a);
}
foreign import stdcall "print_hex" printHex :: Int -> IO ()
main :: IO ()
main = do printHex 1234
>ghc ffi.hs ffi_c.hc -fglasgow-exts
Warning: retaining unknown function `_print_hex@4' in output from C compiler
動くんですけど、このWarningが消せない…
726:デフォルトの名無しさん
03/07/16 22:59
>>720
> 以降の式だが、自分は a >>= (\x -> b) の式に出てくるλのことだと思っている。
> そして、715のそういうふうにとは、どでかい合成関数を作ってからそれを実行するということ。
よくわからない。ダイナミックに関数を作ると?
> ...
> main = sequence_ $ reverse $ [putStr "\n", putStr "a", putStr "b"]
関数ポインタの配列をつくっておいて並べ替えるのかな。
>>721
> 少なくともIOArrayはIOモナドの一部であってモナドそのものではないと思うが。
確かに、モナドはそれぞれIOとSTだ。
モナドの一部っていうのもよくわからないが…
monad-awareという感じか。
727:デフォルトの名無しさん
03/07/16 23:31
>>725
__stdcall -> ccall、ffi_c.hc->ffi_c.c
で
ghc -ffi ffi.hs ffi_c.c
とすると何のWarningもなくコンパイルを通った(Windowsではない)。
728:デフォルトの名無しさん
03/07/17 01:25
誰か Haskell の和書書いてくれよ。
5000円くらいまでなら買うからさ。
和書ないとやる気が出ねぇし、普及なんて夢のまた夢だよ。
729:デフォルトの名無しさん
03/07/17 02:06
Haskellはドイツ語でクシャミの事
730:デフォルトの名無しさん
03/07/17 04:00
>>727
拡張子を変えたら警告が出なくなりました。
よくよく見てみれば.hcってコンパイラが生成したCソース用の拡張子…
どうも、お騒がせしました。
731:デフォルトの名無しさん
03/07/19 19:40
>>729
くしゃみが出るくらいに香辛料の効いたカレーを“Haskell Curry”と云う!?
732:デフォルトの名無しさん
03/07/19 22:54
>>726
>よくわからない。ダイナミックに関数を作ると?
その通り。 (.) が関数を合成するのと同じように。
>関数ポインタの配列をつくっておいて並べ替えるのかな。
引数等を保存しておく必要があるので、それをすると、λと変わらないと思う。
>>722
無理しているので、return a >>= k = k a が成り立たなくなってたりしているので注意。
ついでに、前に作ったモナドをどうぞ。
面倒を少し減らす程度のものですが。
---
module Main where
--type ReadS a = String -> [(a,String)]
newtype ReadR v = ReadR { runr :: ReadS v}
instance Monad ReadR where
ReadR r >>= fr = ReadR (\str -> [ret| (v,str') <- r str, ret <- fr v `runr` str'])
return v = ReadR (\str -> [(v, str)])
rread :: (Read a) => ReadR a
rread = ReadR reads
rlex :: ReadR String
rlex = ReadR lex
test :: String -> (Int,String)
test str = head test' where
test' = do rread
`runr` str
---
Main> test "125 "
(125," ")
733:デフォルトの名無しさん
03/07/21 01:46
Randomを使ったコードを少し書いて見ました。
毎回の let (r2, g2) = random g1 in … 数字は使うたびに増やす…が面倒だったので、
モナドにすれば好きな時に r2 <- nextRandom とか書けるのかなあ、とか思ったり。
(既にあるのかもしれませんが)
>>732
うう、ありがとうございます。しかし、私のレベルでは何をやっているのかと用途の両方がわかりません…。
734:デフォルトの名無しさん
03/07/21 01:52
>>732
|無理しているので、return a >>= k = k a が成り立たなくなってたりしているので注意。
モナドの法則を満たさなくてモナドといえるの?
735:デフォルトの名無しさん
03/07/21 02:33
module RandomProgression where
import Random
data RandomProgression r a = RP (r -> (a, r))
nextRandom :: (RandomGen r, Random a) => RandomProgression r a
nextRandom = RP (\r -> random r)
instance Monad RandomProgression r a where
--(>>=) :: RandomProgression r a -> (a -> RandomProgression r b) -> RandomProgression r b
RP x >>= f =
RP (\r ->
let (a, r') = x r in
let RP b = f a in
b r')
--return :: a -> RandomProgression r a
return value = RP (\r -> (value, r))
書いてみました…instanceでエラーが出ます…わかりません…
↓こんな風に使えたらいいなと思ってる
let (answer, g) = (do a <- nextRandom; return (a `mod` 10)) (mkStdGen 100)
736:デフォルトの名無しさん
03/07/21 02:45
括弧が要るんですね…
instance Monad (RandomProgression r) where
実行用に
eval :: (RandomGen r) => RandomProgression r a -> r -> (a, r)
eval (RP e) r = e r
書き足して
RandomProgression> eval((do x <- nextRandom; return (x `mod` 10)) :: RandomProgression StdGen Int) (mkStdGen 10)
(7,432453652 1655838864)
動いたー!
どうも、スレ汚しごめんなさい
737:デフォルトの名無しさん
03/07/21 02:59
>>733-736
そんなことをする必要はない。
randoms (mkStdGen 1) ::[Int]
のようにして無限乱数列が作れるのだから。
Make use of the power of lazy evaluation !
# あとはそれにmapでもなんでもして加工すればいい。
738:デフォルトの名無しさん
03/07/21 15:25
ハクションと似てなくもないような
739:デフォルトの名無しさん
03/07/21 19:05
>>737
なるほど!遅延評価を忘れてました。
しかしそれでも2個の乱数を取ってきたい時は、let (r1:r2:rs') = rs (以降はrs'から取る) みたく
乱数列を意識して渡していかないといけないような。いや、ずっと書きやすいではありますが。
740:デフォルトの名無しさん
03/07/21 20:22
>>734
知らん。気になるのなら、たとえば、こうすればちゃんとモナドになる。
module Main where
instance (Num a) => Monad ((,) a) where
(>>=) (sub, main) f = (sub+sub', main') where
(sub', main') = f main
return main = (0, main)
>>733
まずちょっと修正...スマソ。
import Monad -- 追加
instance Monad ReadR where
ReadR r >>= fr = ReadR (\str -> [ret| (v,str') <- r str, ret <- fr v `runr` str'])
return v = ReadR (\str -> [(v, str)])
fail s = mzero -- 以下追加
instance MonadPlus ReadR where
mzero = ReadR (\s -> [])
mplus (ReadR f) (ReadR g) = ReadR (\s -> f s ++ g s)
用途としては、下のようなコード(やさしいHaskell 8.3節からコピペ)のtuvwxのような変数を書かなくてもよくすること。それだけです。
>readsTree :: (Read a) => ReadS (Tree a)
>readsTree s = [(Branch l r, x) | ("<", t) <- lex s,
> (l, u) <- readsTree t,
> ("|", v) <- lex u,
> (r, w) <- readsTree v,
> (">", x) <- lex w]
> ++
> [(Leaf x, t) | (x, t) <- reads s]
741:デフォルトの名無しさん
03/07/21 20:26
上のコードのReadR版
>rreadTree :: (Read a) => ReadR (Tree a)
>readsTree s = rreadTree `runr` s
>rreadTree = do "[" <- rlex
> l <- rreadTree
> "|" <- rlex
> r <- rreadTree
> "]" <- rlex
> return $ Branch l r
> `mplus`
> do x <- rread
> return $ Leaf x
742:デフォルトの名無しさん
03/07/21 20:38
>>739
なんかまだ手続き型の頭のような気がする:)
関数型だったら結局繰り返しは再帰で書くんだから、
結局こんな感じになると思う。
f 0 result rs = result
f n result (r1:r2:rs) = f (n - 1) (g r1 r2 result) rs
# f 10 [] randomlist のように使う。
# g で欲しいものを計算。
743:デフォルトの名無しさん
03/07/21 20:39
う、結局が二つも。
744:デフォルトの名無しさん
03/07/22 01:26
>> 740
Num a が気になる
745:デフォルトの名無しさん
03/07/23 22:09
GHCって実はfromIntが無かったりします…?
Variable not in scopeと言われるのですが
746:デフォルトの名無しさん
03/07/24 01:42
>744
気にするな。
747:デフォルトの名無しさん
03/07/24 10:52
>>745
fromInteger じゃだめなの?
今のHaskell 98 の Prelude には fromInt は無いのでは。
748:デフォルトの名無しさん
03/07/24 20:52
>>747
いえ、Intからの変換にfromInteger (toInteger n)と書くのが冗長な気がしただけです。