Title: ??
1???????????? ?? ??????
- ???. ?????? ???????
- ???????? ?? ?????????? ? ???????????
- ?? ??. ??????? ????????
2??????????? ?????????
3????????
4?????????? ?? ??????????
- ????, ????? ???????? ?????????? ? ????? ?????? ??
??????????? ?????? ????? ?? ??????? ????? ??
????? ?? ????? ??????? ?? ???????????, ? ?????
??? ?? ??????? ?????? ?????????, ????? ??????????
??????? ??????? ?? ???????? ? ??? ?????????. - ? ????? ????, ?????????? ?????? ? ??????? ??????
??????? ??? ?????? ??????, ????? ?? ????????? ??
????? ?? ??????????? ??? ???????????? ??????.
5?????????? ?? ??????????
- ??-?????? ? ?? ?? ??????? ??????????? ??
?????????? ? ????????? ?? ??????? ??
?????????????. - ?????????? ??????? ???????????? ????? ?????? ??
??????????? ?????
6?????? 3
7?????? 3
?-p
?-r
?-q,!
?-s,!
?-t,!
?-!
8?????????? ?? ??????????
- ???? ?? ??????????? ??????????, ???? ????????,
????? ???????? ??? ???????? - ????????? ?? ????????????/ ?????? ?????? ??
??????, ?? ?? ????????? ?????? ?????? ?? ???? ??? - ????????? ???????? ?????? ???????????? ???????,
????? ??????? ?? ?????
9?????????? ?? ??????????
- ??? ??? ??????? ???? ????????
- red cuts- ???????? ?????????, ????? ?
??????????????? - grue cuts - ???????? ???????????????, ?? ?? ?
?????????
10???????? ?? ??????
- ??????????, ????? ??? ?? ??? ?? ?????? (???????
????????????) ?? ?????? ?? ??????? ? ???????
???????? - Head-
- Test 1,
-
- Test n,
- !,
- Rest_of_clause.
11?????? 4
- p(X,args)-var(X),!.
- /? ? ?????????? ??????????/
- p(X,args)-number(X),!.
- /? ? ?????/
- p(X,args).
- /? ? ???????? ????/
12???????? ?? ?????????????? ???????
- ??????????, ????? ??? ?? ??? ?? ???????
?????????????? ??????? ?? ?????????? ??? ??
??????? ? ??????? ???????? - Head-
- Goal,
- !,
- Rest_of_clause.
13???????? ?? ?????????????? ???????
- ??? ???????????? ?? ???? ??? ???????? ??????
????? ?? ?? ??????? ?? ?? ?? ???????? ??
?????????? ?? ?? ??????? ???????????? ?? ?????
??????. - ??? ???????? ?????? ?? ?????????? ???? ???
???????? ???-????? ? ?? ?? ????????? ????????????
???????.
14???????? ?? ?????????????? ???????
- ?????????? ?? ????????? ???????????? ?????? once.
- Head-
- once(Goal),
- Rest_of_clause.
15???????? ?? ?????????????? ???????
- ?????????? ?? if-then ?????
- Head-
- (Goal-gttrue),
- Rest_of_clause.
16???????? ?? ?????????????? ???????
- ????, ????? ?? ????? ?? ??? ???? ?? ????????????.
- ???-????? ? ??? ???? ???????? ?????? ?? ?
?????????, ?? ??? ?? ?? ?????? ?? ???? ?????
17???????? ?? ?????????????? ???????
- ?????????? ?????? ?? ?????, ??????? ? ????????
??-??????? ??? ???? ????? - ??? ?????? ???? ???????? ?? ???? ???? ??????????
???????, ?? ?????? ?????????? ?? ?? ??????? ?
?????????, ? ?? ? ??????????? ??? ???? - ?????????? ?????? ?? ?? ??????? ? ??????, ????
??? ?????? ?? ???????? ??????? ??????????
???????? ????????????, ? ?? ?? ???????? ???????
???? ?????????????.
18???????? ?? ?????????????? ???????
- ????? ???????, ????? ?????? ?? ?? ?????? ?, ??
??? ????? ?????? ?? ???? ???????? ? ??????, ????
???????? ?? ??????? ???? ???????? ????? ???????,
? ?????? ?? ???????? ?????? ?? ?????????? ?????
?? ??????????? - ???? ?? ????????? ??????, ????? ??? ???? ?? ?????
?????? ?? ???? ???????? ? ?????? ? ?? ?????
?????? ?? ???? ????????? ??? ?????????? ????????
19?????????
- ???????, ????? ?????? ?? ?? ????????, ? ??
?????????? ? ???????, ??? ????? ???? ? ?????????
(????????????) - ??? ????????????? ? ????????????????? ?? ???????
????? ?? ?????? ????????, ? ??? ??? ?????? ??
????????? ?????? ?? ???????? ?????????, ?? ???
?????? ?? ??????? ??? ???????? ???? ??? ????????
????????? ?? ????????????? ? ?? ?????????
????????? ? ???? ?? ?????????? ?? ?? ???? ????,
?? ?? ?? ??????? ???? ????? ??? ?? ? ????????????
20???????? ?? ?????????????? ???????
- ??? ????? ???????
- !, determinate_goal,,determinate_goal,!
- ??????? ???????? ?????? ? ???????
21RED Cuts
- RED Cuts ???????? ??????????? ???????
- ??????, ? ????? ??? RED Cut ???? ?????????
????????? - RED Cuts ?? ????????? ??????? ?? ??? ????
- ?? ?? ?????? ??????? ??????? ?? ???
- ?? ?????? ????? ?? if-thenelse
22RED Cuts
- once(Goal)-
- call(Goal),
- !.
- ?????? ?? ????????? RED Cuts, ? ??? ?? ?? ??????
??????? ???????? ??????? ? ????? ?? ?? ????????
?????????, ???? ???? ? ??????????
23?????? 8
- max(X,Y,X)-XgtY.
- max(X,Y,Y)-XltY.
- max(X,Y,X)-XgtY,!. blue cut
- max(X,Y,Y)-XltY.
- / if-thenelse effect/
- max(X,Y,Z)-XgtY,!,ZX. red cut
- max(X,Y,Z)-ZY. / X lt Y /
- ????????? ???????? ? ?? ??????? ??????
????????, ???????? - ?-max(10,0,0).
- yes
24?????????
- ?????? ?????? ???????? ?? ? ???????????
- ???????, ?? ??????? ???????? ? ????? ??? ??????
?? ???????? ??????? - ?????? ?????? ?? ????????? ??? ??-????? ???
??-????? ????????? ?? ?????????? ?????? ??
???????????? ?????
25?????? 8a
- max(X,Y,Z)-XgtY,!,ZX. red cut
- max(X,Y,Y). / X lt Y /
- ??????? - ????????? ???????????? ?? ??????,
?????? ?? ?? ??????? ??????????. - ???????? ?????????, ?????? ?????? ?????????
???????? ?? ?????????? ????? ??-????, ????????? ?
?????????? - ????????? ??????? ??????? ?? ????? ????? ? ?????
??????? ?? ????????
26RED Cuts
- ???????? ????-????????? ???? ????
- p(Var,args)-
- var(Var),
- !,
- fail.
- p(,)-
- ?????????? ????, ?????? ?????? ? ????????
- ??? ????? ??????????? ???? ??????? ?? ??????????,
???? ? ?????????
27RED Cuts
- ???? ???????? ?????????? ?? ???????? ?
- p(,args)-
- !,
- fail.
- p(,)-
- ?????? ? ?????????, ????? ? ???????, ???? ??
?? ?? ? ????????? ?? ????? ?? ?????????? ??????
28?????? 10
- is_proper_list(0)-!,fail.
- ????? ????????????
- is_proper_list().
- is_proper_list(_L)-
- is_proper_list(L).
29?????? 10
- ?- is_proper_list().
- yes
- ?- is_proper_list(X).
- yes
- ?- is_proper_list(a,b).
- yes
- ?- is_proper_list(X).
- no
30GRUE Cuts
- Grue cuts ????? ????? ????? ???????? ??
??????????, ?? ????????? ??????? ??????????? - ???? ?? ???????? Grue cuts ?? ??? ??????? ????
- Blue cuts - ???????????? ????????? ??
???????????????, ????? ?????? ?? ???? ??????????,
?? ?? ? ????. ?? ?? ???????? ???????? ?????????
?? ??????????. ??????, ????? ?????? ? ?? ? ??????
??????????? - Green cuts - ???????? ??????? ?? ??-?????????
?????????????, ????? ????? ?? ?????? ?? ?? ?????
???????????, ??? ?? ????? ???????? ? ???????, ?
?? ????? ?????? ?????? ?? ????? ????? ???????
31GRUE Cuts
- ????????? ?, ?? ?????? ????????? ?? ?????????? ??
??????????? ???? blue cuts. - capital(britain, london)-!.
- capital(australia, canbera)-!.
- capital(new_zealand, wellington)-!.
- ?????? ???????? ???? capital(Country,Capital) ???
???????? ????????? ?? Country ??? Capital, ????
?? ??????????? ?? ?????? ??????????. - ???? ????????? ?? blue cuts, ???? ?? ??? ????????
?????? ?? ???? ?? ?? ?????? ? ??? ???.
32?????? 11
- capital(Country,Capital)-
- ( nonvar(Country) -gt
- cap(Country,Capital),
- !
- nonvar(Capital)-gt
- cap(Country,Capital),
- !
- cap(Country,Capital)
- ).
-
- cap(britain, london).
- cap(australia, canbera).
- cap(new_zealand, wellington).
33GRUE Cuts
- ?????????? ?????? ?? ???? ????????? ? ??????????
????? ?? ??????????, ?? ?? ??? ??????? ?? ??
??????? ????????? ???? ?? ??????? ??
?????????????. - ?????? ????? ?????????? ? ?? ????????????
?????????? ???? ??????????, ??? ???? ?? ????? ??
????????? ? ?? ??????? ?? ???????? ? ?? ???????.
34?? ???? ?? ??????????? ???????????
- ?????????? ???????? ?????? ????? ?? ?????
???????? ???? ???? ? ???? ??????????
???????????? ?? ???????? ?????????? ?????? - ? ??-??????? ?????? ???????????? ?????? ?
?????? ??????? ?? ????????, ? ????? ???????? ??
???????? ? ??? ??????? - ??????, ????? ?????????? ?? ????? ????? ???
???????? ????????? ???? call/1, setof/3 ??? ?????
???????? ????????? ?????????, ?? ????????
???????? ? ??????? ?? ???? ???? ?????????
35?? ???? ?? ??????????? ???????????
- p(L)-
- ( a,! / 1 /
- c, (d,! / 2 /,e),f
- ),
- call((g,! / 3 /)),
- not (h,! / 4 /, i),
- findall(X,(j(X),! / 5 /),L).
36?? ???? ?? ??????????? ???????????
- ?????????? ?????????? ? 1, 2 ? 4 ???? ?? ????
??????? ?? ???????? p(L) ???? ???? ??????????
???, ?????? ?????????? ?????????? ? 3 ? 5 ??
??????? ?? call/1, ? findall/3 ?????????.
37?? ???? ?? ??????????? ???????????
- ??? ???? ?? ?? ???????? ???????? ?? ???????? ??
??????????. - ??????????, ????? ?? ???????? ? ?? ??????????
???? ?? ????? ???? ????? ?????????, ?.?. ?? ??
?????????, ? ????? ????????? ?? ???????????.
38?? ???? ?? ??????????? ???????????
- ???? ?????? ??????? ?, ?? ?????????? ?? ???? ??
????? ???? ?????. - ???????????? (A,B), (AB), (A-gtBC), (A) ??
????????? ?? ?????????? (?.?. ?????????? ????? ?
?????? ????????? ?? ?????? ??????? ???? ??? ??
???-???????? ??????????? ?????????) - call(A), not(A), findall(A,B,C), setof(A,B,C),
bagof(A,B,C), once(A), forall(A,B) ?? ???????????.
39p(X) - a(X). p(X) - b(X),c(X),d(X),e(X). p(X
) - f(X). a(1).b(1).c(1). b(2).c(2).d(2).
e(2). f(3).
40?- p(X). X 1 X 2 X 3 no
41(No Transcript)
42p(X) - a(X). p(X) - b(X),c(X),!,d(X),e(X). p
(X) - f(X). a(1).b(1).c(1). b(2).c(2).d(2
).e(2). f(3).
43?- p(X). X 1 no
44(No Transcript)
45s(X,Y) - q(X,Y).s(0,0). q(X,Y) - i(X),j(Y).
i(1).i(2).j(1).j(2).j(3).
46s(X,Y) - q(X,Y).s(0,0). q(X,Y) - i(X),!,j(Y).
i(1).i(2).j(1).j(2).j(3).
47p(1).p(2) - !.p(3). ?- p(X). ?- p(X),p(Y).
?- p(X),!,p(Y).
48class(0,zero)-!.class(Number,positive) - Number
gt 0,!.class(Number,negative)- Number lt 0.
49?- split(3,4,-5,-1,0,4,-9,P,N). P3,4,4 N-5,
-1,-9 ??????? 1 - ? ?????????? split(,,).
split(XL,P,N)- split(L,Pos,Neg),
(Xgt 0, PXPos, NNeg Xlt0, PPos,
NXNeg PPos, NNeg ).
50?- split(3,4,-5,-1,0,4,-9,P,N). P3,4, N-5,-
1,-9 ??????? 2 - ??? ?????????? split(,,
). split(XL,P,N)- split(L,Pos,Neg),
(Xgt 0, NNeg, (member(X,Pos), PPos P
XPos), Xlt0, PPos,
(member(X,Neg),NNeg NXNeg) PPos,
NNeg ).
51?- split(3,4,-5,-1,0,4,-9,P,N). P3,4, N-5,-
1,-9 ??????? 2 - ??? ?????????? split(,,
). split(XL,P,N)- split(L,Pos,Neg),
(Xgt 0, NNeg, (member(X,Pos), PPos P
XPos), Xlt0, PPos,
(member(X,Neg),NNeg NXNeg) PPos,
NNeg ).
52????????? ? If-Then-Else
- ????????????? ????????? If-Then-Else ??????????
?????????? ?? ???????????? ??????? ?? ?????????,
????? ????????? ???????? - ????????? ??????????? ????????? ? ?????? ??
- ????????? P, Q
- ????????? P Q
- ???????? !
- ?????????? (????-) ?????????, call(X)
- ????????? ???? ??????? P, (not P, \ P)
- if-then-else, (P -gt Q R)
- true, false, otherwise, fail
53?????????
- ????????? ?? ????????? ???? G1, G2, , Gn ??
???????? ???? ??????? - G1 G2 Gn
- ???? ???? ???? ?? ?? ???????? ? ???????
- G1 G2 Gn
- ??? ????? ?? ? ?????????? ?? ????? ???????.
- ? ? ????? ?????? ?? ???????????? ????
- (G1,( G2, (Gn-1 ,Gn )))
- ????? ? ???? ????? ?? ?????????
54?????????
- ?? ????? ?????? ??????????? ???? ?? ????
????????? ?? ????? ?????, ?? ????? ? ????????? ??
?? ??????? ?????????? ???. - ??? ??-?????? ?????? ?? ???????? ?? ,, ????
?? ??? ????? - G1,
- G2 G3 ,
- G4
- ?? ?? ? ???????????? ??
- (G1, G2) (G3 , G4 )
55?????????
- ?? ?? ?? ???????? ????????????? ? ????? ?????? ??
?? ?????? ????? ????? ???????????, ?? ?????? ??
??????????????? ???????? - ??????
- (a,b c,d) ????????
- (a,b) (c,d) ??????????
56?????????
- ?????????????? ?????????
- ( G11,
- G12,
- G13
- G21,
- G22
- G13,
- G32
- )
57?????????
- ??? ??????????? ?? ??????? ????????, ?? ???? ?? ?
??????? ???? ??????? ?????? ?? ???????? g(shared
variables) ?????? - g(shared variables) -
- G11,
- G12,
- G13.
- g(shared variables) -
- G21,
- G22.
- g(shared variables) -
- G13,
- G32.
58?????? 1
- ??????? 1
- vowel(P)-
- ( Pa
- Pe
- Pi
- Po
- Pu
- )
??????? 2 vowel(P),?????? vowel(a). vowel(e). vow
el(i). vowel(o). vowel(u).
59????????? ?? ????? ?? ???????????
- ????? ?????? ?? ????????, ?????? ?? ????
?????????????? ???????? ? ??????? ?????????????
?????
60?????? 2
- between(Lower, Upper, Index)-
- ( var(Index),integer(Lower),integer(Upper)-gt
- Lower lt Upper,
- between1(Lower,Upper,Index)
- integer(Index),integer(Lower),integer(Upper)-gt
- Lower lt Index,
- Index lt Upper
- / ????????? ????????? /
- Goal between(Lower, Upper, Index),
- must_be(integer,Lower,1,Goal),
- must_be(integer,Upper,2,Goal),
- must_be(integer,Index,3,Goal)
- ).
61?????? 2
- between1(Lower, Upper, Index)-
- ( Lower Upper -gt
- IndexLower
- Index Lower
- Next is Lower1, Lower lt Upper
- between(Next, Upper, Index)
- ).
- ?- between(1,4,X).
- X 1 ?
- X 2 ?
- X 3 ?
- X 4 ?
- no
62?????? 2
- ?- between(0a,0z,X).
- X 97 ?
- X 98 ?
- X 99 ?
- X 100 ?
- yes
- ?- between(0'A,0'Z,X).
- X 65 ?
- X 66 ?
- yes
63????????
- ??? ????????? ????????? ?? ?????????? ?????????
- 0'A 0'\x41 0'\101
- ? ??????? ?????? ????????? ?? ???????????? ?? 65
(???? ?? A). 0' ???????? ?? ??? ?? ? ???? ?
?????????? ?? \ (backslash) ???? ???????? ????
?????.
64????? repeat
- ??????? repeat ?????? ?? ??? ???????
- p(args)-
- initialise,
- repeat,
- obtain_next_datum(Datum),
- do_something_with_the_datum(Datum),
- fail_unless_this_is_the_last_datum(Datum),
- !,
- shut_down.
65?????? 3
- read_and_print(File)-
- open(File,read,S),
- set_input(S), initialise
- repeat,
- read(Term), obtain next datum
- write(Term),
- nl, do something
- Term end_of_file, fail unless last
- !,
- close(S). shut down
-
66????? repeat
- ????? ????? repeat ?????? ?? ???? ????????? ?
???????? - ?????? ?????? ?? ?? ??? ???????, ?? ?????????,
????? ?????? ???? repeat ???? ?? ???????? ? ??
?? ?????????? ?????????????????? ?? repeat
??????
67?????? 4 (?? ????????? ?????????? ?? repeat)
- p(args)-
- initialise,
- repeat,
- obtain_next_datum(D),
- do_something_with_the_datum(D),
- fail_if_not_last(D).
- q(stuff)-
-
- p(args),
- !,
-
68If-Then-Else
- If-Then-Else ??? ???????
- ( Test1 -gt
- WhenTrue1
-
- TestN-gt
- WhenTrueN
- / ? ???????? ?????? /
- WhenAllElseFails
- ).
69?????? 5
- pos_and_neg_sums(Nums,Pos,Neg)-
- pos_and_neg_sums(Nums,0,Pos,0,Neg).
- pos_and_neg_sums(,Pos,Pos,Neg,Neg).
- pos_and_neg_sums(NumNums,Pos0,Pos,Neg0,Neg)-
- ( Num gt 0 -gt
- Pos1 is Pos0Num,
- pos_and_neg_sums(Nums,Pos1,Pos,Neg0,Neg)
- / Num lt 0 /
- Neg1 is Neg0Num,
- pos_and_neg_sums(Nums,Pos0,Pos,Neg1,Neg)
- ).
70?????? 5
- ?- pos_and_neg_sums(1,2,0,-3,5,-2,6,-7,-8,P,N)
. - N -20,
- P 14 ?
- yes
- ?- pos_and_neg_sums(1,2,0,P,N).
- N 0,
- P 3 ?
- yes
71??????
- ???????? ?? ??????? ???? ??????? ??
??????????? - ????????? ?? ???? ? ?? ????????? ?? ?? ????????
??-????? ????????? ???????? ??????????? ??
???????? - ?? ?? ?? ?? ?????????? ? ?? ?? ??????? ??-?????
?????? ? ?????????????? ?? ?????????? ????
??? ?????? ??? ???????, ? ?? ?????????
72??????
- ?????? ?? ?????????? ??????? ?? ????????? ? ????
???? - ?????????????? ? ?????? ?? ????????? ?? ??
??????? ? ???????? ?? ????, ??? ???? ??? ??????
?? ????? ??? ? ?????? ?????? ?? ?? ???????? - p, ? p
- q q
- ??-????? ? ?? ?? ?????? ????
- p
- q
73??????
- ?????????????? ? ?????? ???????? ?? ????????
???? ????????? ?? ?? ??????? ?? ???? ????????
????? ? ???? ????, ? ?????? ?? ???????? ???
??????? ?? ?? ?? ???????? ????????? - p(XY)-
- p((X Y))-
74??????
- ?????????????? ? ?? ?? ?? ???????? false ???
???? ? ????? ?????? ??????? ?? ? ??????????.
??????????? ?? ??? ?????????? ?? fail - ?????????? ? ?????????????? ?? ?? ?? ????????
otherwise . ???? ?? ????????? ? ?? ? ?????
?????? ??????? ?? ? ?????????, ? ????? ??????? ?
?? ???? ? ?? ? ????????? ???? ?? ??? ??????
???????? ???????? ?? ??????????
75?????? 6
- ????? ?? ????? ?? otherwise ??????????? ??
default - p(I,Result)-
- ( otherwise -gt Result 1
- I1 -gt Result 0
- I2 -gt Result -1
- ).
- ???? ???????? ????? ???? ?? ?????? ????????
(?.?. ?????? ??????????? ??), ?????? otherwise
??????????? ?? true
76?????? 6?
- p(I,Result)-
- ( I1 -gt Result 0
- I2 -gt Result -1
- / else / Result 1
- ).
77????????? ?? "????????" ?? ?????
78?????????? ?? ?????? ???????
- ????? ??? ???????? ?? ?????? ?? ?????? ?? ??
????????? ?????? ??????? ?? ??? ? ?? ??
?????????? ? ???????? ????????? ?? ????? - ???? ????????? ?? ?? ??????????? ????????? ?
??????? ????? (backtracking) ? ???????? ? ??????
???? ???????? ??????? ??? backtracking ? ?????
?????? ?? ?? ??????? ?????????? ?? ????
???????? ?? backtracking ??? ????????
79?????????? ?? ?????? ???????
- ?????????, ????? ?? ????? ?????? ???? ?? ??? ??
??????? ?? ??????????? ?? ?????????? ?? ??????
??????? ?? ??????? - ? ???? ??????? ?? ???? ????????? ????????????
??????? ???????? setof/3, ????? ?? ???? ?????????
???????? ??-??????? - ? ??????? ?????
- setof(X, p(X), L)
- ??????? L ? ??????????? ?? ?????? ?????????? ??
X, ?? ????? ? ?????? ????????? p(X) ??????
80?????? 1
- ?? ??????????? ?? ????? ????? ???? ?? ?????
?????????? ????? ?????? ? ?????? ?? ??????????
??????? ?? ?????? ????, ????? ?? ?????? ???? - ???? ?? ???????????, ?? ?????? ?? ????? ???????
????????? - debt(Debtor, Invoice, AmountUnpaid)
- ?????? Debtor ? ??? ?? ?????, Invoice ? ??????
?? ?????????? ????? Debtor ?? ? ??? ?? ???????,
????? ??? ??? ?? ?????????, ? AmountUnpaid ?
??????, ????? ??? ??? ??? ?? ????? ?? ???? ?????
81?????? 1
- ?????? ? ????????? ??? ?? ?????? ????????? ????
?? ??????? - ?- debt(Debtor,_,_),write(Debtor),nl,fail.
- ????????? ????? ??? ??????? ????????
- ??? ????? ??????? ??? ???????, ????? ?? ????????
??? ??? ???????, ??? ?? ?? ????? ? ??????? ??
?????????? ??? ???? - ??? ???? ???????? - ???? ???? ?? ?? ????????.
???? ??????? ?? ?????, ?? ??? ? ???? ????? ????
????? ?? ?? ?????? ?? ???? ?????? ??????? ?? ??
?????? ?????? ?? ?? ?? ?????? ????
82?????? 1
- ????, ????? ?? ?????????? ? ?? ???????
??????????? ?? ??????????. - ?????????? setof/3 ???????, ?????? ???????????,
????? ?? ???????? ? ??????. ???? ?????? ????????
? ?????????? ?? ???????? ??????? ????????? ?
?????? ???????? ? ? ????? ???????. ???? ????????
?? ???? ???????? ?? ??????? ?? ?? ?????
???????????? ? ????? ?? ??????? ????????
83?????? 1
- print_debtor_report-
- setof(Debtor,debtor(Debtor),Debtors),
- !, / ??? ???? ???? ??????? /
- print_debtor_report_header,
- print_debtor_lines(Debtors),
- print_debtor_report_footer.
- print_debtor_report-
- print_null_debtor_report.
84?????? 1
- print_debtor_lines().
- print_debtor_lines(DebtorDebtors) -
- print_debtor_line(Debtor),
- print_debtor_lines(Debtors).
- debtor(Debtor)-
- debtor(Debtor,_,_).
85?????? 2
- ?????? ????? ?? ???????? ???? ?? ?????? ??
?????????? ?? ????? ??????? ??????? ??? ????. - total_debt(Debtor, Debt)-
- setof( Invoice-AmounUnpaid,
- debt(Debtor,Invoice,AmounUnpaid),
- InvoiceAmounts),
- total_sum(InvoiceAmounts,0,Debt).
86?????? 2
- total_sum(,Sum,Sum).
- total_sum(Invoice-AmounUnpaidInvoiceAmounts,Sum
0,Sum)- - Sum1 is Sum0AmountUnpaid,
- total_sum(InvoiceAmounts,Sum1,Sum).
- print_debtor_line(Debt)-
- total_debt(Debtor, Debt),
- write(Debtor),write( owes ),write(Debt),nl.
87?????????? ?????????
- ??????????? ??? ?????????? ????????? ??
?????????? ?? ?????? ??????? - findall/3 ?????? ?????? ?????????? ? ????, ?
????? ?? ?? ????????, ?? ?? ????????? ????????
?????????? ?????? - setof/3 ????? ????????? ?? ?????????? (?????? ?
?????????? ??? ??? ??????????) ? ?????????
???????? ?????????? ?????? - bagof/3 ?????? ????? findall/3 ? setof/3
88?????? 3
- likes(bill, cider).
- likes(dick, beer).
- likes(harry, beer).
- likes(jan, cider).
- likes(tom, beer).
- likes(tom, cider).
- ?- setof(X, likes(X,Y), S).
- S dick,harry,tom,
- Y beer ?
- S bill,jan,tom,
- Y cider ?
- ?- setof((Y,S), setof(X, likes(X,Y), S), SS).
- SS (beer,dick,harry,tom), (cider,bill,ja
n,tom)
89?????? 3
- ?- findall(X,likes(X,Y),S).
- S bill,dick,harry,jan,tom,tom ?
- yes
- ?- bagof(X,likes(X,Y),S).
- S dick,harry,tom,
- Y beer ?
- S bill,jan,tom,
- Y cider ?
- no
90?????? 3
- ???????????? ? Goal ????? ?? ?? ?????? ??
????????, ????? ??? ?? ??????? ?? ?? ???????? ?
Goal ??????????? ???????? ?? ???????????? - YQ
- ???????? ?? ?????????? Y ?????? ?? Q ? true,
?????? Y ? ??????? ?????????? ? ??????. - ?- setof(X, Y(likes(X,Y)), S).
- S bill,dick,harry,jan,tom
- ?- bagof(X,Ylikes(X,Y),S).
- S bill,dick,harry,jan,tom,tom ?
- no
- ?- findall(X,likes(X,Y),S).
- S bill,dick,harry,jan,tom,tom ?
- yes
91?????????? ?????????
- ?????????? findall/3 ? ?????? ?? ClocksinMelish
? ???? ?? ???????? ????? ?????? - ??????????? bagof/3 ? setof/3 ?? ???????? ??
???? ??? ?? David H. Warren ? ???????? ??????
Higher-Order Extensions to Prolog, Are They
Needed? - ????? ?????? ??????? ?????? ?? ???????? bagof/3 ?
setof/3. ???? ???????? ?? ?? ???????? ????,
?????? ????? ?? ???? ????????? ? ????????
????????? ?? ??????? ?????? - ?? ? ?????????? ?? ?? ???????? ? findall/3 ,
?????? bagof/3 ???? ?? ?? ????????
92?????????? ?????????
- findall(Template, Enumerator, Solutions)-
- bagof(Template, EnumeratorEnumerator, X),
- !,
- SolutionsX.
- findall(_,_,).
93?????????? ?????????
- findall(Template,Enumerator,List)
- ?????? ?????? ?????????? ?? Template, ?? ?????
Enumerator ? ????????????, ? ?? ???????? ?
?????? ?? ????, ? ????? ?? ?? ???????? (?.?.
??????? ??????? ????????? ?? ??????? ???? ?????
??????? ?? ???????, ? ?????????? - ???? ????????
??????? ?? ???????) ? ??????? List ? ???? ??????.
?????????? List ? ??????????, ? Template ?
?????????? ??? ????, ????? ????????? ??
??????????, ?? ????? ?? ????? ? ??????????
94????????????? ????????? ?? ???????????? ?????????
- findall_1(Template,Enumerator,List)-
- L ,
- ( call(Enumerator),
- L TemplateL,
- fail
- reverse(List)
- ).
- ?????? ???? ??? ????? ?????? ???????
95????????????? ????????? ?? ???????????? ?????????
- findall_1(Template,Enumerator,List)-
- L ,
- ( call(Enumerator),
- L TemplateL,
- fail
- reverse(L,List)
- ).
- ?????? ???? ??? ????? ?????? ???????
96????????????? ????????? ?? ???????????? ?????????
- findall_2(Template,Enumerator,List)-
- assert(l()),
- ( call(Enumerator),
- retract(l(L)),
- assert(l(TemplateL)),
- fail
- retract(l(L)),
- reverse(L,List)
- ).
-
97????????????? ????????? ?? ???????????? ?????????
- ??? ???? ????????? ????????? ????? ????????
- Enumerator ???? ?? ????? ?? ???? ?????? ?????????
??? findall , ???????????? ??????????? ??? assert
?????? ?? ?? ?????? ? assert?. - retract ????? backtrack ?? ???????? ? ????? ???,
?????? ?????? ??????, ????? ??????? - ????????
???? ?????? - ???????????? ?? ?????? ?? ???? ????? ?? ??????
O(N2) ?????, ?????? N ? ???? ?? ??????????
???????
98????????? ?? ???????????? ????????? (Clocksin
Melish)
- findall_c_and_m(Template,Enumerator,_)-
- asserta(found(mark)), push mark on stack
found - call(Enumerator),
- asserta(found(Template)),
- fail.
- findall_c_and_m(_,_,List)-
- collect_found(,L),
- !, this cut is totally pointless
- ListL.
99????????? ?? ???????????? ????????? (Clocksin
Melish)
- collect_found(S,L)-
- getnext(X),
- !, while there is a non-mark on the stack
- collect_found(XS,L).
- collect_found(L,L). return L when mark is
found - getnext(X)-
- retract(found(X)),
- !, stop retract backtracking
- X\mark. check for end of list
100????????? ?? ???????????? ????????? (Clocksin
Melish)
- ?- findall_c_and_m(X,member(X,tom,dick,harry),L
). - L tom,dick,harry ?
- no
- ?- findall_c_and_m(X,member(X,tom,dick,mark,harr
y),L). - L harry ?
- yes
- ?- listing(found).
- found(dick).
- found(tom).
- found(mark).
- yes
- ??? Templatemark ?? ???????? ??????. ?????? ??
???? ?? ??????????? ????????? ?? ??????????
101?????????? ?????????
- bagof/3 ? setof/3 ???? ????? ?????? ????
findall/3 - bagof(Template, Enumerator, InstanceList)
- setof(Template, Enumerator, InstanceSet)
- bagof/3 ????? ??????? ????? ?????????? ?
Enumerator, ????? ?? ?????????? ? ?? ?? ????????
? Template. ???? ????????, ?? ??? ???? ??
????????/???????? ???????????? ?? ???? ??????????
102?????????? ?????????
- ??? ??? ??????? ???? ??????????, ????? ????? ??
?? ?????? (?? ????? ?? ??????????) ? Enumerator - ?????????? ??????? ?? ? Template
- ??????????, ????? ?????? ?? ????? ???????? ????
bagof/3 (???????? ??????????) - ??????????, ????? ????????? ?? ?? ???????????
(???????????? ??????????).
103?????? 4
- calendar(tom,algebra,monday).
- calendar(tom,cooking,tuesday).
- calendar(tom,english,wednesday).
- calendar(sue,algebra,tuesday).
- calendar(sue,history,wednesday).
- calendar(sue,biology,thursday).
- bagof(Subject,calendar(Person,Subject,_),Subjects)
- Subject -????????? ?? ? Template
- Person - ?????? ?? ???????
- _ - ?????? ?? ??????????
104?????????? ?????????
- ??? ?? ???????, ??? ?????????? ??? ??? ???? ??
??????????? Template ???? ???????, ???
?????????? ?????? ?? ?? ????????? ? ??????? ??
?????????? - ??? ??? ??????, ?? ????? ?? ?? ??????????
?????????? ?????????? ?? ???????????? ????????
? ???????? ?? ???????????? - ?? ???????? ?????????? ?? ?? ???????? ? ????????
?? ???????????? - ?? ????????? ?????????? ??????????
- ?? ????????? ???????????? ???????? ? ???????? ??
????????????
105?????????? ?????????
- ???? ?? ????????? ???????????? ???????? ?
???????? ?? ????????????. - ???????? ??
- X1X2X3Goal
- ????? ????????
- X1(X2(X3Goal))
106?????? 4?
- ?- bagof(Subject,Daycalendar(Person,Subject,Day
),Subjects). - Person sue,
- Subjects algebra,history,biology ?
- Person tom,
- Subjects algebra,cooking,english ?
- no
107?????? 5
- ?- setof(X,member(X,A,B),S),Aa,Ba.
- A a,
- B a,
- S a,a ?
- yes
- ?- Gp(X,Y),setof(G,GG,Gs).
- Gsp(_100,a),p(b,_103)
- Ako _100b, _103a, ??????????
- Gsp(b,a),p(b,a)