Решение. Genl( integer, integer, list )

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) результаты ее тестирования.

Наши рекомендации