すでに iomega では生産してないのか。
もうそろそろやばいだろうと思って Jaz メディアから別のところへの バックアップをとっていたんだが、間に合わなかった。 メディアをローディングできなくなった。
あと1つだけバックアップを取れなかったが、ま、いいか。
片方が無限あるいは超絶に評価時間のかかる関数をどうするかって 話のようですが、 g() が例外を返す関数だったときには por は何が起こるべき?
表示的意味論では例外を無視して true を返す、ということ? 「計算可能」のところに例外を除外することが意図されてるのかな?
例外は false でも true でもない第3の状態という感覚なんですが、 理論ではどう扱われてるんでしょうね。
(追記)
単純例外だと話は簡単かもしれないけど、f, gともに副作用を持つときには、どういう挙動が期待されるんだろう。 評価せずには (f por g) の値は決まらないわけで...。
要するに私の疑問は、 (f || g )は評価順序も込みで定義されてるから g が何であっても f が true なら一意に動作が決まるんですが、(f por g)での f, g はどういう評価モデルなんですか?、です。
例外を持ち出すんじゃなかった。
途中経過を一挙公開。
let s=read_line()^" "let rec f i p r q=print_string(match p,q,r with '#',' ',' '|' ','#',_|' ',' ','#'->"#"|_->" ");f(i+1)q(s.[i])r;;f 1' ''#'' '
let s=" "^read_line()^" ";;for i=0to 9999do print_char(match String.sub s i 3with"# "|" ##"|" # "|" #"->'#'|_->' ')done
let s=" "^read_line()^" ";;for i=0to 9999do print_char(match String.sub s i 3with q when" "<q&q<"# #"->'#'|_->' ')done
let s=" "^read_line()^" "let rec(^)i u=print_char s.[Obj.magic(" "<u&u<"# #")];i+1^String.sub s i 3;;0^" #"
let s=" "^read_line()^" "let rec(^)i u=print_char s.[Obj.magic(" "<u&u<"# #")];i+1^String.sub s i 3;;0^s
let c=ref 0;;String.iter(fun s->c:=!c/2+Char.code s/33*4;print_char" ## # # ".[!c])(read_line()^" ")
let s=read_line()^" "let rec(^)i u=print_char" ## # # ".[u];i+1^Char.code s.[i]/33*4+u/2;;1^4
最後のをほとんどそのまま移植したのが C の 77B。