Сборник задач по курсу «Логическое программирование»: Учебное пособие, страница 3

?- pred([a,b,c],X). X = [a,b,c] -> ; X = [a,c,b] -> ; X = [b,a,c] -> ; X = [b,c,a] -> ; X = [c,a,b] -> ; X = [c,b,a] -> ; no

?-

32.  Строка текста на русском языке содержит «лишние» пробелы. Удалить избыточные пробелы.

Аргументы: исходная строка; результирующая строка.

?- pred(’Мы  будем рады узнать ваше   мнение!’,X). X = ’Мы будем рады узнать ваше мнение!’ yes ?-

33.  Даны два числовых списка, содержащие коэффициенты двух полиномов. Соответствие между элементами списка и коэффициентами полинома можно отобразить следующим образом: a0+a1x+a2x2+a3x3+a4x4+… ® [a0,a1,a2,a3,a4,…]. Перемножить полиномы. Результирующий полином должен представлять собой список коэффициентов, составленный по тому же правилу, что и списки для исходных полиномов.

Аргументы: первый полином (список); второй полином (список); результирующий полином.

?- pred([3,5,8],[1,4],X). X = [3,17,28,32] yes ?-

34.  Дан список и число N. Построить сочетания по N элементов из исходного списка.

Аргументы: исходный список; целое число; результирующий список.

?- pred([3,5,8,1],3,X). X = [3,5,8] X = [3,5,1] X = [3,8,1] X = [5,8,1] no ?-

35.  Преобразовать предложение на русском языке в список слов.

Аргументы: исходная строка; список слов (строк).

?- pred(’Это будет работать, но возникнут две проблемы.’,X). X = [Это,будет,работать,но,возникнут,две,проблемы] yes ?-

36.  Восстановить по отчеству имя.

Аргументы: исходная строка (отчество); результирующая строка (имя).

?- pred(’Иванович’,X). X = Иван yes ?-

37.  Подсчитать количество вхождений каждой буквы в строку текста на русском языке и собрать результаты в список.

Аргументы: исходная строка; список пар вида «Буква : целое число».

?- pred(’Это будет работать’,X). X = [Э:1,т:4,о:2,б:2,у:1,д:1,е:1,р:1,а:2,ь:1] yes ?-

38.  Произвести перекодировку строки текста на русском языке из кодировки DOS в кодировку Windows.

Аргументы: исходная строка (DOS); результирующая строка (Windows).

?- pred(’Перевод получен’,X). X = ??а?ўR¤ ЇR<гз?- yes ?-

39.  Дан числовой список, содержащий первые N членов ряда, и порядковый номер элемента ряда K. Расчитать K-ый элемент ряда при условии, что каждый член ряда равен сумме N предыдущих его членов (за исключением N первых членов).

Аргументы: список первых членов ряда; порядковый номер члена ряда; член ряда.

?- pred([0,1,2],4,X). X = 3 yes ?-

40.  Произвести замену всех вхождений заданной подстроки в исходную строку на новую подстроку.

Аргументы: исходная строка; подстрока для поиска; подстрока для замены; результирующая строка.

?- pred(’голод, холод’, ’од’, ’одом’,X). X = ’голодом, холодом’ yes ?-

41.  Дано предложение на русском языке. Построить список слов предложения. Список не должен содержать повторов слов и знаков препинания.

Аргументы: исходная строка; список слов.

?- pred(’Что воля, что неволя...’,X). X = [’что’,’воля’,’неволя’] yes ?-

42.  Дан список точек плоскости. Каждая точка задается парой координат (X,Y) и, таким образом, исходный список имеет вид [(X1,Y1),(X2,Y2), (X3,Y3),]. Преобразовать исходный список в список относительных координат вида [(X1,Y1),(DX2,DY2), (DX3,DY3),], где первая точка задается абсолютными координатами, а все последующие – в виде пары (сдвиг по оси X, сдвиг по оси Y) относительно предыдущей точки (DXk=Xk−Xk-1, DYk=Yk−Yk-1).

Аргументы: исходный список абсолютных координат; список относительных координат.

?- pred([(1,2),(3,5),(2,0),(0,0)],X). X = [(1,2),(2,3),(1,-5),(-2,0)] yes ?-


Бинарные деревья

43.  Определить наличие на каком-либо из путей от корня до листа хотя бы двух узлов с одинаковым именем.

Аргументы: произвольное бинарное дерево.

?- pred(a(f(a(m,k),r),n)). yes ?- pred(a(f(d(m,k),r),n)). no ?-

44.  Определить наличие хотя бы двух узлов с одинаковым именем на одной глубине.

Аргументы: произвольное бинарное дерево.

?- pred(s(f(b(m,k),a),n(b,g))). yes ?- pred(s(f(b(m,k),a),n(t,g))). no ?-

45.  Определить наличие двух одинаковых путей от корня до листа.

Аргументы: произвольное бинарное дерево.

?- pred(s(f(b(m,k),a),f(a,g))). yes ?- pred(s(f(y(m,k),a),f(t,g))). no ?-