DOMAINS
list = integer*
PREDICATES
genl(integer, integer, list)
CLAUSES
genl(N2,N2,[]):-!.
genl(N1,N2,[N1|L]):-N1<N2, N=N1+4,
genl(N,N2,L).
GOAL
write("N="),readint(N),K=4*(N+1)-2,
genl(2,K,L),write(L),nl.
Результат выполнения программы:
N=5
[2,6,10,14,18]
Пример 3
Сформировать список последовательных натуральных чисел от 4 до 20 и найти количество его элементов.
Решение:
DOMAINS
list = integer*
PREDICATES
genl1(integer, integer, list)
len(integer, list)
CLAUSES
genl1(N2,N2,[]):-!.
genl1(N1,N2,[N1|L]):-N1<N2, N=N1+1, genl1(N,N2,L).
len(0,[]).
len(X,[_|L]):-len(X1,L), X=X1+1.
GOAL
genl1 (4,21,L),write(L),nl,
len(X, L),write("Количество элементов=",X),nl.
Результат выполнения программы:
[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
Количество элементов=17
Пример 4
Определить, содержится ли введенное число Х в заданном списке L.
Решение:
DOMAINS
list = integer*
PREDICATES
member(integer, list)
CLAUSES
member(X,[X|_]):-write("yes"),!.
member(X,[]):-write("no"),!.
member(X,[_|L]):- member(X, L).
GOAL
L=[1,2,3,4], write(L),nl, write("X="),readint(X),
member(X, L),nl.
Результат выполнения программы:
1-й случай:
[1,2,3,4]
X=3
yes
2-й случай:
[1,2,3,4]
X=5
no
Пример 5
Сформировать списки L1=[1,2,3], L2=[10,11,12,13,14,15] и объединить их в список L3.
Решение:
DOMAINS
list = integer*
PREDICATES
genl1(integer,integer,list)
append(list,list,list)
CLAUSES
genl1(N2,N2,[]):-!.
genl1(N1,N2,[N1|L]):-N1<N2,N=N1+1,genl1(N, N2, L).
append([],L,L).
append([X|L1],L2,[X|L3]):-append(L1,L2,L3).
GOAL
genl1(1,4,L1),write("L1=",L1),nl,
genl1(10,16,L2),write("L2=",L2),nl,
append(L1,L2,L3),write("L3=",L3),nl.
Результат выполнения программы:
L1=[1,2,3]
L2=[10,11,12,13,14,15]
L3=[1,2,3,10,11,12,13,14,15]
Пример 6
Удалить из списка, элементами которого являются названия дней недели, указанный элемент.
Решение:
DOMAINS
list = symbol*
PREDICATES
del(symbol,list,list)
CLAUSES
del(X,[X|L],L).
del(X,[Y|L],[Y|L1]):-del(X,L,L1).
GOAL
L=[пн, вт, ср, чт, пт, сб, вс],write("L=",L),nl,
write("X="),readln(X),
del(X,L,L1),write("L1=",L1),!;
write("Элемент отсутствует в списке"),nl.
Результат выполнения программы:
1-й случай:
L=["пн","вт","ср","чт","пт","сб","вс"]
X=ср
L1=["пн","вт","чт","пт","сб","вс"]
2-й случай:
L=["пн","вт","ср","чт","пт","сб","вс"]
X=пр
Элемент отсутствует в списке
Пример 7
Вставить в список имен новый элемент, значение которого вводится с клавиатуры. Вывести все возможные варианты вставок.
Решение:
DOMAINS
list = symbol*
PREDICATES
del(symbol,list,list)
ins(symbol,list,list)
CLAUSES
del(X,[X|L],L).
del(X,[Y|L],[Y|L1]):-del(X,L,L1).
ins(X,L1,L):-del(X,L,L1).
GOAL
L=[olga, oksana, toma, dima],write("L=",L),nl,
write("X="),readln(X),
ins(X,L,L1),write("L1=",L1),nl, fail.
Результат выполнения программы:
L=["olga","oksana","toma","dima"]
X=vera
L1=["vera","olga","oksana","toma","dima"]
L1=["olga","vera","oksana","toma","dima"]
L1=["olga","oksana","vera","toma","dima"]
L1=["olga","oksana","toma","vera","dima"]
L1=["olga","oksana","toma","dima","vera"]
Пример 8
Найти сумму элементов списка целых чисел.
Решение:
DOMAINS
list=integer*
PREDICATES
sum_list(list, integer)
CLAUSES
sum_list([],0).
sum_list([X|L],S):-sum_list(L,S1),S=S1+X.
GOAL
L=[1,2,3,4,5],sum_list(L,S), write("S=",S).
Результат выполнения программы:
S=15
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
1. Сформировать список [2, 4, 6, 8, 10] и удалить из него введенное число.
2. Сформировать списки [1, 3, 5, 7, 9] и [2, 4, 6, 8, 10] и объединить их в один.
3. Сформировать список [3, 6, 9, 12, 15, 18] и вставить в него введенное число.
4. Сформировать список из N натуральных чисел, начиная с 10. Каждое следующее на 5 больше предыдущего.
5. Сформировать список [3, 6, 9, 12, 15] и найти сумму его элементов
6. Сформировать список [6, 5, 4, 3, 2] и найти сумму его элементов
7. Сформировать список [7, 5, 3, 1] и найти произведение его элементов
8. Сформировать список из N последовательных натуральных чисел, начиная с 10. Найти сумму его элементов
Отчет о выполненной самостоятельной работе должен содержать:
1) тему лабораторной работы;
2) условие задачи;
3) листинг программы;
4) результаты ее тестирования.