. .
findall (_). . :
findall (Variable, Predicat_expression, List_name),
List_name ' , Predicat_expression , ; Variable ᒺ Predicat_expression, List_name.
( 4.7).
/* 4.7 */
domains
number, salary=integer
name=string
list_worker=name*
predicates
work (name, number, salary)
clauses
work (, 101. 500).
work (, 211,400).
work (, 101,300).
work (, 101,200).
work (), . , , , , .. .
.
. domains findall :
findall (Name, work (Name, 101, _), List_Name),
Name , work (Name, 101, _). , Name , List_Name . findall List_Name 101 .
4.7 , findall , , . , , .
, , .
work () . 4.8 .
/* 4.8 */
domains
number,salary=integer
name=string
list_salary=salary*
predicates
work (name,number,salary)
sum_list (list_salary,salary,integer)
show_sum
find_sum (number)
clauses
show_sum:-makewindow (1,7,15, ":",5, 10, 12, 30), cursor (2,1), write (" -> "), readint (Otd), find_sum (td), readchar (_).
find_sum (td) :- findall (Many, work (_, Otd, Many), Lmany), sum_list (Lmany, Sum, Member), write ( :, Sum), nl, write (: , Member), nl, Ave=Sum/Member, write ( /: , Ave), nl.
|
|
sum_list ([] ,0,0).
sum_list ([ H|T ], Sum, Num) :- sum_list (T, S, N), Sum=H+S, Num=N+1.
work (, 101. 500).
work (, 211,400).
work (, 101,300).
work (, 101,200).
show_sum , find_sum ().
find_sum () work () Lmany, , .
sum_list. ³ .
sum_list , , .