07/02/25 01:59:18
∩___∩
|ノ⌒ ⌒ ヽ
/ ●) ●) |
Let's | ( _●_) ミ Haskell♪
彡、 |∪| 、`
/ ヽノ ヽ
/ 人 \\ 彡
⊂´_/ ) ヽ__`⊃
/ 人 (
(_ノ (_)
478:デフォルトの名無しさん
07/02/25 02:00:25
A B
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ /
彡、 |∪| ,/
/ ヽノ /´ ここにオブジェクトAとオブジェクトBがあるクマ
479:デフォルトの名無しさん
07/02/25 02:02:12
A → B
∩___∩
| ノ ヽ
/ > < | じつはAさんはBさんを好きなんだクマ
| //// ( _●_) ミ
彡、 l⌒l ノ
/ __ \ \ヽ
. (___) \__)
480:デフォルトの名無しさん
07/02/25 02:07:27
∩___∩
| ノ ヽ
/ ● ● | と、いうように
| ( _●_) ミ ある対象とある対象がなんらかの関係をもっていることを
彡、 |∪| 、`\ 圏論では「射」と言うクマ
/ __ ヽノ /´> )
(___) / (_/
| /
| /\ \
| / ) )
∪ ( \
\_)
481:デフォルトの名無しさん
07/02/25 02:09:55
∩___∩
| ノ ヽ A → B
/ ● ● |
| ( _●_) ミ この場合、Aさんを「ドメイン」、Bさんを「コドメイン」と言うクマ
彡、 |∪| 、`\
482:デフォルトの名無しさん
07/02/25 02:15:49
∩___∩
| ノ _, ,_ ヽ
/ ● ● | 別にBさんを好きじゃなくてもいいんだクマ
| ( _●_) ミ Bさんを嫌いでもいいし
彡、 |∪| ノ BさんはAさんの嫁でもいいし
⊂⌒ヽ / ヽノ ヽ /⌒つ AさんがBさんをレイ-プする、という関係でもなんでもいいクマ
\ ヽ / ヽ /
\_,,ノ |、_ノ
483:デフォルトの名無しさん
07/02/25 02:19:20
∩___∩
| ノ ヽ
/ ● ● | A → B
| ( _●_) ミ ココ!!
彡、 |∪| 、`\
/ __ ヽノ /´> ) この図では「→」がAさんとBさんの関係を表してるクマ
(___) / (_/ 関係というものには方向性が付き物なんだクマ
| /
| /\ \ この「関係を表した矢印」こそが「射」クマー!
| / ) )
∪ ( \
\_)
484:デフォルトの名無しさん
07/02/25 02:20:05
てらわかりやす
485:デフォルトの名無しさん
07/02/25 02:21:35
まだまだ続クマ?
\  ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ (´´
\(⌒-⌒) o (´⌒(´
(・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
486:デフォルトの名無しさん
07/02/25 02:40:43
/ ̄)
∩____∩. | | AさんからBさんへの「射」は1つとは限らないクマー!
| ノ ヽ.| |
/ ● ● || | くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「好き好き射」
| ( _●_) .ミ |
彡、. |∪| |
くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「エロエロ射」」
/ ,へ  ̄ ̄`ヽ
/ / \ t─┐ |
(__/ > ). | |_
/ / (___)
( \
\__)
487:デフォルトの名無しさん
07/02/25 02:56:02
、 l _,
ヽ/⌒ヘ~
., 't,_,ノ丶 ∩、 ∩
/ ! '` | '─-' '\
,/ ● 'i,
/ ( _●_) ● i,
彡 しノ ミ あたまをやわらか~くするクマ~
|`:、\ 'ii __,/
'i、 ̄~~ ij 乙__ノi
^-ァ __,ノ
r^~"i' 'l
!、 ! l
~^''!, ,_ ,!_
\ l,~^''‐--::,,⊃ ) ) ) )
`'‐’
488:デフォルトの名無しさん
07/02/25 03:02:26
X Y Z
∩___∩ /)
| ノ ヽ ( i )))
/ ● ● | / /
| ( _●_) |ノ /
彡、 |∪| ,/
/ ヽノ /´ ここにオブジェクトXとオブジェクトYとオブジェクトZがあるクマ
489:デフォルトの名無しさん
07/02/25 03:06:57
∩____∩
/ ヽ X → Y YさんはXさんのいとこクマ
/ ● ● | Y → Z ZさんとYさんのいとこクマ
| ( _●_ ) ミ
彡、,, |∪| /
/__ ヽノ l\
(___u) (uニ ).
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
490:デフォルトの名無しさん
07/02/25 03:09:49
|:::::::::::::::::::::::::::::::
|" ̄ ゙゙̄`∩::::::::::::::::
|,ノ ヽ, ヽ::::::::::::::::::::::::: X → Y
|● ● i'゙ ゙゙゙̄`''、::::::::::::::::
| (_●_) ミノ ヽ ヾつ:::::::::: ↓
| ヽノ ノ● ● i::::::::::
{ヽ,__ )´(_●_) `,ミ::::::: Z
| ヽ / ヽノ ,ノ::::::
あれ?XさんとZさんは・・・いとこ?
491:デフォルトの名無しさん
07/02/25 03:17:59
∩─ー、
/ ● 、_ `ヽ
/ ( ● ● |つ
| /(入__ノ ミ 所詮、XとZが
、 (_/ ノ いとこだろーと、はとこだろーと
\___ノ゙ 関係ないのさ・・・
/ 丶' ⌒ヽ:::
/ ヽ / /::: ただひとつ言えることは
/ /へ ヘ/ /::: XからZへのなんらかの関係があるかもしれない
/ \ ヾミ /|::: ってことだ
(__/| \___ノ/:::
/ /::: これを圏論では射の「合成」と呼ぶ
/ y ):::
/ / /:::
/ /:::: X → Y
/ /:::::
( く:::::::: ↓
|\ ヽ:::::
| .|\ \ ::::: Z
\ .| .i::: \ ⌒i::
\ | /:::: ヽ 〈:: [XからZへの矢印が考えられる]
\ | i:::::: (__ノ:
__ノ ):::::
(_,,/\
492:デフォルトの名無しさん
07/02/25 03:19:52
|
|.-─-、
| : : : : : : : : \
|: : : : : : : : : : : ヽ
|-…-…-ミ: : : : :',
| '⌒' '⌒' i: : : : :}
| ェェ ェェ |: : : : :}
| ,.、 |:: : : :;! どこで出ていこうかな・・・・・
| r‐-ニ-┐| : : :ノ
|! ヽ 二゙ノ イゞ‐′
| ` ー一'´丿 \
| \___/ /`丶、
| /~ト、 / l \
493:デフォルトの名無しさん
07/02/25 03:50:43
,..-─- 、
/. : : : : : : : : : \
関数Xは /.: : : : : : : : : : : : : : ヽ
クラスYを引数にする ,!::: : : :,-…-…-ミ: : : : :',
X(Y) {:: : : : :i \ / i: : : : :}
ちなみにYは {:: : : : | ェェ ェェ |: : : : :} 合成のほかの例え!!
Zという属性を. , 、 . { : : : :| ,.、 .. |:: : : :;!
持っている ヽ ヽ. _ .ヾ: :: :i r‐-ニ-┐ .| : : :ノ
} >'´.-!、ゞイ! ヽ二゙ノ イゞ‐′
| -! \` ー一'´丿 \
ノ ,二!\ \___/ /`丶、
/\ / \ /~ト、 / l \
/ 、 `ソ! \/l::::|ハ/ l-7 _ヽ
494:デフォルトの名無しさん
07/02/25 03:52:45
_ /- イ、_
__ /: : : : : : : : : : : (
〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
〈⊃ } {:: : : :ノ --‐' 、_\: : ::}
∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}
| ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ
/ ● ● | / ,,・_ | //  ̄7/ /::ノ
| ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/
彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ
/ __ ヽノ / / // |//\ 〉
(___) / / // /\ /
わかりづらいクマ
495:デフォルトの名無しさん
07/02/25 04:10:53
_ /- イ、_
/: : : : : : : : : : : (
/: : : : ::;:;: ;: ;:;: ; : : : ::ゝ; 関数X → クラスY
.{:: : : :ノ --‐' 、_\: : ::}
.{:: : :ノ ,_;:;:;ノ、 ェェ ヾ: ↓
.l: :ノ /二―-、 |: ::ノ..
| //  ̄7/ /::ノ 属性Z
. 〉(_二─-┘{/
/、//|  ̄ ̄ヽ
わかんないかなコレ・・・
496:デフォルトの名無しさん
07/02/25 04:14:39
class X {
method( Y ) {}
}
class Y {
Z z;
}
class Z {}
497:デフォルトの名無しさん
07/02/25 04:38:27
\ i /
── ・ ─ ← ヌッケ
 ̄ 二─ _ // | \
 ̄ 、 - 、 / / |
-、\ \ / /
\\ \
/ \ヾ ヽ ヽ
/ \ ヾ、 | i
クマソッ // |! `i |
/// | |
/ ( | |
<_,へ 丶-、 | |
__●_ rm \ \ |! リ |
/ ヽ-'⊇) ̄`ヾ │ / | |
⊂/ ● /\_,.-、 / / / /
│ /\ / _/ / / //
⊂丿 ミ (⌒)  ̄ / / /
\__ミ / / //_ /
\_/ _二─
498:デフォルトの名無しさん
07/02/25 04:39:35
A → B → C H
↓ ↑ ↑ ↓
D E → F → J
↑ ↑
G H → I くまー
r -、,, - 、
__ ヽ/ ヽ__
くまー ,"- `ヽ, / ● l )
/ ● \__ (● ● i"
__/ ●)  ̄ )"__ "`;
.(_i ● ' __, '"  ̄`'(___/.i⌒i
丶_ ,i⌒i,,_(_/ ● i ̄ ̄ )_|__
__, '"  ̄ ヽ! ● ●) ミ~ ̄_● ヽ)
くまー (_/ ● i ∪ / ⊂{● | くまー
l ●( _●) (  ̄)- / -' i
/ヽ、 |∪l T i ● '")
くまー
499:デフォルトの名無しさん
07/02/25 04:43:17
i⌒i⌒i
| ヽ
/ 人__ヽ∩
/ / ヽ >>498のように人間は人間同士いろんな関係をもってるクマ
/ / ● ● | 物事だってそうだクマ
( | ( _●_) ミ コレとかアレのいろんな関係で成り立っているクマ
\ 彡、 |∪| (
\ ヽノ `ー´⌒\
\ /\ \、
\ / (  ̄)
\ | ( ̄ ̄ ̄ ̄)
\ ヽ/ / ̄ ̄
\__/
500:デフォルトの名無しさん
07/02/25 04:48:31
∩___∩
/ ノ \ ヽ
| ● ● |
彡 (_●_) ミ
/、 |∪| ,\ 複数の「対象」と複数の「射」の集まり
, -‐- くJ( ヽノ ゝ-rr- 、、 ~~~~~~ ~~~~~
/Y ,r 、 `ー r'"^〃 、 つヒヽ これこそが「圏」 = 「カテゴリー」
,ノ '^` i! =テミ i' 天ニ ミ、 ='"^ヾ }
,/ ''=''" ノ-‐'ヾ-人,,__ノnm、''::;;,, イ
i! ,∠-―-、、 `ー'フヾ、 j 圏論(カテゴリー論)の基礎となるものだクマ
f'´ ノし `丶、 ー=ミ-JE=- /
ヾ=ニ- 彡^ 〃 ,,>、、`''ー-::,,_,,ノ
``ー--┬:, ''"~´フ ソ´`7'' ''"´
,に (`゙゙´ノ f^ヽ
,ハ ,ィ' ,;-ゝ、
/ミ`ーt!,_,ィ-‐彡''"^ヽ
/ ヾ::::::::::::::::r''" ぃ ;}
l t:::::::::::/ ノ /
l! `'T7′ / /
501:デフォルトの名無しさん
07/02/25 05:06:35
圏(カテゴリー)
┏━━━━━━━━━━━┓
┃クマー クマー クマー ┃
┃~~~~~~ ~~~~~~ ~~~~~~ ┃
┃ ↑[神] ↑[神] ↑[神] ┃
┃ [好き] [好き] . ┃
┃ A君 → Bちゃん → . C君 ┃
┃ ~~~~ ~~~~~~~~ ~~~~~ . . ┃
┃ ↑[好き] ↓[爆破] ┃
┃ . . [保有] ┃
┃ . . D君 → フェラーリ ┃
┃ ~~~~ ~~~~~~~~~~ ┃
┃ ↓[ペット] . .┃
┃ [同類] . .┃
┃ヌッケ ← 犬 .┃
┃~~~~~~ ~~~ . ┃
┗━━━━━━━━━━━┛
502:デフォルトの名無しさん
07/02/25 05:16:08
【まとめ】
┏━┓ 射 ┏━┓
┃.A.┃ → ┃.B.┃
┗━┛ ┗━┛
対象 対象
(ドメイン) (コドメイン)
上の図が基本要素
これが複数あつまり関係しあったものを圏という
503:デフォルトの名無しさん
07/02/25 05:20:23
ふぅ、つかれたクマー
∩___∩
| ノ ヽ ( )
/ ● ● | ( )
__| ( _●_) ミ__ ( )
(_. 彡、 |∪| 、`__ )─┛
/ / ヽ ヽノ /_/:::::/
|::::::::::| / ( ̄ ̄ ̄ヽ |:::::::| ̄
|::::::::::| |  ̄ ̄ヽ .ノ |:::::::| /
/ ̄ ̄旦 ̄ ̄ ̄ ̄ ̄ ̄ ̄/|/
/__________/ | |
| |-------------------| |
504:デフォルトの名無しさん
07/02/25 09:49:35
これは分かりやすいw
505:デフォルトの名無しさん
07/02/25 12:04:29
GJ!!
506:デフォルトの名無しさん
07/02/26 08:23:38
>>502
それがちょっと違う。
たとえば
A → B → C という2つの射があったときに
ここでA → Cという上の2つの射の*合成*が定義されてなかったら圏にならない。
すべてのコドメインとドメインが一致する射の組について合成が定義される
場合について、その全体を圏と呼ぶことが出来る。
↑のAAもがんばってくれw
507:デフォルトの名無しさん
07/02/26 19:20:21
オーム社から「クマでわかる圏論」マダー?
508:デフォルトの名無しさん
07/02/26 23:59:49
>>506
あー、なるほどね。そういう条件が必要だったのか。
Wikipediaのこの文章をみてちょっと理解しきれなかったんだな。
>圏 C についてその射(と射の合成可能性)だけでも全部わかっていれば、
>そのうちで恒等射になっているものが対象を示しているので著者によっては
>上の公理を満たす射の集まりを持って圏と定義することもある。
恒等射ってのがなんなのかわからん。ググっても出てこないし!
>>507
クマーとかを本に使って金もらうと炎上しそうだなw
509:デフォルトの名無しさん
07/02/27 02:24:05
クマーはGPLってことで
510:デフォルトの名無しさん
07/02/27 03:06:50
>>508
恒等射っていうのはドメインとコドメインが等しくて、
何回合成してもそれ自身と等しくなるような射。
圏のすべての対象について、一個ずつ恒等射があること
が必要。逆に言うと、恒等射があるとそれに対応する
対象がちょうどひとつあるので、恒等射と対象は
1対1に対応している。(したがって、人によっては、恒等射を
対象そのものとみなすって言うのが↑の記事、、
511:デフォルトの名無しさん
07/02/27 03:15:03
>>510
冪等射と恒等射は別じゃないか?
512:デフォルトの名無しさん
07/02/27 04:11:06
あ、そうだわ、・・・集合の圏とかだと冪等射がたくさん・・・orz...
だから、上の条件にプラスして、他の任意の合成可能な射
と合成して相手を変化させないという条件も必要。
ちゃんと書くと、
1:A→Aという射で他の任意の射
f:A→Bと合成して、f1=f
g:C→Aと合成して、1g=g
となるようなもの、・・・
513:デフォルトの名無しさん
07/03/18 18:43:55
臨時あげ
514:デフォルトの名無しさん
07/03/18 18:46:41
ここで、Stringableの是非を議論すればいいのか?
515:デフォルトの名無しさん
07/03/18 18:47:12
馬鹿が本スレ埋めやがったな
516:デフォルトの名無しさん
07/03/18 18:47:46
止めれw
次スレが立つまでの避難所ということで
517:デフォルトの名無しさん
07/03/18 18:54:27
よく読むとアンチスレなのにまともな議論されてるなw
518:デフォルトの名無しさん
07/03/18 19:01:05
スレリンク(tech板)
立てた。
519:デフォルトの名無しさん
07/03/18 19:07:59
>518
乙!
520:デフォルトの名無しさん
07/03/25 15:03:44
型が充実してるって言うから、ちょっと勉強してみたけど、
簡単に実行時例外が発生するじゃん。なんだよこれ。
コンパイルが通れば論理的な誤り以外、
ほとんどバグが取れてるのかと思ったのに。
実行時に読み込むデータとかの誤りなら仕方ないにしても、
そんなのない静的にすべて決まってるプログラムでも
実行時例外が起きえるなんて、全然だめじゃんwww
521:デフォルトの名無しさん
07/03/25 19:04:34
>>520
ボトムのことかな?
522:デフォルトの名無しさん
07/03/25 21:12:50
>>520
例外を起こす可能性のある関数を使わなきゃいいんじゃない?
あるいは、もっと型の強い言語を使ったらどうよ。
523:デフォルトの名無しさん
07/03/25 21:53:28
暗黙でも何でも良いから
関数毎の定義域に合ったサブタイプを作るとか、
なんとかならんのかね。
もっと型の強い言語ってどんなの?
524:デフォルトの名無しさん
07/03/26 01:54:12
Cじゃね。
525:デフォルトの名無しさん
07/03/26 10:33:01
Cほど型の緩い言語もないだろ。
526:デフォルトの名無しさん
07/03/26 10:43:07
Cは緩いけど硬直的
527:デフォルトの名無しさん
07/03/26 16:44:20
Dじゃね。
528:デフォルトの名無しさん
07/03/26 17:44:47
void*
529:デフォルトの名無しさん
07/03/26 23:35:13
日本拳法が一番厳格だと思うよ
530:デフォルトの名無しさん
07/03/27 20:05:02
あんまり深く使い込んだわけじゃないけど
俺が出会ったランタイムエラーは
パターンマッチの場合分けの漏ればかりだった。
型がらみで実行時エラーってでる可能性はあるの?
531:デフォルトの名無しさん
07/03/27 20:40:55
>>523
>もっと型の強い言語ってどんなの?
依存型のある言語とかじゃないか?実用化されてるのか知らんけど。
>>530
head []とかdiv 1 0とか。
532:デフォルトの名無しさん
07/03/27 20:45:02
計算停止性を決定可能にした天才の>>520がいると聞いて飛んできましたよ。
533:デフォルトの名無しさん
07/03/27 21:19:17
依存型って型に普通の値を突っ込めるようなもの?
とすると類に普通の型が混ざるわけ?
534:530
07/03/27 21:26:28
>head []とかdiv 1 0とか。
div 1 0は型エラーじゃないじゃん。
head []も型システムの責任なのかい?
そうか
型に値域を限定する機能があればいいのか?
div :: (Num a) (Num b:ただし0を除く) => a -> b -> a
head :: [a] ただし[]を除く
みたいな。
でもどうやっても静的にはチェックできそうにない orz
535:デフォルトの名無しさん
07/03/27 21:59:15
{-# OPTIONS_GHC -fglasgow-exts #-}
data ZeroT = ZeroT
data SuccT a = SuccT
data Nat n where
Zero :: Nat ZeroT
Succ :: Nat n -> Nat (SuccT n)
data List a n where
Nil :: List a ZeroT
Cons :: a -> List a n -> List a (SuccT n)
myhead :: List a (SuccT n) -> a
myhead (Cons x xs) = x
mydiv :: Nat n -> Nat (Succ m) -> {- ...型が書けねえ -}
536:保守
07/05/26 18:36:56
破壊的代入を使ったら負けかなと思う
537:デフォルトの名無しさん
07/05/27 20:43:18
勝ち負けを意識した時点で既にアンタ負けてるよ
538:デフォルトの名無しさん
07/05/27 23:19:22
>…負けてるよ
って言ってるアンタも勝ち負けを意識してるんだから、負けてるよ。
539:デフォルトの名無しさん
07/05/27 23:32:17
俺みたいな奴は勝つ必要なんてねえんだよ
540:デフォルトの名無しさん
07/05/30 21:02:25
勝とうよ。haskellがあれば勝てるよ
541:デフォルトの名無しさん
07/05/31 00:08:21
けどHaskellって正直なところ負け組だよ
542:デフォルトの名無しさん
07/05/31 02:59:58
関数型言語パスカル
543:デフォルトの名無しさん
07/05/31 03:24:30
>>543
544:デフォルトの名無しさん
07/05/31 03:25:27
>>544
545:デフォルトの名無しさん
07/08/22 21:16:38
ふつケル読んだけど、後半が理解できなかった。マジで難しい。
言語の設計の根っこがCPUの挙動にぜんぜん当てはめられていないからか、
俺には宇宙語だよこりゃ…。
546:デフォルトの名無しさん
07/08/22 21:36:33
当てはめられないかもしれないが
C言語もCPUの挙動に当てはめられるかというとそうでもない
そもそもソフトウェア設計用だからな
547:偉そうに語ってみる
07/08/23 01:19:28
>545
後半、モナドやWikiエンジンの開発のところは急に難易度が上がっているので、
それより前の部分を何度も読んで動かしていると感じがつかめてくると思います。
あとは、メモリとかスタックとか、効率のことを考えるのをひとまずやめて
プログラムでどういうことをやりたいかを考えてみるのはどうでしょうか。
548:デフォルトの名無しさん
07/08/23 02:46:56
おまえ偉そうだぞ
549:デフォルトの名無しさん
07/08/24 01:14:22
えっへん
550:デフォルトの名無しさん
07/08/24 09:02:27
つ[龍角散]
551:デフォルトの名無しさん
07/08/27 13:01:13
>>550
龍角散は「ゴホン!」だろ
エヘン虫にはヴィックスドロップ。
552:デフォルトの名無しさん
07/08/28 09:39:44
高度すぎてわからなかった^^;;
553:デフォルトの名無しさん
07/09/15 23:11:49
クマーが圏論を語ってる、、、。
554:デフォルトの名無しさん
07/09/15 23:12:36
MLと比べてどうなの?
555:デフォルトの名無しさん
07/10/08 21:16:41
クマー落ち防止保守
556:デフォルトの名無しさん
07/10/20 02:30:14
URLリンク(2ch.bluesvirus.com)
557:デフォルトの名無しさん
07/11/14 16:25:03
>>10
頭の中に同型対応になるものがたくさんあるってことだから
少なくともアホじゃないだろう
558:デフォルトの名無しさん
07/11/14 22:27:08
>>557
あの手の輩は「これは非直感的だからウンコ」て台詞の方が圧倒的に多いよ
559:デフォルトの名無しさん
07/11/19 00:28:42
何この良スレ
スレタイでスルーしてて後悔した
560:デフォルトの名無しさん
07/11/20 21:30:08
もっと活用できたらいいんだがなぁ・・・
561:560
07/11/20 21:31:14
>>560
560はスレのことね
562:デフォルトの名無しさん
07/12/11 07:32:07
sage
563:デフォルトの名無しさん
07/12/23 03:41:42
★
564:デフォルトの名無しさん
07/12/23 11:22:42
クマさんのArrow講義マダ?
565:デフォルトの名無しさん
07/12/23 13:33:30
arrow って命令型言語的なフローを書くための機構なんだよね?重要なの?
566:デフォルトの名無しさん
07/12/29 12:23:36
ぶっちゃけ>>8が理解できなくて劣等感にさいなまれた。
でもHaskellをかじったら理解できた。
その経験からつまずいた点を書いてみる。
qsort [] =
qsort (x:xs) =
とqsortの定義が2つ並んでいるのが理解できなかった。
これはHaskellの階乗を見て場合分けだと理解した。
fact 0 = 1
fact n = n * fact (n - 1)
int fact(int n) {
if (n == 0) return 1;
else return n * fact(n - 1);
}
567:566
07/12/29 12:45:46
[]が意味不明だった。
配列を[1, 2, 3]と書くと知って初めて空配列だと理解できた。
(x:xs)が意味不明だった。
他の部分で配列はすべて[]なのにここだけ()なのに違和感があった。
()はfact(n-1)のn-1と同じでx:xsが一つの要素だとくくっていると解釈した。
この辺はC言語だとコンマで区切るような所が空白で区切られているため
意識しないといけない部分だというように感じた。
そして++が配列の結合だと覚えた上で、
x:xs とはxが要素でxsが配列で [x] ++ xs という意味だと解釈した。
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
の構文木が初見でイメージできなかった。
演算子++の優先度が高いため A ++ B ++ C と3つの配列が結合していると解釈した。
C言語風にqsort(elts_lt_x) ++ [x] ++ qsort(elts_greq_x)と書いてあれば
初見でも自力で解釈できたかもしれない。
>>10のいうように自分の知っているC言語に近いかどうかというバカの壁がある。
だからと言ってC言語を知らない人の方が先入観がなく理解しやすいとは思えないが。
568:デフォルトの名無しさん
07/12/29 12:55:10
>>567
[1,2,3]は配列じゃなくてリスト
配列とリストの違いはググレ
569:デフォルトの名無しさん
07/12/29 12:57:10
文法を知らなきゃ理解できんのは当然だろ
それから、細かいが、
>演算子++の優先度が高い
低い、の間違いだよな?
570:デフォルトの名無しさん
07/12/29 12:58:12
>>10
「自分が知ってるものと似てる」=メタファ
「見たら使い方がわかる」=アフォーダンス
571:デフォルトの名無しさん
07/12/29 12:58:27
配列とリストなんて計算量が違うだけじゃん。
初心者は気にしなくていいよ。
572:デフォルトの名無しさん
07/12/29 13:00:14
>>571
だったらお前はmalloc,freeひたすら繰り返してろ
573:566
07/12/29 13:01:50
>>569
小学校で1+2*3のとき+より*の優先度が高いと習ったと記憶していますが
これはひょっとして大間違いですか?
574:デフォルトの名無しさん
07/12/29 13:03:26
>>573
どこに+と*が出てきてるんだ?
575:デフォルトの名無しさん
07/12/29 13:05:15
>>573
もし(++)の優先度が関数適用より高いなら、
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
は、
qsort (elts_lt_x ++ [x] ++ qsort) elts_greq_x
と解釈されるはずだよ。
576:566
07/12/29 13:07:20
>>574
Haskellとは関係なくて「優先度が高い」という言葉の定義の確認で、
+と*を比較すると*が優先度が高いという言い回しが正しいかどうかです。
>>575
すみません、それ以前のレベルで、
優先度という言葉の定義があやふやでした。
よく考えたら++の優先度が低いという意味が理解できました。
1+2*3で+は後で計算していますがqsortでの++もそれと同じですね。
混乱してしまってごめんなさい。
577:566
07/12/29 13:14:41
>>568
ご指摘ありがとうございます。
日本語のHaskell本を2冊とも買ったのでよく勉強します。
>>569
それはそうなんですが、自信たっぷりな>>8の書き方を見て、
普通の知能の人間なら文法も含めて推測できるはず
それができない俺はアホだ。
という劣等感を感じたんです。
色々とつまずきましたが、読み方が分かるようになると、
Haskellのインデントの文法はとても美しいと感じられるようになりました。
今まで好きだったPythonが糞に思えてきました。
578:デフォルトの名無しさん
07/12/29 13:18:42
>>577
haskellのインデント(レイアウトのことかな)が美しいと思うのは自由ですが、
ちょっと偉い人の間では嫌っている人もかなりいます
579:566
07/12/29 13:26:18
>>578
はい、レイアウトのことです。
もしお手数でなければ参考までに嫌われている理由をお聞きしたいです。
Pythonのインデントだとコピペの際にずれを直すのが鬱陶しいと思いました。
C言語だとずれていても無視できて、後で自動整形できますからね。
580:デフォルトの名無しさん
07/12/29 14:24:52
>>579
たとえばcaseの中にcaseがあって、それがレイアウトで書かれていると、
インデントが少しずれただけで全く意味が異なる式になってしまうことがあったりするから。
だからhaskellにはブロックで書くこともできるからレイアウトを使わなくても良い。
でもレイアウトが崩れても一つの解釈しかできないところならレイアウトで書いたほうがきれいかもしれないね。
581:566
07/12/29 20:28:26
>>580
なるほど。
レイアウトはExcelで書くのに向いているかもしれないと思いました。
そういえば副作用がない関数型のイメージをワークシートに例えた解説を
どこかで読んだのを思い出しました。
ところでqsort elts_lt_x ++ [x] ++ qsort elts_greq_xの演算子の件ですが、
単純に左から右にパースして優先度は関係ないのではないかと気付きました。
静的に型付けされているため、qsortの引数は1つしかないと決められるからです。
582:デフォルトの名無しさん
07/12/29 21:35:33
>>581
ヒント: カリー化
583:デフォルトの名無しさん
07/12/29 21:38:18
関数型言語初心者はマジでMLかOCamlから始めろよ
いきなりHaskellやったってわからねーだろ。
584:デフォルトの名無しさん
07/12/29 22:04:56
つ「Haskell The Craf tOf Functional Programming」
↑大学の教科書になってるHaskell使ったプログラミング自体の入門書だから
いきなりやってもわかるようにできてる
この本だとモナドが最後のほうになるまででてこないから
ふつうのHaskellプログラミングと併読してもいいやも
585:デフォルトの名無しさん
07/12/29 22:16:31
SML とか OCaml は(頑張れば宣言的に書く事も可能な)手続き型言語だからね
「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」
という世界。
586:デフォルトの名無しさん
07/12/29 23:51:39
>>585
というか、CAML開発の時点で「妥協の産物」と開発者自らが語っている。
その後継のOCAMLでレッテル貼る貼らないとか以前の問題。
その点、SMLはHaskellと同じで純粋培養した関数型っていう感じがする。
NewJergyとかいいな。
でもあえてGauchを薦めてみるw
Lisp/Scheme Familyは楽しいぞ。古きを尋ねて新きを知るという感じかな。
587:デフォルトの名無しさん
07/12/30 00:13:17
SchemeならMonaがアツい
OS開発も一緒に楽しめて一石二鳥
588:デフォルトの名無しさん
07/12/30 00:24:56
>>586
×Gauch
○Gauche
589:デフォルトの名無しさん
07/12/30 00:27:19
>>587
Reading Gaucheなんてのをやってるな
URLリンク(wiki.monaos.org)
590:デフォルトの名無しさん
07/12/30 00:29:24
Scheme は R6RS が好きになれん...
591:566
07/12/30 00:45:12
>>582
qsortが単独で切り出されてC言語でいう関数ポインタみたいなものとして
扱われないという事実をどう解釈するかということでしょうか?
確認実験をしてみました。
inc n = n + 1
add a b = a + b
inc 2 + inc 5 → 9 (+がincより低い)
add inc 2 inc 5 → エラー (addとincが同列のため)
add (inc 2) (inc 5) → 9 (明示的に差をつける)
もし++が同列なら以下の記述を強制されそうですね。
(qsort elts_lt_x) ++ [x] ++ (qsort elts_greq_x)
括弧なしのポーランド表記とは違うのだと理解しました。
>>583
はい、しょっぱなのクイックソートからつまずきました。
実はHaskellの前に英語の本を買ってF#をやっていたんですが、
C#とパラダイムが違うという実感が湧きませんでした。
C# 3.0でラムダ式を使えばF#いらないなー、みたいな。
そんなとき、Haskellのレイアウトが美しいと気付いたんです。
592:デフォルトの名無しさん
07/12/30 00:53:15
関数型を使うならcurryingとmonadぐらいは理解してないと使いこなせないんじゃないかな。
593:デフォルトの名無しさん
07/12/30 01:02:58
式が二つ並んでいたら関数適用になるってことはわかってるかな
C っぽく書くと
inc 2 + inc 5 → +(inc(2))(inc(5))
add inc 2 inc 5 → add(inc)(2)(inc)(5)
add (inc 2) (inc 5) → add(inc(2))(inc(5))
594:デフォルトの名無しさん
07/12/30 01:38:25
>>591
あなた、一度でもリファレンスに目を通しましたか?
最初から最後まで一読してから、わからないことがあれば質問してください。
595:デフォルトの名無しさん
07/12/30 01:39:04
幸運なことに、リファレンスは日本語化されています。
596:566
07/12/30 01:41:46
お騒がせしてすみません。
自分にHaskellは無理のようです。
色々と教えていただいてありがとうございました。
597:デフォルトの名無しさん
07/12/30 01:48:44
アンチを増やしてどうするw
598:デフォルトの名無しさん
07/12/30 01:51:30
この程度で挫折するようなカスのことなぞ知らん
599:デフォルトの名無しさん
07/12/30 01:52:27
rubyコミュの二の舞はごめんだからな。
600:デフォルトの名無しさん
07/12/30 02:05:39
Haskellユーザが増える→Haskellコミュの質低下→Haskellユーザ全体の技術力低下→オブジェクト指向化→Haskellはオブジェクト指向と親和性が低い→Haskellはダメ言語→Haskellコミュ衰退→乙
601:デフォルトの名無しさん
07/12/30 02:07:20
Haskell衰退の他のシミュレーションよろ
602:デフォルトの名無しさん
07/12/30 02:10:02
>>601
お前566だろ?
さっそく門前払いを逆恨みか
603:デフォルトの名無しさん
07/12/30 02:15:32
>>600
オブジェクト指向化したのがConcurrent Cleanじゃね?
604:デフォルトの名無しさん
07/12/30 02:24:04
関数型初心者はカリー化・モナド・遅延処理ぐらいまで理解してから始めてホスイ。
Cみたいなeager evaluationとHaskellみたいなLazy evaluationでは違うのだよ。
605:デフォルトの名無しさん
07/12/30 02:24:39
>>603
それは勘違い
606:デフォルトの名無しさん
07/12/30 02:24:46
>>603
いやOZだ。
607:デフォルトの名無しさん
07/12/30 02:33:52
急にスレが伸びてると思ったら基地外が暴れてたのか
608:デフォルトの名無しさん
07/12/30 02:52:45
冬だな
609:デフォルトの名無しさん
07/12/30 09:30:40
スレタイどおりの糞オナニー言語ですな
610:デフォルトの名無しさん
07/12/30 10:47:28
rubyは原理主義者がウザい
611:デフォルトの名無しさん
07/12/30 12:03:29
>>610
原理主義って・・・もともとrubyは学者でもない一プログラマが実用主義の下に作った言語だろ?
rubyの原理主義とはなんだ?
612:デフォルトの名無しさん
07/12/30 12:04:34
自分の胸に手を当ててみ
613:デフォルトの名無しさん
07/12/30 12:05:09
貧乳がありました
614:デフォルトの名無しさん
07/12/30 12:06:55
ツルペタょぅι゛ょキタ━━(゚∀゚)━━!!!!
615:デフォルトの名無しさん
07/12/30 17:00:47
>>585
>「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
>主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」
非正格性=non-Strictness=Lazyness
わざわざ非正格性なんて判りにくい言い方をするのモナーw
616:デフォルトの名無しさん
07/12/30 17:06:28
専門用語使うのがかっこいいと思ってる初心者さんなので許してあげてください。
617:デフォルトの名無しさん
07/12/30 17:15:22
「正格性」の反対語なんだぜ!って感を表現したかったんじゃないの
怠惰性とか遅延性って表現はなんか違和感が
618:デフォルトの名無しさん
07/12/30 17:26:53
そんなどうでも良い所を突っ込まれるとは思わなかった…
619:デフォルトの名無しさん
07/12/30 17:27:19
電子工学から入った俺にしてみれば、副作用なしの関数の方がはるかに直感的だったよ。
習い始めのころでもC言語は別に難しくはなかったが、新しいことを学ぶ気持ちだった。
関数型言語で初めて今まで培った勘が役に立った感じがする。
本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。
なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。
いや、歴史的経緯は知ってるけど、納得できない。
620:デフォルトの名無しさん
07/12/30 17:39:19
>>618
研究者の端くれなら尚更判りやすい表現を心がけるべきかと
621:デフォルトの名無しさん
07/12/30 17:41:16
>>620
なんで研究者だと思うんですか?
622:デフォルトの名無しさん
07/12/30 17:52:21
>>619
>なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。
関数型ではファンクターで抽象化できるからオブジェクト化が必要とされることがあまりなかったから。
手続き型では抽象化の方法がオブジェクト化に求められたが、これを関数型にポートする際にオブジェクト指向の関数型が必要とされた。
手続き型で蓄積された資産がすごい勢いでオブジェクト指向の関数型OCAMLにポートされつつあるからM$もF#を出す気になった。
こういった資産のひとつがOCAMLのocsigen。OCAML版Ruby on Railsのパクリ。
他にも、GaucheのKahuaもそれ系。
これらが関数型の世界でどんな進化をするのか興味深い。
623:デフォルトの名無しさん
07/12/30 17:58:15
F#はファンクターが無い訳だがw
624:デフォルトの名無しさん
07/12/30 18:01:39
Apple=>Ruby/Objective-C
Micro$oft=>F#/Visual-???
Unix=>Gauche/Haskell/etc
625:デフォルトの名無しさん
07/12/30 18:03:43
>>624
いいえ、
Unixは終焉までずっとC言語です。
626:デフォルトの名無しさん
07/12/30 18:09:22
>>625
Cはどのプラットフォームでも使うアセンブラ的なポジションになってると思う。
627:デフォルトの名無しさん
07/12/30 18:16:40
妥協の産物=>Perl/Ruby/OCaml
理想主義者=>Squeak/Haskell
現代の化石=>C/Lisp/Fortran/COBOL
628:デフォルトの名無しさん
07/12/30 18:21:59
COBOL?まだ使ってるところあるの?もう全部Javaになったかと思った。
Fortranは物理の世界では現役バリバリです。
Lisp・・・うーん
629:デフォルトの名無しさん
07/12/30 18:29:20
市役所勤務の知り合いがいうには
優秀なやつはシステム課に回されてコボルやらされるらしいですよw
630:デフォルトの名無しさん
07/12/30 18:30:36
Perl<=Larry Wall
Ruby<=Matz
OCaml<=INRIA
Squeak/Smalltalk<=Xerox Park(Allan Kay)
Haskell<=Bastiaan Heeren、Daan Leijen、Arjan van IJzendoorn
C<=K&R
Scheme<=Guy Lewis Steele Jr.、Gerald Jay Sussman
Fortran<=John Warner Backus
COBOL<=CODASYL
631:デフォルトの名無しさん
07/12/30 18:33:05
つ「お題 プログラミング言語の父と呼ばれるのは誰?」
632:デフォルトの名無しさん
07/12/30 18:57:01
チャールズ・バベッジ
633:デフォルトの名無しさん
07/12/30 20:19:25
階差機関(difference engine)は世界初のプログラム可能な計算機と云われています。
では、どのようにプログラムしたのでしょう?
634:デフォルトの名無しさん
07/12/30 20:34:42
>>631
まつもとゆきひろ
635:デフォルトの名無しさん
07/12/30 21:54:11
超良スレ保守
636:デフォルトの名無しさん
07/12/30 23:14:14
プログラミング言語の父といえばシェーンフィンケルとHaskellだろう。1920年代のコンビネータ論理(Combinatory Logic)だ。
シェーンフィンケルが考案し、Haskellが開発した。
その仕事が1930年代のチャーチとクリーネによるメタ言語としてのλ算法の業績につながった。
そしてその後1954年にIBMのバッカスが最初の高級言語FORTRANを作る。
こういう歴史の直系だから、言語としてのHaskellが研究志向が強いというのもうなづける。
637:デフォルトの名無しさん
07/12/30 23:22:30
カリー・ハワード同型対応なくしてプログラミング言語など存在し得ない。
638:デフォルトの名無しさん
07/12/30 23:40:29
>>619
そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが
「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。
本質的に「状態」を持たない関数型の世界にオブジェクト指向が入り込む余地はそもそも無い。
あと、細かいことだが
>本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。
コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい?
微分方程式ばかり相手にしてると忘れがちになりかねないけれども、コンデンサは確かに「状態」を持つよ。
抵抗のことはよく分からんが。
>>622
>これらが関数型の世界でどんな進化をするのか興味深い。
「純粋関数型」を標榜するHaskellとはオブジェクトは相容れないし、
OCAMLでもコード中、オブジェクト機能を使ってる部分は、「関数型っぽく」はならないだろ?
オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。
オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。
639:デフォルトの名無しさん
07/12/30 23:59:13
>>638
オブジェクト指向と関数型が共存することでこういったことが出来ればいいなぁという要求は出てくると思う。
これまでの言語の発展だってそういうことから出てきてる。
この部分は相容れないけどこれは一緒にするとこんなことが出来るというのが実装上の工夫のポイントだと思う。
君には無意味かもしらんが。
640:デフォルトの名無しさん
07/12/31 00:35:57
Y コンビネータ (fixpoint のことを Y コンビネータと呼びます。)
data X = PsiInv (X -> (Int -> Int))
psi :: X -> (X -> (Int -> Int))
psi (PsiInv f) = f
fixpoint :: ((Int -> Int) -> (Int -> Int)) -> (Int -> Int)
fixpoint g = let h y = g (\x -> psi y y x) in
h (PsiInv h)
f :: (Int -> Int) -> (Int -> Int)
f g n = if n==0 then 1
else n * g(n-1)
factorial :: Int -> Int
factorial = fixpoint f
-- factorial 10 == 3628800
641:デフォルトの名無しさん
07/12/31 01:48:19
>>638
>そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが
>「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。
ハァ?www
642:デフォルトの名無しさん
07/12/31 01:51:09
>>638
>「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。
どーでもいいがデータ構造とアルゴリズムを纏めるんじゃなかったかな?
状態云々は結果的にそういうプログラミング手法が出てきただけで本質的にはあんまり関係ないと思う。
まあHaskellの代数的データ型は型とデータ構造を対応付けて
型についてアルゴリズムを書くから、データ構造とアルゴリズムはほぼ完全に分離してるといえるかもしれない。
これはこれで結構分かりやすくていいシステムだとい思うんだけど、
たとえば型クラス便利だけどインターフェイスみたいにガンガン作る気にならないっていうか、
そういう細かいあたりがめんどくさくなってる気がする。
そういうのをオブジェクト指向で何とかできないものかとか思ったり。これは俺の浅知恵だけどね。
あと、細かいことだが
>コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい?
それは「副値」的なパラメータが存在するだけで実際にそれを「副作用」として実装するかはプログラマ次第では?
というかHaskellだったら普通にモナドで表現できるもんだと思う。
実世界での対応で考えると、ある力を外力と考えることも出来るし、より大きな系の内力と考えることも出来る程度の違い。
状態が存在するかどうかはどういう切り口で物事を見るかに依存している、と思う。
643:デフォルトの名無しさん
08/01/04 23:00:40
オブジェクト指向と関数型が共存できないという風評は日本だけ。
どこが発信源かは知らないがこういうことが普通に受け容れられるようになったんだなぁ。
ゆとり世代が言ってるんだろうか?
644:デフォルトの名無しさん
08/01/05 00:04:56
プログラミングに関する珍発言がまかり通るのは、日本では昔からの伝統です。
C言語が関数型言語であるとか、インタプリタはちょっとずつコード生成して実行する
処理系であるとか。
645:デフォルトの名無しさん
08/01/05 00:23:29
後者は国の問題じゃなくマーケティングの問題でそ
646:デフォルトの名無しさん
08/01/05 00:47:14
関数型のCAMLがオブジェクト指向を取り入れてObjective CAMLになったように、VBがλ算法を手始めに関数型を取り入れても不思議はないと思う。
VBの互換性を問題にしてる人は参照透過性とか副次作用とかを気にしてるんだろうか。OCAMLだってあまり考えずに代入とか使えば問題があるのは同じだと思うけど。
むしろOCAMLerがVBを使うときに便利だと思うけどなぁ。
647:デフォルトの名無しさん
08/01/05 00:49:18
それとも、OCAMLとHaskellでは全く違うということを問題にしてるんだろうか。
648:デフォルトの名無しさん
08/01/05 00:55:06
日本以外ではマルチパラダイムでお祭なのに
>オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。
>オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。
こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。
649:デフォルトの名無しさん
08/01/05 15:43:07
プログラミングする人はいっぱいいても言語を考える人が少ないんだよ
650:デフォルトの名無しさん
08/01/05 16:00:40
まるちぱらだいむだうゎあい、って日本で竹内先生とかが頑張ったのは
世界の先を行ってたと思うんだけどな。
旧帝大-早慶-電電&電機メーカ研究所レベルの研究の浸透拡散がうまく
いかんのはどこかに構造的な問題があるんかね?
651:デフォルトの名無しさん
08/01/05 16:07:41
>>648
別にお祭りというほどでもありませんが。
単に研究ネタがなくなったから今主流のオブジェクト指向と組み合わせてみよう、
って思ってるだけじゃないの。
652:デフォルトの名無しさん
08/01/05 16:11:25
>>648
> こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。
特定の環境にこり固まって極めちゃった悪い意味での職人型なプログラマとかにありそう。
そういう先輩が職場にいて、適切なフォローを入れる人がいなかったりすると、新人は悲惨だね。
653:デフォルトの名無しさん
08/01/05 16:23:02
>>640
SKIコンビネータのことをまとめてるHPを発見したので報告。
URLリンク(ls-al.jp)
ソースコードはこっち。
URLリンク(ls-al.jp)
なぜかYコンビネータはないけどY=SLLだからすぐに作れるね。
654:デフォルトの名無しさん
08/01/05 16:43:45
>>638みたいなMythに対しては古くからこういう有名な言葉があるんだが、
"Doing encapsulation right is a commitment not justto abstraction of state,
but to eliminate state oriented metaphors from programming."
Alan Kay, Early History of Smalltall
655:デフォルトの名無しさん
08/01/05 16:44:47
○Smalltalk
×Smalltall
656:デフォルトの名無しさん
08/01/05 17:12:45
Haskellはオブジェクト指向じゃないけど型クラスを使えるから準オブジェクト指向関数型言語とでも言えるのかな。
「型クラス」と「型構築子クラス」でオブジェクト指向っぽく使えて、副作用がないようにモナドやその一般化のアローが使える。
オブジェクト指向と関数型が共存出来ないと言いながらHaskellを使っている人は分裂気味なんじゃないでしょうかね。
657:デフォルトの名無しさん
08/01/05 17:23:03
いや、Type Class と、オブジェクト指向の「クラス」は別物な訳だが
658:デフォルトの名無しさん
08/01/05 17:26:07
>>657
だから『準』と言っている訳だが
659:デフォルトの名無しさん
08/01/05 17:30:37
「準」とかで片付けるとかどんだけwwwwwww
ばか
660:デフォルトの名無しさん
08/01/05 17:38:26
で>>659さんは別物のクラスだとどういうことが言えると言いたい訳かな?
ご高説を是非御拝聴いたしましょう。
661:デフォルトの名無しさん
08/01/05 17:44:34
どんだけwwwwwばか
関数型とオブジェクトなんざ共存出来ねんだよ。
無意味、無意味。無駄無駄無駄wwwwww
662:デフォルトの名無しさん
08/01/05 17:47:28
Haskellerはオブジェクト指向もわからないばかということですか。ああそうですか。
663:デフォルトの名無しさん
08/01/05 17:49:37
残念な展開だね。
664:デフォルトの名無しさん
08/01/05 17:57:51
>>656
arrow使いにくい
まるでbrainf*ckみたいに見える
結局は普通に書いたほうがきれいだ
665:デフォルトの名無しさん
08/01/05 18:13:14
「普通」とかで片付けるとかどんだけwwwwwww
ばか
やっぱHaskellerってのは池沼だね。
666:デフォルトの名無しさん
08/01/05 18:20:23
-- A Simple Brainfuck Interpreter
import System.Environment
-- Parser
data Command = Inc | Dec | Next | Prev | Put | Get | While [Command]
deriving (Show, Eq)
type Program = [Command]
parse :: String -> Program
parse s = program where (program, "") = parse1 s
parse1 :: String -> (Program, String)
parse1 "" = ([], "")
parse1 (']':xs) = ([], xs)
parse1 ('[':xs) = (While cmds1 : cmds2, rest2)
where (cmds1, rest1) = parse1 xs
(cmds2, rest2) = parse1 rest1
parse1 (x:xs) = (parse2 x, rest)
where (cmds, rest) = parse1 xs
parse2 :: Char -> Program
parse2 '>' = Next : cmds
parse2 '<' = Prev : cmds
parse2 '+' = Inc : cmds
parse2 '-' = Dec : cmds
parse2 '.' = Put : cmds
parse2 ',' = Get : cmds
parse2 _ = cmds
667:デフォルトの名無しさん
08/01/05 18:22:21
type Tape = ([Char], Int)
tape0 = (['\NUL', '\NUL'..], 0) :: Tape
getCell :: Tape -> Char -- Get value of current position
getCell (cs, i) = cs !! i
setCell :: Tape -> Char -> Tape
setCell (cs, i) c = (take i cs ++ (c : drop (i + 1) cs), i)
inc, dec, next, prev :: Tape -> Tape
inc t = setCell t (succ $ getCell t)
dec t = setCell t (pred $ getCell t)
next (cs, i) = (cs, i + 1)
prev (cs, i) = (cs, i - 1)
668:デフォルトの名無しさん
08/01/05 18:23:18
type Status = (Program, Tape, [Char], [Char])
step :: (Tape -> Tape) -> Status -> Status
step f (c:cs, tape, inp, outp) = eval (cs, f tape, inp, outp)
eval :: Status -> Status
eval (Get : cmds, tape, (i:inp), outp) = eval (cmds, setCell tape i, inp, outp)
eval (Get : _, _, "", _) = error "EOF"
eval s @ (Put : _, tape, _, _) = (cmds, tape1, inp, getCell tape : outp)
where (cmds, tape1, inp, outp) = step id s
eval s @ (Inc : _, _, _, _) = step inc s
eval s @ (Dec : _, _, _, _) = step dec s
eval s @ (Next : _, _, _, _) = step next s
eval s @ (Prev : _, _, _, _) = step prev s
eval s @ (While cmds : cmds1, tape, inp, outp) = while (getCell tape)
where while '\NUL' = step id s
while _ = (cmds2, tape2, inp2, outp1 ++ outp2)
where (_ , tape1, inp1, outp1)
= eval (cmds, tape, inp, outp)
(cmds2, tape2, inp2, outp2)
= eval (While cmds : cmds1, tape1, inp1, outp1)
eval ([], t, i, _) = ([], t, i, "")
669:デフォルトの名無しさん
08/01/05 18:24:49
run :: Program -> [Char] -> [Char]
run cmds inp = outp where (_,_,_, outp) = eval (cmds, tape0, inp, "")
main :: IO ()
main = do cs <- getContents
args <- getArgs
source <- readFile (head args)
putStr $ run (parse source) cs
-- brainf*ckなんてたったこれだけ。
670:デフォルトの名無しさん
08/01/05 18:35:01
>>665
お前は日常会話もできなそうだな
671:デフォルトの名無しさん
08/01/05 18:35:35
>>669
それをarrowでどうぞ
672:デフォルトの名無しさん
08/01/05 18:45:58
>>638
状態を持たないステートレスオブジェクトはそのまま純粋関数型言語に取り込めますよね。
「純粋関数型」を標榜するHaskellは状態がないのではなくモナドに閉じ込めています。
ステートフルオブジェクトの状態も同様にモナドに閉じ込める事で「純粋関数型」を
維持したままオブジェクトを利用できると考えますが何か問題があるのでしょうか?
673:デフォルトの名無しさん
08/01/05 18:56:27
>>672
>>664>>671でも書いたがarrowが使いにくいんだよ。brainf*ckみたいだろ。
brainf*ckを書き込んだ池沼にはわからねぇんだろうが
674:デフォルトの名無しさん
08/01/05 18:59:06
>>672
うんうん。Monadiusとかそうだよね。
675:デフォルトの名無しさん
08/01/05 19:14:19
>>670
で、「普通」の説明はマダァ?
676:デフォルトの名無しさん
08/01/05 20:14:22
, - ' ´ ̄ `` 、__
__,ィ ヽ. `ヽ.
, '⌒Y / 、ヽ ヽ ヽ.
/ / i /l/|_ハ li l i li ハ
. // 〃 /l i|j_,.//‐'/ lTト l、l j N i |
{イ l / l li //___ リ_lノ lル' lハ. ソ ___◎_r‐ロユ
i| /レ/l l l v'´ ̄ , ´ ̄`イ !| ll,ハ └─‐┐ナ┐┌┘ _ ヘ____
ハ| ll∧ハヽ ト、 '''' r==┐ '''' /l jハ| ll ll /./┌┘└┬┘└┼──┘ロコ┌i
〃 ∥ レ'¨´ヽiへ. _ 、__,ノ ,.イ/|/ ノ ll l| </  ̄L.l ̄ ̄L.lL.! ┌┘|
ll ll { ⌒ヽ_/ } ー‐<.__ ′ l| ∥
∥ ∥ ヽ, /、 〈 |:::::::| `ヽ ∥
∥ {. ハ ヽ Y`‐┴、::::v l ∥
∥ |iヽ{ ヽ_ゾノ‐一’::::ヽ. | ∥
∥ |i:::::`¨´-- :::......:...:.:.::.}| ∥
∥ |i::::::ヽ._:::_:::::::::::::::::::_ノ | ∥
∥ |i::::::::::::i___:::::::::::/ |
jj::::::::r┴-- `ー‐ '⌒ |
〃:::::::マ二 _,ノ
//::::::::::::i ー 一 '´ ̄::.
,','::::::::::::::i::::::::::::::::::::::i::::::ヽ
677:デフォルトの名無しさん
08/01/05 20:14:38
>>675
それは658が一番詳しいから658に聞いてくれ
678:デフォルトの名無しさん
08/01/05 20:25:09
さんざ荒らして説明拒否かよw
679:デフォルトの名無しさん
08/01/05 20:28:47
えっ、だれが荒らし?
680:デフォルトの名無しさん
08/01/05 20:34:27
池沼の「普通」なんて誰も興味ねえってよw
681:デフォルトの名無しさん
08/01/05 20:37:07
>>679
少なくとも>>676はアラシだろw
682:デフォルトの名無しさん
08/01/05 21:28:20
>>677
ぐぐれYO!ばか
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
683:デフォルトの名無しさん
08/01/05 22:10:09
>>665
普通?
社会通念だよ。
684:デフォルトの名無しさん
08/01/05 22:10:54
論文じゃあるまいし。
揚げ足取りなんかやってるから単位も危なくなるんだぞ?
685:デフォルトの名無しさん
08/01/05 22:25:42
>>683-684
せっかくぐぐって終息させてやろうとしてるのに馬鹿だねおまえはw
黙ってれば終わったのに。
晒しage
686:デフォルトの名無しさん
08/01/05 22:27:36
これが関数型使って気取ってる池沼の実態ですwwwwww
ばか
687:デフォルトの名無しさん
08/01/05 22:30:06
使えもしないのに関数型に憧れてんなYO!
Haskell使いキモスwwwwww
688:デフォルトの名無しさん
08/01/05 22:34:13
スレタイ通りのオナスレageんな
689:デフォルトの名無しさん
08/01/05 22:37:08
クソ言語が普通とか言ってんなよ。所詮、脳内オナニー。
690:デフォルトの名無しさん
08/01/05 22:39:26
恥ずかしいスレ名をアゲんな、変体どもがぁ。
Haskellはプログラム板の恥だな。
691:デフォルトの名無しさん
08/01/05 22:43:34
スレの削除依頼出せ.キモイんだよお前等
692:デフォルトの名無しさん
08/01/05 22:46:01
まあ、重複スレなのでこちらを削除しても問題ありませんね。
693:デフォルトの名無しさん
08/01/05 22:57:22
↑さんざん恥をかいたのでスレ削除して欲しい張本人がこう申しておりますw
694:デフォルトの名無しさん
08/01/05 22:59:01
Haskell使ってる人って頭が良いイメージだったけどw
695:デフォルトの名無しさん
08/01/05 23:01:32
なかなか笑わせてもらった
696:デフォルトの名無しさん
08/01/05 23:18:12
「Haskell」=「Arrow」+「普通」
697:デフォルトの名無しさん
08/01/05 23:20:35
普通ってwwww
「プログラム」=「データ構造」+「アルゴリズム」
ってWirth先生が言ってたぞ。
698:デフォルトの名無しさん
08/01/05 23:21:56
>>697
先生のゆーとーり世代
699:デフォルトの名無しさん
08/01/05 23:21:57
アローだってデータ構造だろうに。
700:デフォルトの名無しさん
08/01/05 23:23:22
普通のアルゴリズムなんて定義できんだろ。
701:デフォルトの名無しさん
08/01/05 23:24:32
普通のどこが気に入らないんだろう
702:デフォルトの名無しさん
08/01/05 23:25:43
アローに付随したアルゴリズムに定石でもあるのか?そんな本見たことねーぞ。
むしろ教えろゴルァ!
703:デフォルトの名無しさん
08/01/05 23:28:27
アローの定石と言えるかわからないけどバード先生の本には載ってる
704:デフォルトの名無しさん
08/01/05 23:35:36
Rahbi & Lapalme にはモナドの説明が無いけど、
Introduction to Functional Programming Using Haskell
Richard Bird
こっちには載ってるのか。
705:デフォルトの名無しさん
08/01/05 23:39:06
アロー程度がちょちょいと説明できないようじゃHaskell使いこなせてると言えないよね。
706:デフォルトの名無しさん
08/01/05 23:40:25
アローって簡単?
707:デフォルトの名無しさん
08/01/05 23:46:49
>>706
ふ・つ・う wwwww
お頭が弱いとアローがbrainf*ckみたいに見えるらしいけど、可換図式みたいで判りやすいよ。
ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
708:デフォルトの名無しさん
08/01/05 23:48:02
>>707
> ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
どうやら、arrowでプログラミングしたこともないことがよくわかった。
709:デフォルトの名無しさん
08/01/05 23:55:34
アマゾンみたらバードの本にはモナドとかアローについて書いてあるらしい。
でも翻訳はMirandaについてでモナドとか載ってなさげだねぇ。
710:デフォルトの名無しさん
08/01/06 00:10:55
Arrowって、Kleisli 圏とか Premonoidal 圏みたいなもんか。たしかに図を描けばなんてことなさげ。
711:デフォルトの名無しさん
08/01/06 00:16:47
>>708
はいはい。あーarrowはむずかしいいや。brainf*ckみたいにみえるなあw
712:デフォルトの名無しさん
08/01/06 00:21:36
教訓
・ オブジェクト指向と関数型は共存出来ない。
・ 「Haskell」=「Arrow」+「普通」 (ただしArrowはbrainf*ckである)
713:デフォルトの名無しさん
08/01/06 00:29:02
>>712
なにそれ?Haskell全否定じゃん。
714:デフォルトの名無しさん
08/01/06 00:31:52
708は口調ですぐわかるな。アンチなら使わなきゃイイジャン。
715:デフォルトの名無しさん
08/01/06 00:51:13
アローって意味的にはモナドなんかよかよっぽど理解できるだろ。
要するに計算の合成を定義すればいいだけ。
フリーダムすぎて使い方を迷うところはあるけど……圏論の知識とかいるか?
716:デフォルトの名無しさん
08/01/06 00:59:29
>>715
いらない。
717:デフォルトの名無しさん
08/01/06 01:00:54
arrowでプログラミングするのに数学も圏論の知識も微塵も必要ない。
718:デフォルトの名無しさん
08/01/06 01:01:02
>>715
あれば簡単ってことなんじゃないの?おれ圏論知らないけどさw
719:デフォルトの名無しさん
08/01/06 01:03:26
>>715
アローってモナドの一般化したやつじゃん。ほとんど同じだろ。
アローが関数を受け持って、モナドが値を受け持つ箱みたいなイメージ。
違ったっけ?
720:デフォルトの名無しさん
08/01/06 01:07:59
>>717
それは極論だろ。SコンビネータとかBコンビネータとかYコンビネータを適用するとき副作用があるのか分からなくてドキドキする。
数学知ってたらこういうことがさらっと出来ていいんだろうなと思う。
721:デフォルトの名無しさん
08/01/06 01:10:19
Haskellじゃなくてもいいようなプログラムなら数学の知識はいらないとは言えるw
722:デフォルトの名無しさん
08/01/06 01:13:48
結局、Haskellを何に利用しているかでアローの難易度も違って見えるんだろうね。
723:デフォルトの名無しさん
08/01/06 01:21:50
いらない・無意味・微塵も必要ない
724:デフォルトの名無しさん
08/01/06 01:28:42
普通
725:デフォルトの名無しさん
08/01/06 04:40:35
arrow関連で卒論書きたいんですが、受けはいいでしょうか?
726:デフォルトの名無しさん
08/01/06 13:30:28
>>719
値を受け持つ箱と考えるより、monadic function(a->m b)の形式で計算を纏めていく戦略と考えたほうが
理解しやすいかもしれん。monadic valueそのものをモナドだと思ってしまうとよくわからんなるんじゃない?
727:デフォルトの名無しさん
08/01/06 15:41:27
>>717
ならこのスレに来るな。ここはクマーが圏論を説明してくれた偉大なスレだ。
728:デフォルトの名無しさん
08/01/06 15:44:29
>>720
数学の知識がなくてもSコンビネータとかBコンビネータとかYコンビネータが
何を意味しているのかだけ知っていればどきどきすることはありません。
729:デフォルトの名無しさん
08/01/06 15:54:07
>>728
意味が良くわからない。AAで説明してくれ。たのむわ。
730:デフォルトの名無しさん
08/01/06 16:07:19
/-─-,,,_: : : : : : : : :\
/ '''-,,,: : : : : : : :i
/、 /: : : : : : : : i ________
r-、 ,,,,,,,,,,、 /: : : : : : : : : :i /
L_, , 、 \: : : : : : : : :i / 圏論持ち出したら
/●) (●> |: :__,=-、: / < 負けかなと思ってる
l イ '- |:/ tbノノ \ ニート(24・男性)
l ,`-=-'\ `l ι';/ \
ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヾ=-' /
731:デフォルトの名無しさん
08/01/06 16:26:09
>>730
博士課程のニーとですがなにか
732:デフォルトの名無しさん
08/01/06 16:39:00
数学の知識無しでアローをAAで説明出来んじゃなかったの?
しったかかw クマーktkr
733:デフォルトの名無しさん
08/01/06 17:23:29
スレの流れに
水を差すようで申し訳ないんだが
ちょっと質問
>>720
にある「(対称)前モノイダル圏」って
よく意味が解らない
対称モノイダル圏の条件を弱めたものらしけど
対称モノイダル圏だとなにか不味い事でもあるのですか
734:733
08/01/06 17:25:08
>>720
でなく
>>710だた
735:デフォルトの名無しさん
08/01/06 17:38:01
アローなんて簡単だろ
ほれ、これがアローだ
→
736:デフォルトの名無しさん
08/01/06 17:51:02
これの事でしょうか?ハァハァ
/⌒ヽ⌒ヽ
Y
八 ヽ
( __//. ヽ,, ,)
丶1 八. !/
ζ, 八. j
i 丿 、 j
| 八 |
| ! i 、 |
| i し " i '|
|ノ ( i i|
( '~ヽ ! ∥
│ i ∥
| ! ||
| │ |
| | | |
| | | |
| ! | |
| | ∥
/ ヾ
737:デフォルトの名無しさん
08/01/06 17:53:24
AA職人がいなくなってつまんなくなったね。
738:デフォルトの名無しさん
08/01/06 17:54:47
AA職人というか、コピペで説明してただけだろ?
739:デフォルトの名無しさん
08/01/06 17:57:34
その「説明してただけ」すら出来ないコピペ厨w
740:デフォルトの名無しさん
08/01/06 17:58:38
たしかに1年でレベルが落ちたのは否定できんなw
741:デフォルトの名無しさん
08/01/06 17:59:42
単にスレが捨てられただけでは?
742:デフォルトの名無しさん
08/01/06 18:00:42
いまどきarrowなんてみんな知ってて、いまさら説明の余地もない。
新しいネタ探して来い
743:デフォルトの名無しさん
08/01/06 18:14:58
>>742
こら!みんなが矢印とかちんぽを無視したからって怒るでないw
744:デフォルトの名無しさん
08/01/06 18:17:28
クマーってもう一年前の話か。上のほう見たら2つもあるね。
745:デフォルトの名無しさん
08/01/06 18:19:22
>>742
↑とアローの説明が出来ないクズが取り乱しております
746:デフォルトの名無しさん
08/01/06 21:27:48
>>728
コンビネータ理論を知っていれば十分で数学の知識を前提としないって?おいおい。
支離滅裂だぞ。
747:デフォルトの名無しさん
08/01/06 21:44:24
>>746
数学の基礎的な知識はそれほど必要ないだろ。
「それだけ」知ってればいいんだから。
748:デフォルトの名無しさん
08/01/06 21:55:31
>>747
基礎の意味が違うでしょ。コンビネータ理論は数学基礎論であって、数学の基礎知識じゃない。
しかも副作用についての知識は、いくつかのコンビネータを知ってるではすまない。
他にも山のようにある関数について、一つ一つ個別に知ってるよりも理屈を知ったほうが当然良い。
749:デフォルトの名無しさん
08/01/06 23:51:52
λλλλλ...
↑アロー・モナド・コンビネータ理論について行けず、肩を落として帰るプログラマの群れ
750:デフォルトの名無しさん
08/01/07 00:08:05
正直arrowとかどうでもいい
それよりhere documentを入れてくれ
751:デフォルトの名無しさん
08/01/07 00:29:30
>>750
URLリンク(cvs.haskell.org)
752:デフォルトの名無しさん
08/01/07 20:07:34
>>733
くわしくはこのページが参考になる。
URLリンク(d.hatena.ne.jp)
John Power & Edmund Robinsonによれば:
* TのKleisli圏C_Tがプレモノイド圏となる ⇔ Tは強度を持つ
* TのKleisli圏C_Tがモノイド圏となる ⇔ Tは可換強度を持つ
これはKleisli圏のプレモノイド構造と強度が1対1に対応しているということで、モノイド圏では都合が良くない。つまり、
プレモノイド圏となる⇒・・・⇒モナドの作用乗法
というのがwell-definedになるということを狙ってる。たしかにモナドって数学的な基礎知識無しでも使えると確信しましたか?
753:デフォルトの名無しさん
08/01/07 20:44:58
当然だけど、アローについても同様の議論が展開できる訳です。まあ、アローなんかどうでも良いんでしたね。
754:デフォルトの名無しさん
08/01/07 22:52:18
モノイド圏とモノイダル圏て何が違うの?
755:デフォルトの名無しさん
08/01/07 23:07:53
>>752
乙。>>710あたりが言ってた図を書くって「ペースティング図、スタック図(Santiago graphical notation)、ストリング図で描く・・・」てことか。
おれも>>735みたいなのをアローと思ってたw
756:デフォルトの名無しさん
08/01/07 23:13:13
>>754
Monoidal Category = モノイド圏
>>733しかモノイダル圏という日本語は使っていないと思う。普通、モノイド圏と呼ぶ。
757:デフォルトの名無しさん
08/01/07 23:44:59
>756 thx
ところで、圏でのモナドは分かるんですが、
プログラム言語のモナドって何なんですか?
758:デフォルトの名無しさん
08/01/08 00:30:05
検索しましたら次の資料が見つかり自己解決しました。
URLリンク(www.ipsj.or.jp)
759:デフォルトの名無しさん
08/01/08 00:33:47
>>757
ほい
URLリンク(www.sampou.org)
HaskellのモナドはMonadという型クラスのインスタンスれす。
Monadクラスは2つのクラスメソッドを持っていて、その2つがモナド則(3ホーソクありゅ)を満たしてマース。
よく使うモナドはIO, Maybe, Listあたりでしょう。どれも「演算」を繋ぐという感じに使いマース。
この3行を見たらリンク先にJUMP!
2つのクラスメソッドは、最初のうちは『>>=』が『|』(パイプ)に対応、『return』が『cat』に対応すると覚えておけば良いかもネ!
(Jonesはわざとパイプっぽくしたらしいネ)
モナドの構文は3つ。doとletとifだけ。
演算をモナド的に定義して繋ぐと、新しい特徴を参照透過的にモナドに結びつけることが出来ちゃう。
しかもモナド則3が保証するように「組み立て順序が自由」で、長くつながったモナドの鎖のどこを切ってもモナドになるョ。
これがモナドがもたらすモジュール化という効能だよーん。
760:デフォルトの名無しさん
08/01/08 01:11:34
>759 おおDankeです
プログラムにはなかなか深い数学が隠れているんですね。
いまふと思ったんですが、物理に出てくる量子化という
概念も、もしかするとモナドに関係あるかも知れません。
モジュラリティが何を意味するのかよく考えてみます。
761:デフォルトの名無しさん
08/01/08 21:02:22
ここの説明もなかなかおもしろいよ。
URLリンク(blogs.dion.ne.jp)
762:デフォルトの名無しさん
08/01/08 21:15:53
>>761
宣伝乙
763:デフォルトの名無しさん
08/01/08 21:40:15
>>759
doとletは分かるけど、ifってモナドと関係あったっけ?
764:デフォルトの名無しさん
08/01/08 23:36:51
>>761
説明が間違ってるところ大杉。
自分でモナドを作る時、どうするつもりかと思った。
765:デフォルトの名無しさん
08/01/08 23:45:48
>>763
do と if を一緒に使う話じゃないかな。有名な「一行で書け」ってやつ。
766:デフォルトの名無しさん
08/01/09 00:55:16
>>761
パクったはいいが、意味を理解してなかった、ってところか。
767:デフォルトの名無しさん
08/01/09 09:22:24
>>761ってそんなに間違いが多いのか~
どこからパクったのか分かりますか?
768:デフォルトの名無しさん
08/01/13 07:49:24
この年末年始のプログラマの休暇に
ここのスレが結構盛り上がっていたな
769:デフォルトの名無しさん
08/01/13 08:07:15
プログラマは休暇にHaskellの勉強か
みんな偉いな
770:デフォルトの名無しさん
08/01/13 10:35:26
どのへんがまちがってるの?
771:デフォルトの名無しさん
08/01/13 17:53:03
勘違いしてるだけなんじゃない?
772:デフォルトの名無しさん
08/01/18 04:18:25
なんだかんだ言って、本当はぜんぜん分かってない奴がほとんどだろw
773:デフォルトの名無しさん
08/01/18 09:45:24
まぁ仲間は多いと思っておきたいところだよな。
774:デフォルトの名無しさん
08/01/18 15:35:54
>>761の間違いを早く指摘して欲しいもんだなw
775:デフォルトの名無しさん
08/01/18 15:37:06
>>774
そういってPV稼ぐ魂胆だろ
自演乙
776:デフォルトの名無しさん
08/01/19 15:18:10
こんなとこで宣伝したところで何PV増えるというのか
777:デフォルトの名無しさん
08/01/19 18:53:04
>>775
そうやって自分が理解できてないのを誤魔化そうって魂胆だろ。
まずは>>761の間違いを指摘してみろよ。話はそれからだなw
778:デフォルトの名無しさん
08/01/19 21:02:10
ひとり暴れているのがいるみたいだね。誰も話したくないからって理解できないんだろうか。
779:デフォルトの名無しさん
08/01/20 13:31:52
いったいどこからパクったのか教えてくれよ。
780:デフォルトの名無しさん
08/01/20 13:54:12
>>779
どうでもいい
781:デフォルトの名無しさん
08/01/20 18:21:29
どうでもよくないな。それによって>>761が間違いかどうか判断できるだろ。
782:デフォルトの名無しさん
08/01/23 20:01:14
その判断がどうでもいいと言っているんだよ
783:デフォルトの名無しさん
08/01/23 20:35:14
1/8を最後にパッタリ流れが止まったのはなぜかな?
784:デフォルトの名無しさん
08/01/23 20:41:46
ヒント 自演
785:デフォルトの名無しさん
08/01/24 04:24:11
結局Haskellって遅いの?
786:デフォルトの名無しさん
08/01/24 22:55:28
>>785
perlよかハエーよ スクリプトに使うなら無問題
組込系にはちょっと シビアなタイミングが求められるとダメポ
787:デフォルトの名無しさん
08/02/16 05:51:47
>>786
>組込系にはちょっと シビアなタイミングが求められるとダメポ
組み込みはどんな感じのアセンブリコードが生成されるのか予測しやすいほうがいいと思うんだが、
Haskell使いが慣れてくるとどういうasm吐くか割と簡単に把握できるようになるの?
788:デフォルトの名無しさん
08/02/16 12:33:33
>>786
Perlよかはやいとか到底考えられないのだけど、その根拠は?
789:デフォルトの名無しさん
08/02/16 13:35:05
>>788
URLリンク(shootout.alioth.debian.org)
だと 14 対 1 で Haskell が速い
790:デフォルトの名無しさん
08/02/16 13:53:31
動的型でバイトコンパイルのPerlと、静的型でネイティブコンパイルのHaskellを比較して
Perlの方が速いと思うなら、そっちこそ説明が要るだろw
791:デフォルトの名無しさん
08/02/16 14:00:36
え~Haskellって、ネイティブコンパイルしてるのか。それすら知らなかったわw
インタプリタだとばかり思ってた。
792:デフォルトの名無しさん
08/02/16 14:10:08
両方可能だがね
793:デフォルトの名無しさん
08/02/16 14:34:52
インタプリタあるんだ、知らんかった
コンパイルしなくてもCGIとして使えるのかな 調べてみるか
794:デフォルトの名無しさん
08/02/16 14:39:19
あるかどうかは知らんが、可能ではあるだろう
795:デフォルトの名無しさん
08/02/16 14:44:38
runghcとかrunhugsとかあるけど、インタプリタをサーバに導入するほうが返って面倒な気もする
796:デフォルトの名無しさん
08/02/16 17:15:57
>>793
可能だよ
797:デフォルトの名無しさん
08/02/16 23:00:27
Haskellまだかじった程度だけど、参照透明性がなにかハッピーにしてくれるの?
やろうと思えば、既存の言語でも出来るわけで。言語的に制約がかかっているか
どうかでしょ。「言語的に制約がかかる」というのは、入門者にとってしかメリット
はないよ。
遅延評価も*ほぼ*使わない。無限計算なんてやらんよ?
こんなんで、なんで既存言語から乗り換えるの?俺が、まだHaskellよくわかっていない
だけ?
798:デフォルトの名無しさん
08/02/16 23:01:19
あげ
799:デフォルトの名無しさん
08/02/16 23:07:18
俺も初心者だけど、参照透明性の重用性がよくわからない。
つか、結局はunsafeなんとかで参照透明性をくずしてんでしょ?
800:デフォルトの名無しさん
08/02/16 23:08:04
ちなみにクソリストなんて採用するのはやめてくれ
801:デフォルトの名無しさん
08/02/16 23:08:40
>>797
C++ が参照透明な言語だって知ってた?
802:デフォルトの名無しさん
08/02/16 23:10:00
>>801
信じられない。あふぉかw
俺が、無知なら教えてくださいw
803:デフォルトの名無しさん
08/02/16 23:10:31
>>797
お前、今日のRuby勉強会に行ったやつだろ?
なぜ関数プログラミングは重要か
URLリンク(www.sampou.org)
804:デフォルトの名無しさん
08/02/16 23:11:05
参照透明性って、再代入できないってことだよな(間違ったら訂正してくれ)
C++は再代入できる、とおれは思ってるがw
805:デフォルトの名無しさん
08/02/16 23:12:01
>>803
Rubyはすきだが、そいつじゃない。というか、今日一日ひきこもってたしなw
806:デフォルトの名無しさん
08/02/16 23:12:04
>>799
unsafeを使うときは注意が必要である
いつ実行されてもプログラムに矛盾が発生しないことがはっきりしない限り使うべきではない
807:デフォルトの名無しさん
08/02/16 23:12:29
式と値が一対一に対応していること
808:デフォルトの名無しさん
08/02/16 23:16:09
Haskellのメリットを説きたいなら>>803のリンク教えるだけで十分じゃねーの?
809:デフォルトの名無しさん
08/02/16 23:16:48
>>802,804
まずはこれを読んでみてくれ。
URLリンク(d.hatena.ne.jp)
これが面白いのは、参照透明は程度問題に過ぎないという
視点を得られる所なんだと思っている。
810:デフォルトの名無しさん
08/02/16 23:18:09
参照透明性なんて飾りだよ
Haskellの魅力は、副作用が禁じられていることじゃなくて、
副作用なんていう扱いにくいものに頼らなくても自然にプログラムを書けることだ
遅延評価は大いに使う
「ほぼ使わない」なんて思えるのはHaskellに慣れてないだけだ
例えば、C言語の典型的なfor文の使い方
for(T i = init; cont(i); i = next(i)) use(i);
を、Haskellで自然に書き直すと
mapM_ use $ takeWhile cont $ iterate next init
になるけど、これは無限リストを使っている
811:デフォルトの名無しさん
08/02/16 23:19:34
>>809
あなたはネタを理解できない人なんですね
812:デフォルトの名無しさん
08/02/16 23:23:05
遅延評価便利だよ。
MLが不便に思えるぐらいだ。
813:デフォルトの名無しさん
08/02/16 23:23:13
>>811
ドッキリとかを真に受けるタイプの人でしょ?
>>809 がネタなんだけどね
814:デフォルトの名無しさん
08/02/16 23:26:29
>>799
unsafeなんとかは、本当は参照透明なのに、コンパイラが参照透明だと見なしてくれない式を書くときに使う
そうじゃない使い方もできるけど、それは邪悪な使い方だ
815:デフォルトの名無しさん
08/02/16 23:28:06
ffi使えばunsafe使わなくてもいくらでも邪悪なプログラムが書けるぜ。
816:デフォルトの名無しさん
08/02/16 23:28:41
HaskellのFFIはめちゃくちゃ楽だからな。
組み込みプログラムもなんのその。
817:799
08/02/16 23:41:48
>>803 >>808
803のリンクは、
「参照透明は関数型言語の魅力としては不適当」と言っているのでは?
818:デフォルトの名無しさん
08/02/16 23:47:33
>>816
オーバーヘッドもあるしメモリも食いまくるから組み込みには全く向かないだろ
819:デフォルトの名無しさん
08/02/16 23:54:08
>>818
関係ない。
組み込み=低リソースという時代は終わったんだよ。
それよりも、たとえばロケットや自動車のような用途では安全性が求められる。
820:デフォルトの名無しさん
08/02/16 23:57:18
>>817
参照透明でなければ遅延評価は役に立たないよ
821:デフォルトの名無しさん
08/02/17 00:00:21
D 言語に遅延評価もどきはあるけどな。
822:デフォルトの名無しさん
08/02/17 00:02:57
遅延評価はテクニックに近いものもあるしな
823:799
08/02/17 00:06:23
>>820
なるほど…。
でも、遅延評価も必ず使うわけではないし、
(IOの時など遅延評価されては困る場合もあるわけですよね?)
なんというか、参照透明そのものの優位性がわからない…。
・コンパイラが作りやすい?
・数学的にみて美しい?
…、いずれも一般ユーザには関係ないですよね…。
824:デフォルトの名無しさん
08/02/17 00:07:34
参照透明性ってデバッグの容易さの点で重要と聞いてるけど。
825:799
08/02/17 00:08:33
>>814
う~ん…。これは正しいのでしょうか?
あくまでも、Haskellは参照透明であって、
そうでないプログラムは邪悪という事ですよね。
826:デフォルトの名無しさん
08/02/17 00:11:43
>>823
参照透明だったら関数の返値をキャッシュできるよ
827:799
08/02/17 00:14:55
>>826
コンパイラの話ですよね…。
828:799
08/02/17 00:16:41
>>824
Haskellのデバッグってむしろ大変そうですけど…。
829:デフォルトの名無しさん
08/02/17 00:18:15
>>827
完全にキャッシュできればプログラマはわざわざメモ化とかのテクニックを使ってプログラミングする必要がなくなる。
・・・とは言うものの、GHCでは完全にキャッシュしているわけではない。
830:デフォルトの名無しさん
08/02/17 00:19:45
>>828
Cのデバッグで一番骨が折れるのが型によるバグ。
Haskellはコンパイルさえ通れば型に関しては完全に矛盾がない。
831:デフォルトの名無しさん
08/02/17 00:20:48
>>823
だから、参照透明性はそんなに重大な特徴じゃないんだって
(利点が無いわけじゃない。コンパイラによる最適化がやりやすい。コードが読みやすい。リファクタリングしやすいetc)
逆に、「参照透明でないこと」(破壊的代入や副作用を認める)にも大して優位性は無いんだ
Haskellにはもっと重要な特徴がたくさんある
動作オブジェクトを利用した入出力とか、代数的データ型+パターン照合とか、型クラスとか、遅延評価とか
832:797
08/02/17 00:25:59
>>830
Haskell の型はステキだと思いますよw
でも、traceとか「デバッグ」は大変そう…。
833:デフォルトの名無しさん
08/02/17 00:29:07
>>831
>参照透明性はそんなに重大な特徴じゃない
そうですよね…。
でも、なんか、かたくなに参照透明性を守ろうとして
余計わかり難くなってる気がするんですよね。
全面的な参照透明性を捨てた方が、
すっきりするのではないでしょうか…?
834:799
08/02/17 00:29:52
↑>>833 は 799です
835:デフォルトの名無しさん
08/02/17 00:30:17
第15回 Haskellでのデバッグのコツをつかむ
URLリンク(itpro.nikkeibp.co.jp)
836:デフォルトの名無しさん
08/02/17 00:30:34
traceってどういうのを指してるか分からんけど、printfデバッグの類は普通にできる
ただ、HaskellがCよりデバッグしにくいのは事実だと思う
gdbに匹敵する使いやすさのデバッガがまだ無いからだが
>>833
>でも、なんか、かたくなに参照透明性を守ろうとして
>余計わかり難くなってる気がするんですよね。
どの辺でそう感じた?
837:799
08/02/17 00:31:00
ああっ!
>>832 も799です。
838:799
08/02/17 00:35:00
>>836
> printfデバッグの類は普通にできる
そうなんですか?
なんかprintfいれるとバグが再現しないとか多そうですが…。
> どの辺でそう感じた?
IOモナドww
参照透明性を捨てれば
もっとステキな実装がありそうじゃないですか?
839:デフォルトの名無しさん
08/02/17 00:38:46
参照透明性を確保するために導入したんだから
本末転倒だじょ
840:デフォルトの名無しさん
08/02/17 00:41:05
俺はIOモナド大好きなのでその気持ちは良く分からん
例え参照透明性を捨ててもIOモナドは使いたい
841:799
08/02/17 00:41:50
>>839
ん?
いや、だから、参照透明性に固執するから、
IOモナドなんて理解しにくい方法で実装してるんでしょ?
842:デフォルトの名無しさん
08/02/17 00:43:33
参照透明性を実現する完全に純粋な関数型言語を作るのが
Haskell の1つの目標だったんじゃないのか?
843:デフォルトの名無しさん
08/02/17 00:50:41
IOモナド、というかIO動作の考え方は多少とっつきにくいけど、分かってしまえば簡単なことだし、
副作用を使った入出力よりずっとまともだと思う
それから、遅延評価の言語で素朴に副作用を使うと実行順が制御困難になるけど、
IO動作ならこの問題がない
>>842
だろうな
でも言語のユーザーにとってはそんな目標はどうでも良い
844:デフォルトの名無しさん
08/02/17 00:51:38
参照透明性が要らないというなら OCaml とか他の言語使えばいい。
それだけだと思うぜ。
845:デフォルトの名無しさん
08/02/17 01:00:20
>>844
その議論はおかしい
Haskellの特徴は参照透明性だけじゃない
デフォルトの遅延評価も型クラスもIOモナドも$演算子もOCamlには無い
参照透明性なんてどうでも良いという奴にでも、Haskellを使う理由はいくらでもある
846:デフォルトの名無しさん
08/02/17 01:09:14
じゃあ、参照透明性の無いHaskell に相当する言語を作ったらいいんじゃね。
847:799
08/02/17 01:12:57
>>840
そうなんですか…。
結局、慣れの問題なんでしょうかねぇ…。
848:デフォルトの名無しさん
08/02/17 01:15:01
Haskell では参照透明性をくずすものは trace のみなんだっけ?
849:799
08/02/17 01:15:23
>>846
まさに、そう、思うんですよw
そんな言語があれば、
確実にブレイクするのではないでしょうか?
誰か作って!私はもちろん……ムリ!
850:デフォルトの名無しさん
08/02/17 01:26:25
>>848
unsafePerformIOってのがある
>>849
単に参照透明性のないHaskellならunsafePerformIOを言語の一部として認めれば良いんだけど、
IOモナドを排除するのは難しいと思う
>>843で書いたけど、普通の言語にあるような副作用による入出力は、遅延評価と相性が悪い
実行順を分かり易く制御するには、結局、IOモナドか、Cleanの一意型か、
それに代わる何か新しいメカニズムが必要になる
851:799
08/02/17 01:39:54
>>850
な~るほど!
ひょっとしてunsafePerformIOを使いまくって
>>814 の言う邪悪なIOライブラリを作れば、
Haskellのままでもいいかもしれませんねw
852:デフォルトの名無しさん
08/02/17 01:41:59
もう屁みたいな例をたくさんあげられるのはウンザリだよ。
こうしよう、C(ほかの言語でもいい)からHaskellに乗り換えるために十分な
説得力を持つ実務的な例を1つだけあげてくれ。
853:デフォルトの名無しさん
08/02/17 01:55:30
darcs
854:799
08/02/17 01:55:42
>>852
「実務的」というかどうかはしらないけど、
コンパイラ的な処理には向いてるらしい…。
再帰下降構文解析
URLリンク(ja.wikipedia.org)
HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
855:デフォルトの名無しさん
08/02/17 02:00:39
> HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。
っていうのはウソっていうのはどっかでみたなw
856:デフォルトの名無しさん
08/02/17 02:06:37
>>854
実際、言語処理系には向いてる。
構文解析だけじゃなく、コンパイル過程での構文木の操作とかに
代数的データ型とパターンマッチがぴったりハマってかなり綺麗に書ける
(MLも同様。代数的データ型じゃなくてバリアントという名前だけど)。
言語処理系は、基本的にツリーの変形みたいな
I/Oを伴わない数学的な処理が多いから、という理由づけもできるかな。
857:799
08/02/17 02:08:10
Haskellというか、関数型言語の魅力としては、
>>803 のリンク先を読めばかなり納得できると思う。
858:デフォルトの名無しさん
08/02/17 02:16:57
>>848
いいえ
859:デフォルトの名無しさん
08/02/17 02:23:46
Haskellの言語仕様にunsafeとかFFIとかってあったっけ?
GHCの仕様じゃないの
860:デフォルトの名無しさん
08/02/17 02:27:47
>>859
FFIはHaskell 98への追補
URLリンク(www.cse.unsw.edu.au)
unsafePerformIOも入ってる
861:デフォルトの名無しさん
08/02/17 02:29:45
じゃあ、Haskellは純潔を失ったというわけだ
862:デフォルトの名無しさん
08/02/17 08:36:34
ハードリアルタイムアプリはHaskellでは無理
863:デフォルトの名無しさん
08/02/17 09:30:28
実時間要求とメモリを直接利用するアプリケーション以外はHaskellでおk
864:デフォルトの名無しさん
08/02/17 11:58:51
>>863
できるだろ
URLリンク(www.haskell.org)
865:デフォルトの名無しさん
08/02/17 12:01:27
仮想メモリとかOS必須じゃn
866:デフォルトの名無しさん
08/02/17 18:47:44
Haskell (International Computer Science Series) (ペーパーバック)
Simon Thompson (著)
# ペーパーバック: 528ページ
# 出版社: Addison Wesley; 3Rev Ed版 (2008/9/15)
# 言語 英語, 英語, 英語
# ISBN-10: 0201882957
# ISBN-13: 978-0201882957
# 発売日: 2008/9/15
今度こそ発売?
867:デフォルトの名無しさん
08/02/18 18:08:34
参照透明性を保証しないと、グラフ簡約が使えなくね?
868:デフォルトの名無しさん
08/02/18 18:18:32
使えなくはないと思うが、何で?
869:デフォルトの名無しさん
08/02/18 20:15:31
>>642
データ構造とアルゴリズムをまとめるだけなら、それこそ関数型言語の得意分野だし、
手続き型の世界でも、メッセージメタファって何それ、なgeneric programmingが幅を利かせている。
その分なおさら、状態と手続きをまとめるSmalltalk的なオブジェクト指向が
影響力を増しているように思う。
>>654のAlan Kayの言葉は、実行順序への依存性が下がること
(これはメッセージメタファ、イベント駆動から自然に出てくる)と、
参照透明という意味で状態を全く持たないことを(故意に?)混同している。
870:デフォルトの名無しさん
08/02/19 02:47:18
ハードウェアリアルタイム処理って言葉にすれば
Haskellはかなりいけそうな感触なんだけどなぁ
871:デフォルトの名無しさん
08/02/19 10:02:24
>>868
形式的な表現が同じでも、値が同じことの保証がなくなるから。