brainf*ck.io

時代は DSL ですよね。 K.INABAさんとこを参考にしました (http://www.kmonos.net/alang/etc/brainfuck.php)

vm := List clone
for(a, 0, 100, vm push(0))
index := 0

through := method(s, m,
  if (m,
    a := m argAt(0)
    if (a, s doMessage(a))
  )
)
setSlot(">", method(
    index = index + 1
    through(sender, thisMessage)
))
setSlot("<", method(
    index = index - 1
    through(sender, thisMessage)
))
setSlot("+", method(
    vm atPut(index, vm at(index) + 1)
    through(sender, thisMessage)
))
setSlot("-", method(
    vm atPut(index, vm at(index) - 1)
    through(sender, thisMessage)
))
setSlot(".", method(
    write(vm at(index) asCharacter)
    through(sender, thisMessage)
))
// i cannot implement ","
setSlot("'", method(
    vm atPut(index, File standardInput readBufferOfLength(1) at(0))
    through(sender, thisMessage)
))
setSlot("squareBrackets", method(
    while (vm at(index) != 0,
      sender doMessage(thisMessage argAt(0))
    )
    self
))

// hello world
 > + + + + + + + + + [ < + + + + + + + + > - ] < . > + + + + + + + \
 [ < + + + + > - ] < + . + + + + + + + . . + + + . [ - ] > + + + + + + + + \
 [ < + + + + > - ] < . > + + + + + + + + + + + [ < + + + + + > - ] \
 < . > + + + + + + + + [ < + + + > - ] < . + + + . \
 - - - - - - . - - - - - - - - . [ - ] > + + + + + + + + \
 [ < + + + + > - ] < + . [ - ] + + + + + + + + + + .

// echo
 + [ > ' . < ]
なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h