118 lines
3.0 KiB
Prolog
118 lines
3.0 KiB
Prolog
:- use_module('markov.pl').
|
|
:- use_module(library(lambda)).
|
|
|
|
markov :-
|
|
maplist(\X^(call(X), nl,nl), [markov_1, markov_2, markov_3, markov_4, markov_5]).
|
|
|
|
markov_1 :-
|
|
A = ['# This rules file is extracted from Wikipedia:',
|
|
'# http://en.wikipedia.org/wiki/Markov_Algorithm',
|
|
'A -> apple',
|
|
'B -> bag',
|
|
'S -> shop',
|
|
'T -> the',
|
|
'the shop -> my brother',
|
|
'a never used -> .terminating rule'],
|
|
B = 'I bought a B of As from T S.',
|
|
apply_markov(A, B, R),
|
|
writeln(B),
|
|
writeln(R).
|
|
|
|
|
|
markov_2 :-
|
|
A = ['# Slightly modified from the rules on Wikipedia',
|
|
'A -> apple',
|
|
'B -> bag',
|
|
'S -> .shop',
|
|
'T -> the',
|
|
'the shop -> my brother',
|
|
'a never used -> .terminating rule'],
|
|
|
|
B = 'I bought a B of As from T S.',
|
|
|
|
apply_markov(A, B, R),
|
|
writeln(B),
|
|
writeln(R).
|
|
|
|
|
|
markov_3 :-
|
|
A = ['# BNF Syntax testing rules',
|
|
'A -> apple',
|
|
'WWWW -> with',
|
|
'Bgage -> ->.*',
|
|
'B -> bag',
|
|
'->.* -> money',
|
|
'W -> WW',
|
|
'S -> .shop',
|
|
'T -> the',
|
|
'the shop -> my brother',
|
|
'a never used -> .terminating rule'],
|
|
|
|
B = 'I bought a B of As W my Bgage from T S.',
|
|
|
|
apply_markov(A, B, R),
|
|
writeln(B),
|
|
writeln(R).
|
|
|
|
|
|
markov_4 :-
|
|
A = ['### Unary Multiplication Engine, for testing Markov Algorithm implementations',
|
|
'### By Donal Fellows.',
|
|
'# Unary addition engine',
|
|
'_+1 -> _1+',
|
|
'1+1 -> 11+',
|
|
'# Pass for converting from the splitting of multiplication into ordinary',
|
|
'# addition',
|
|
'1! -> !1',
|
|
',! -> !+',
|
|
'_! -> _',
|
|
'# Unary multiplication by duplicating left side, right side times',
|
|
'1*1 -> x,@y',
|
|
'1x -> xX',
|
|
'X, -> 1,1',
|
|
'X1 -> 1X',
|
|
'_x -> _X',
|
|
',x -> ,X',
|
|
'y1 -> 1y',
|
|
'y_ -> _',
|
|
'# Next phase of applying',
|
|
'1@1 -> x,@y',
|
|
'1@_ -> @_',
|
|
',@_ -> !_',
|
|
'++ -> +',
|
|
'# Termination cleanup for addition',
|
|
'_1 -> 1',
|
|
'1+_ -> 1',
|
|
'_+_ -> '],
|
|
|
|
B = '_1111*11111_',
|
|
|
|
apply_markov(A, B, R),
|
|
writeln(B),
|
|
writeln(R).
|
|
|
|
markov_5 :-
|
|
A = ['# Turing machine: three-state busy beaver',
|
|
'#',
|
|
'# state A, symbol 0 => write 1, move right, new state B',
|
|
'A0 -> 1B',
|
|
'# state A, symbol 1 => write 1, move left, new state C',
|
|
'0A1 -> C01',
|
|
'1A1 -> C11',
|
|
'# state B, symbol 0 => write 1, move left, new state A',
|
|
'0B0 -> A01',
|
|
'1B0 -> A11',
|
|
'# state B, symbol 1 => write 1, move right, new state B',
|
|
'B1 -> 1B',
|
|
'# state C, symbol 0 => write 1, move left, new state B',
|
|
'0C0 -> B01',
|
|
'1C0 -> B11',
|
|
'# state C, symbol 1 => write 1, move left, halt',
|
|
'0C1 -> H01',
|
|
'1C1 -> H11'],
|
|
|
|
B = '000000A000000',
|
|
apply_markov(A, B, R),
|
|
writeln(B),
|
|
writeln(R).
|