Skip to content
xhlkogitsune edited this page Jun 17, 2011 · 12 revisions
  • 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 部分適用時)。

  1. iがvalid slot numberではない、 nが整数ではない、nがi番目のスロットのvitalityより真に大きい場合エラー

  2. jがvalid slot numberではない場合はerror。相手の255-j番目のslotがaliveの場合、vitalityをn*9/10(切捨て)減らす(0以下になったら0)。deadだったら何もしない。

  3. 恒等関数を返す。

  • help i j n: "v[i] <- v[i] - n; v[j] <- v[j] + n * 11 / 10; return I"
  1. iがvalid slot numberではない、nが整数ではない、nが自分のi番目のスロットのvitalityより大きい、ならばerror

  2. 自分のi番目のスロットのvitalityをn減らす

  3. jがvalid slot numberでなければerror、自分のj番目のスロットのがaliveならvitalityをn*11/10(切捨て)増やす(65535を超えたら65535)、deadなら何もしない

  4. 恒等関数を返す

Clone this wiki locally