Anonymous user
Execute Brain****: Difference between revisions
Added example for Pointless
Not a robot (talk | contribs) (→{{header|8086 Assembly}}: Upload the version with the Ctrl-C bug fixed) |
(Added example for Pointless) |
||
Line 4,850:
(bye)</lang>
=={{header|Pointless}}==
<lang pointless>-- Code based on
-- https://github.com/allisio/pointless/blob/master/lib/examples/brainfuck.ptls
output =
iterate(run, vm)
|> takeUntil(isFinished)
|> map(vm => vm.outVal)
|> filter(notEq(None))
|> map(char)
|> printElems
----------------------------------------------------------
vm = VM {
ip = 0
dp = 0
data = zeroArray(1000)
inVals = map(ord, readLines)
outVal = None
}
----------------------------------------------------------
-- "hello.bf" contains brainf*** hello world code
ops = toArray(readFile("hello.bf"))
----------------------------------------------------------
run(vm) = vm |> clearOutput |> eval |> advance
advance(vm) = vm with $.ip += 1
isFinished(vm) = vm.ip >= length(ops)
clearOutput(vm) = vm with $.outVal = None
----------------------------------------------------------
jumps = getJumps(0, [], {})
getJumps(i, stack, jumps) = cond {
case (i == length(ops)) jumps
case (ops[i] == "[")
getJumps(i + 1, [i] ++ stack, jumps)
case (ops[i] == "]")
getJumps(i + 1, tail(stack), jumps with {
$[i] = head(stack)
$[head(stack)] = i
})
else getJumps(i + 1, stack, jumps)
}
----------------------------------------------------------
eval(vm) = cond {
case (op == ">") vm with $.dp += 1
case (op == "<") vm with $.dp -= 1
case (op == "+") vm with $.data[vm.dp] += 1
case (op == "-") vm with $.data[vm.dp] -= 1
case (op == ".") vm with $.outVal = byte
case (op == ",") vm with {
$.data[vm.dp] = head(vm.inVals)
$.inVals = tail(vm.inVals)
}
case (op == "[")
if byte != 0 then vm
else (vm with $.ip = jumps[vm.ip])
case (op == "]")
if byte == 0 then vm
else (vm with $.ip = jumps[vm.ip])
else vm
} where {
op = ops[vm.ip]
byte = vm.data[vm.dp]
}</lang>
=={{header|Potion}}==
|