%%% A very simple hmm %%% - illustrating extended with abstract implemementation. %%% %%% Developed in the PRISM system by Henning Christiansen, November 2006 %%% http://www.ruc.dk/~henning values(s0,[s1,s2]). values(s1,[s1a,s1b,s3]). values(s2,[s2a,s2b,s3]). set_ss:- set_sw(s0, [0.5, 0.5]), set_sw(s1, [0.8, 0.15, 0.05]), set_sw(s2, [0.29, 0.7, 0.01]). target(hmm,1). hmm(S):- hmm(S,_). hmm(S,X):- hmm0(S,X). hmm0(S,Next):- msw(s0,Next), (Next=s1 -> hmm1(S) ; Next=s2 -> hmm2(S)). hmm1(S):- msw(s1,Next), (Next=s1a -> S=[a|Sx], hmm1(Sx) ; Next=s1b -> S=[b|Sx], hmm1(Sx) ; Next=s3 -> hmm3(S)). hmm2(S):- msw(s2,Next), (Next=s2a -> S=[a|Sx], hmm2(Sx) ; Next=s2b -> S=[b|Sx], hmm2(Sx) ; Next=s3 -> hmm3(S)). hmm3([]).