Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- wst(s,t):-!. %jesli term wejsciowy jest s to wyjsciowy ma byc t
- wst(T1, T2):- %jezeli jest to term zlozony to chcemy ujawnic jego argumenty
- T1=..[F|Args],!,
- lwst(Args,Args1), %na liscie zastap s na t
- T2=..[F|Args1].
- wst(T,T). %domykajaca klauzula ktorej term pozostaje bez zmian
- lwst([],[]). %lista zmienionych tez bedzie listą pustą
- lwst([H|T],[H1|T1]):- % dla tego musi zajsc warunek wst miedzy H a H1 bo wst jest zdefiniowane dla pojedynczego termu
- wst(H,H1),
- lwst(T,T1).
- in2pre(T1,T2):-
- T1 =..[F,A,B],!,
- in2pre(A,A1),% zamien pierwszy arg
- in2pre(B,B1),%podobnie zmodyfukuj drugi arg
- T2=[F,A1,B1].
- in2pre(T,T).
- in2pre2(T1,T2):-
- T1 =..[F,A,B],!,
- in2pre2(A,A1), % zamien pierwszy arg
- in2pre2(B,B1), %podobnie zmodyfukuj drugi arg
- append([F|A1],B1,T2).
- in2pre2(T,[T]).
- exp(E):-
- number(E),!.
- exp(+E):-
- exp(E).
- exp(-E):-
- exp(E).
- exp(E1+E2):-
- exp(E1),
- exp(E2).
- exp(E1-E2):-
- exp(E1),%jesli poprawne jest wyrazenie pierwsze i drugie
- exp(E2).
- exp(E1*E2):-
- exp(E1),
- exp(E2).
- exp(E1/E2):-
- exp(E1),
- exp(E2).
- %nasz program na razie akceptuje takie wyrazenia
- % 1(0|11)*0(10|01)+1
- acc([1|T]):-
- acc1(T). %warunki dla ogona, najprostsza postac bez powtorzen
- acc1([0|T]):-
- acc2(T).
- acc1([0|T]):- %zero i dalej ogon akceptowany przez acc1
- acc1(T).
- acc1([1,1|T]):-
- acc1(T).
- acc2([1,0,1]).
- acc2([0,1,1]).
- acc2([1,0|T]):-
- acc2(T).
- acc2([0,1|T]):-
- acc2(T).
Add Comment
Please, Sign In to add comment