向井です。


At Thu, 27 Jul 2006 18:11:08 +0900,
Safii wrote:
(snip)
> この場合,正しく動きませんでした.これが構築子Hogeだけを
> 正格評価しているという状態ですか?

正格という表現を使うかどうかはよくわかりませんが、 update にとっては 
Hoge であるかどうかだけが必要なので、中身までは評価しないということで
す。

しかし、たとえば

update (Hoge 0) = Hoge 1
update (Hoge n) = Hoge (n+1)

のようになっていれば、中身が 0 かどうか判断する必要があるので評価され
るでしょう。
変数の束縛だけでは、中身までは気にしない、ということですね。


正格性フラグ(!)が型の宣言についていると、その要素は型を構成するときに
評価されるようになるんだったと思いました。



ところで、このままだと loop は値も返さないし副作用もありませんから、あ
んまり意味はありませんよね。で、実際に動くような(入力と出力を持つよう
な)ものをあれこれやっていくと、けっきょくは IO 動作になってしまうと思
います。

すると結果的には、今回のメールでであれこれ考えていたようなことは霧のよ
うに消えていってしまうように思います。いや、だから無駄だとまでは思いま
せんけれど(笑)。

もう少し実例に沿った例題を考えてみると、思い悩まずに済むかもしれません。

問題を最小化しすぎて、本来の動作だと必要とされる値が必要にならないため
に挙動が怪しくなっている面があるような気が、ちょっとだけします。


-- 
向井 淳
mukai / jmuk.org
http://www.jmuk.org/d/

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/