RosettaCodeData/Task/Universal-Turing-machine/Mercury/universal-turing-machine-3....

22 lines
857 B
Plaintext

:- type busy_beaver_states ---> a ; b ; c ; halt.
:- type busy_beaver_symbols ---> '0' ; '1'.
:- func busy_beaver_config = config(busy_beaver_states, busy_beaver_symbols).
busy_beaver_config = config(a, % initial state
set([halt]), % set of terminating states
'0'). % blank symbol
:- pred busy_beaver(busy_beaver_states::in,
busy_beaver_symbols::in,
busy_beaver_symbols::out,
action::out,
busy_beaver_states::out) is semidet.
busy_beaver(a, '0', '1', right, b).
busy_beaver(a, '1', '1', left, c).
busy_beaver(b, '0', '1', left, a).
busy_beaver(b, '1', '1', right, b).
busy_beaver(c, '0', '1', left, b).
busy_beaver(c, '1', '1', stay, halt).
TapeOut = turing(busy_beaver_config, busy_beaver, []).