2015年1月2日

構造的だね

構造化ぷろぐらみんゆ。
0
Deprecatad @aiya_000

例えば高速道路は 逐次と分岐からなる手続きだと思うので ここにGOTOを組み込むということは 突然どっかからどっかまで車がワープするようなもので、 最も期待される『高速を降りるときにお金を払う』という結果すら無視できてしまうことがあるので これは「構造的でない」ということになる。

2014-12-30 18:29:57
Deprecatad @aiya_000

これを唱ったのが「GOTO有害論」だったはず。

2014-12-30 18:31:21
Deprecatad @aiya_000

これと同じで while(true)…if(..) break; も同じようなことことができてしまうので 構造的でないとされることもあるみたいだけど…

2014-12-30 18:32:36
Deprecatad @aiya_000

これは難しいことだよね。 一応、外側から見れば逐次, 繰り返し, 分岐しか使ってないもん。

2014-12-30 18:33:40
Deprecatad @aiya_000

でも実際にはとある点Aからとある点Bまで1つの命令によってジャンプしているというのは変わらない事実だよね…。 でもこの場合の「点B」は必ず「whileの外側」なので、 しっかり分岐からなる逐次という構造的な処理なのではないかと…思える。

2014-12-30 18:36:28
Deprecatad @aiya_000

半分くらいは構造的?

2014-12-30 18:36:43
Deprecatad @aiya_000

break LABEL; ? 知らない子ですね。 絶対使うなよ絶対っ!

2014-12-30 18:37:26
Deprecatad @aiya_000

あれは…感覚的にだけど、 間違いなく構造的じゃないだろうて…。

2014-12-30 18:38:02
Deprecatad @aiya_000

あれを使えば ループAとループBからなるネストしたループの ループBからループAの外側にジャンプできてしまう。

2014-12-30 18:39:28
Deprecatad @aiya_000

危ない。 なので理想的には逐次だけで行うのがいいのかも。

2014-12-30 18:47:26
Deprecatad @aiya_000

for(var i=0; i<10; i++){ if( odd(i) ) console.log(i); } という逐次, 繰り返し, 分岐は mapM_ print ( filter odd [1..9] ) という逐次に置き換えられるのー。

2014-12-30 18:54:58
Deprecatad @aiya_000

こうすると非常にわかりやすいよね。 それを『構造的である』と言うのさっ!! 多分。

2014-12-30 18:56:26
Deprecatad @aiya_000

人間が見てわかりやすい (構造的である)

2014-12-30 18:57:58
Deprecatad @aiya_000

twitter.com/aiya_000/statu… 後者の関数型コードはHaskellで書いたけど JSでもできるはず。 関数型を使おう。

2014-12-30 19:33:54
Deprecatad @aiya_000

性質を抽象化し、閉じ込めるのですっ!!

2014-12-30 19:34:23
Deprecatad @aiya_000

foldは末尾再帰の抽象を閉じ込めてるし(末尾再帰だよね?) mapは繰り返しの抽象を閉じ込めてる…のかな?

2014-12-30 19:35:45
Deprecatad @aiya_000

モノイドは単位元と結合性からなる性質を閉じ込めてるよね。 共通した性質を閉じ込めて、 プログラマはコードに具体性を記述する。 …っていうのがあれに対する僕の解釈かなあ…。 なんだっけあれ、宣言的プログラミング…? いや、それに対してじゃなくって…なんだっけ。

2014-12-30 19:41:00

コメント

コメントがまだありません。感想を最初に伝えてみませんか?