%%%%%%%%%%%%%%%%%% Przykład 1 - język Oz %%%%%%%%%%%%%%%%%% declare E proc {Przyklad Sol} X Y in Sol=sol(x:X y:Y) X::2#8 Y::7#9 X * Y <: 29 2 * X + Y >: 13 {FD.distribute naive Sol} end % Uruchomienie programu: % - "odkomentowac" wybrany wariant maszyny przeszukujacej (tj. usunac znak %) % - w menu systemu Mozart wybrac Oz/Feed Buffer. % 1. Poszukiwanie 1 rozwiazania %{Browse {Search.base.one Przyklad}} % 2. Poszukiwanie wszystkich rozwiazan (tj. listy rozwiazan) %{Browse {Search.base.all Przyklad}} % 3. Poszukiwanie kolejnego rozwiazania %E = {New Search.object script(Przyklad)} %{Browse {E next($)}} % 4. Poszukiwanie wszystkich rozwiazan z wyswietleniem drzewa poszukiwan {ExploreAll Przyklad} %%%%%%%%%%%%%%%%%% Przykład 1 - język SWI Prolog %%%%%%%%%%%%%%%%%% :- use_module(library(clpfd)). przyklad(Sol) :- Vars = [X,Y], Sol = sol(x:X, y:Y), X in 2..8, Y in 7..9, X * Y #< 29, 2 * X + Y #> 13, labeling([leftmost],Vars). %%%%%%%%%%%%%%%%%% Przykład 2 - język Oz %%%%%%%%%%%%%%%%%% %%% %%% Authors: %%% Gert Smolka %%% %%% Copyright: %%% Gert Smolka, 1998 %%% %%% Last change: %%% $Date: 2001/05/25 17:04:07 $ by $Author: schulte $ %%% $Revision: 1.3 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% declare E proc {Money Root} S E N D M O R Y in Root = sol(s:S e:E n:N d:D m:M o:O r:R y:Y) Root ::: 0#9 {FD.distinct Root} S \=: 0 M \=: 0 1000*S + 100*E + 10*N + D + 1000*M + 100*O + 10*R + E =: 10000*M + 1000*O + 100*N + 10*E + Y {FD.distribute ff Root} end % Uruchomienie programu: % - "odkomentowac" wybrany wariant maszyny przeszukujacej (tj. usunac znak %) % - w menu systemu Mozart wybrac Oz/Feed Buffer. % 1. Poszukiwanie 1 rozwiazania % {Browse {Search.base.one Money}} % 2. Poszukiwanie wszystkich rozwiazan (tj. listy rozwiazan) %{Browse {Search.base.all Money}} % 3. Poszukiwanie kolejnego rozwiazania % E = {New Search.object script(Money)} % {Browse {E next($)}} % 4. Poszukiwanie wszystkich rozwiazan z wyswietleniem drzewa poszukiwan {ExploreAll Money} %%%%%%%%%%%%%%%%%% Przykład 2 - język SWI Prolog %%%%%%%%%%%%%%%%%% :- use_module(library(clpfd)). money(Root) :- Vars = [S,E,N,D,M,O,R,Y], Root = sol(s:S,e:E,n:N,d:D,m:M,o:O,r:R,y:Y), Vars ins 0..9, all_different(Vars), M #\= 0, S #\= 0, S*1000 + E*100 + N*10 + D + M*1000 + O*100 + R*10 + E #= M*10000 + O*1000 + N*100 + E*10 + Y, labeling([leftmost],Vars). %%%%%%%%%%%%%%%%%% Przykład 3 - język Oz %%%%%%%%%%%%%%%%%% %%% %%% Authors: %%% Gert Smolka %%% %%% Copyright: %%% Gert Smolka, 1998 %%% %%% Last change: %%% $Date: 1999/01/18 21:56:06 $ by $Author: schulte $ %%% $Revision: 1.2 $ %%% %%% This file is part of Mozart, an implementation %%% of Oz 3 %%% http://www.mozart-oz.org %%% %%% See the file "LICENSE" or %%% http://www.mozart-oz.org/LICENSE.html %%% for information on usage and redistribution %%% of this file, and for a DISCLAIMER OF ALL %%% WARRANTIES. %%% %%% Professor Smart has coded his safe combination as follows: declare proc {Safe C} {FD.tuple code 9 1#9 C} {FD.distinct C} {For 1 9 1 proc {$ I} C.I \=: I end} C.4 - C.6 =: C.7 C.1 * C.2 * C.3 =: C.8 + C.9 C.2 + C.3 + C.6 <: C.8 C.9 <: C.8 {FD.distribute ff C} end % Uruchomienie programu: % - "odkomentowac" wybrany wariant maszyny przeszukujacej (tj. usunac znak %) % - w menu systemu Mozart wybrac Oz/Feed Buffer. % 1. Poszukiwanie 1 rozwiazania % {Browse {Search.base.one Money}} % 2. Poszukiwanie wszystkich rozwiazan (tj. listy rozwiazan) %{Browse {Search.base.all Money}} % 3. Poszukiwanie kolejnego rozwiazania % E = {New Search.object script(Money)} % {Browse {E next($)}} % 4. Poszukiwanie wszystkich rozwiazan z wyswietleniem drzewa poszukiwan {ExploreAll Safe} %%%%%%%%%%%%%%%%%% Przykład 3 - język SWI Prolog %%%%%%%%%%%%%%%%%% :- use_module(library(clpfd)). safe(Sol) :- Vars = [C1,C2,C3,C4,C5,C6,C7,C8,C9], Sol = sol(C1,C2,C3,C4,C5,C6,C7,C8,C9), Vars ins 1..9, all_different(Vars), C4 - C6 #= C7, C1 * C2 * C3 #= C8 + C9, C2 + C3 + C6 #< C8, C9 #< C8, diffromind(Vars,1), labeling([ff],Vars). diffromind([],_) :- !. diffromind([X|Xs],I) :- X #\= I, I1 is I + 1, diffromind(Xs,I1). %%%%%%%%%%%%%%%%%%%%%%%%% Przykład 4 - język SWI Prolog %%%%%%%%%%%%%%%%%%%%%%%%% %%% %%% Rozwiązanie zadania "Wizyta" - Niederliński A., "Programowanie w logice z ogra- %%% niczeniami. Łagodne wprowadzenie dla platformy ECLiPSe", Gliwice, 2014, str. 152 %%% :- use_module(library(clpfd)). visit(sol(fs:FS, hs:HS, j:J, m:M, t:T)) :- Vars = [FS, HS, J, M, T], Vars ins 0..1, HS #<== FS, M #\/ J, FS #\ T, T #<==> J, M #==> (J #/\ HS), labeling([ff],Vars).