minNumber(L, N) :-
minElements(L, MinElements),
min(MinElements, _, N).
minElements([], []).
minElements([H|T], [MH|MT]) :-
min(H, MH, _),
minElements(T, MT).
min([X], X, 1).
min([H|T], M, N) :- min(T, M, N), H < M, !.
min([_|T], M, N) :- min(T, M, N1), N = N1+1.
goal
List = [[1,3],[0],[6,1]],
minNumber(List, N).
ПРИЛОЖЕНИЕ Б. Листинг кода в файле «laba6.txt»
- Создание БД.
domains
name = symbol
sex = symbol % male | female
age = integer
database
person(name, sex, age)
parent(name, name)
clauses
person("Name1", male, 32).
person("Name2", male, 50).
person("Name3", male, 7).
person("Name4", male, 5).
person("Name5", male, 45).
person("Name8", male, 17).
person("Name6", female, 70).
person("Name7", female, 65).
person("Name9", female, 29).
person("Name10", female, 44).
person("Name11", female, 65).
parent("Name1", "Name3").
parent("Name1", "Name4").
parent("Name9", "Name3").
parent("Name9", "Name4").
parent("Name2", "Name1").
parent("Name6", "Name2").
parent("Name6", "Name5").
parent("Name5", "Name8").
parent("Name7", "Name8").
parent("Name11", "Name7").
parent("Name11", "Name10").
goal
save("person.db").
- Работа с БД.
domains
name = symbol
gender = symbol % male | female
age = integer
database
person(name, gender, age)
parent(name, name)
predicates
nondeterm dad(name, name)
nondeterm mom(name, name)
nondeterm son(name, name)
nondeterm daughter(name, name)
nondeterm brother(name, name)
nondeterm sister(name, name)
nondeterm grandpa(name, name)
nondeterm grandma(name, name)
nondeterm menu
nondeterm end
nondeterm action(char)
constants
file = "person.db"
clauses
dad(X, Y) :- consult(file), parent(X, Y), person(X, male, _).
mom(X, Y) :- consult(file), parent(X, Y), person(X, female, _).
son(X, Y) :- consult(file), parent(Y, X), person(X, male, _).
daughter(X, Y) :- consult(file), parent(Y, X), person(X, female, _).
brother(X, Y) :- consult(file),
parent(Z, X), parent(Z, Y), not(X=Y), person(X, male, _).
sister(X, Y) :- consult(file),
parent(Z, X), parent(Z, Y), not(X=Y), person(X, female, _).
grandpa(X, Y) :- consult(file), parent(X, Z), parent(Z, Y), person(X, male, _).
grandma(X, Y) :- consult(file), parent(X, Z), parent(Z, Y), person(X, female, _).
menu :-
write("1 - Add person"), nl,
write("2 - Add parent relation"), nl,
write("3 - Delete person"), nl,
write("4 - Delete parent relation"), nl,
write("0 - Save information & Exit"), nl,
readchar(Char),
retractall(_),
consult(file),
action(Char).
end :-
save(file),
write("Change saved. Press any key to continue"), nl,
readchar(_),
menu.
action('1') :-
write("*Add person's information*"), nl,
write("Enter name:"), nl,
readln(N),
write("Enter gender:"), nl,
readln(G),
write("Enter age:"), nl,
readint(A),
assert(person(N, G, A)),
end.
action('2') :-
write("*Add parent's information*"), nl,
write("Enter parent's name:"), nl,
readln(N1),
write("Enter child's name:"), nl,
readln(N2),
assert(parent(N1, N2)),
end.
action('3') :-
write("*Delete persons's information*"), nl,
write("Enter name:"), nl,
readln(N),
retract(person(N, _, _)),
end.
action('4') :-
write("*Delete parent's information*"), nl,
write("Enter parent's name:"), nl,
readln(N1),
write("Enter child's name:"), nl,
readln(N2),
retract(parent(N1, N2)),
end.
action('0') :- save(file).
goal
menu.