% 1 % see slides W11 % 2 expr --> "0". expr --> "1". expr --> "x1"; "x2"; "x3". expr --> "-", "(", expr, ")". expr --> "(", expr, ".", expr, ")". expr --> "(", expr, "+", expr, ")". :- phrase(expr,`(1+1)`). expr(0) --> "0". expr(1) --> "1". expr(var) --> "x1"; "x2"; "x3". expr(comp(E)) --> "-", "(", expr(E), ")". expr(times(E1,E2)) --> "(", expr(E1), ".", expr(E2), ")". expr(plus(E1,E2)) --> "(", expr(E1), "+", expr(E2), ")". :- phrase(expr(_),`(1+1)`). expr_improved(0) --> "0". expr_improved(1) --> "1". expr_improved(var) --> "x1"; "x2"; "x3". expr_improved(comp(E)) --> "-", lbracket, expr_improved(E), rbracket. expr_improved(times(E1,E2)) --> "(", expr_improved(E1), blanks, ".", blanks, expr_improved(E2), ")". expr_improved(plus(E1,E2)) --> "(", expr_improved(E1), blanks, "+", blanks, expr_improved(E2), ")". lbracket --> "("; "". rbracket --> ")"; "". blanks --> " "; "". :- phrase(expr_improved(_),`(-1 + -1)`). % 4 :- use_module(library(clpfd)). plan([A,B,C,D,E,F]) :- A #< B, A #< C, A #< D, B #\= C, C #\= D, B #< F, C #< E, D #< E, E #< F, [A,B,C,D,E,F] ins 1..6, label([A,B,C,D,E,F]). % 5 profile(true,0). profile((A,B),N) :- profile(A,N1), profile(B,N2), N is max(N1,N2). profile(A,N) :- dif(A,(_,_)), dif(A,true), clause(A,B), profile(B,N0), N is N0 + 1.