-
Notifications
You must be signed in to change notification settings - Fork 1
Rules cards
-
nは整数(関数だとerror)
-
iはスロット番号(0~255以外の整数、あるいは関数だとerror)
-
f g などは関数(整数だとerror、但し高階関数の場合はerror発生のタイミングは後になる)
-
x y はなんでもおk
-
I x: "return x" 恒等写像 (λx.x)
-
zero: "return 0" 0
-
succ n: "m <- n + 1; return m" 整数nを受け取り、n<65535の場合はn+1を、65535の場合は65535を返す。nが整数でなければerror。
-
dbl n: "m <- n * 2; return m" 整数nを受け取り、n<32768の場合はn*2を、それ以外の整数の場合は65535を返す。nが整数でなければerror。
-
get i: "y <- f[i]; return y" i番目のslotのvalueを返す(aliveの場合)。iがvalid slot numberではない場合、またはslotがdeadの場合error。
-
put x y: "return y" 引数を捨てて恒等写像を返す。
-
S f g x: "h <- f x; y <- g x; z <- h y; return z" Sコンビネータ。λf.λg.λx.fx(gx)。errorの発生は、S f g x まで引数が揃ってfx(gx)が評価される時(NOT S fとかの部分適用時には値はチェックされない)
-
K x y: "return x" Kコンビネータ。
-
inc i: "v[i] <- v[i] + 1; return I" i番目の自分のスロットのvitalityを1増やす(1~65534の場合)。-1,0,65535の場合は何もしない。iがvalid slot numberではない場合error。恒等関数を返す。
-
dec i: "v'[255-i] <- v'[255-i] - 1; return I" 敵の255-i番目のslotのvitalityを1減らす(1~65535の場合)。-1,0の場合は何もしない。iがvalid slot numberではない場合error。恒等関数を返す。
-
attack i j n: "v[i] <- v[i] - n; v'[255-j] <- v'[255-j] - n * 9 / 10; return I" errorは attack i j n が全て揃った後で発生する (NOT 部分適用時)。
-
iがvalid slot numberではない、 nが整数ではない、nがi番目のスロットのvitalityより真に大きい場合エラー
-
jがvalid slot numberではない場合はerror。相手の255-j番目のslotがaliveの場合、vitalityをn*9/10(切捨て)減らす(0以下になったら0)。deadだったら何もしない。
-
恒等関数を返す。
- help i j n: "v[i] <- v[i] - n; v[j] <- v[j] + n * 11 / 10; return I"
-
iがvalid slot numberではない、nが整数ではない、nが自分のi番目のスロットのvitalityより大きい、ならばerror
-
自分のi番目のスロットのvitalityをn減らす
-
jがvalid slot numberでなければerror、自分のj番目のスロットのがaliveならvitalityをn*11/10(切捨て)増やす(65535を超えたら65535)、deadなら何もしない
-
恒等関数を返す