Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 20.08.2011
Сообщений: 24

Обработка списков

23.08.2011, 22:14. Показов 1390. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожайлуста!!!
Задание:
1. Создать список, состоящий из значений первых аргументов предикатов, которые сформированны в "Программе", которая находится ниже.
2. Распечатать список.
3. Подсчитать количество элементов в списке.
4. Найти в заданном списке указанный элемент.

======================================== =================================
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
             "Программа":
domains
 
    атс=integer
    список_атс=атс*
    фамилия,телефон=string
    название_района=string
 
facts
 
    человек(фамилия,телефон,атс).
    район(название_района,список_атс).
 
predicates
 
    nondeterm входит_в_список(атс,список_атс).
    nondeterm проживает_в_районе(фамилия,название_района).
 
clauses
 
    человек("Иванов","123-45-67",123).
    человек("Петров","124-45-24",124).
    человек("Сидоров","250-45-76",250).
    человек("Ковалёв","320-45-64",320).
 
    район("Академическая",[123,124,125,126,135]).
    район("Салтовка",[310,320,330,340,350]).
    район("Основа",[210,220,230,240,250]).
 
    входит_в_список(H,[H|_]).
    входит_в_список(H,[_|Tail]):-входит_в_список(H,Tail).
 
    проживает_в_районе(Фамилия,Район):- человек(Фамилия,_,АТС),район(Район,СписокАТС),входит_в_список(АТС,СписокАТС).
 
goal
 
    проживает_в_районе("Иванов",Район).
    проживает_в_районе("Петров",Район).
    проживает_в_районе("Сидоров",Район).
    проживает_в_районе("Ковалёв",Район).
======================================== =================================
Зарание БОЛЬШОЕ СПАСИБО!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.08.2011, 22:14
Ответы с готовыми решениями:

Обработка списков
В коде, в строке head_list(list). появилась ошибка No clauses for this predicate. Но head_list(list). используется! Что я неправильно...

Обработка списков
Даны два непустых списка целых чисел L1 и L2. Создать программу, которая строит список L3, содержащий все различные пары , в которых X1 -...

Обработка списков
Помогите, пожалуйста, с задачей. Необходимо определить новые предикаты, которые работают со списками любой длины. И задание:

8
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
24.08.2011, 21:29
Prolog
1
2
3
4
5
6
goal
 
        проживает_в_районе("Иванов",Район).
        проживает_в_районе("Петров",Район).
        проживает_в_районе("Сидоров",Район).
        проживает_в_районе("Ковалёв",Район).
Так нельзя, в разделе goal не правила задаются, а то, что должна делать программа. Точка там может быть только одна - в конце. Поэтому можно сделать так
Prolog
1
2
3
4
5
6
goal
 
        проживает_в_районе("Иванов",Район1),
        проживает_в_районе("Петров",Район2),
        проживает_в_районе("Сидоров",Район3),
        проживает_в_районе("Ковалёв",Район4).
Добавьте в domains
фамилии=фамилия*
И теперь
goal
findall(Фамилия,человек(Фамилия,_,_),Фам илии).
А предикаты вывода списка на экран, подсчета длины и нахождения элемента много раз встречались, воспользуйтесь поиском.
1
0 / 0 / 0
Регистрация: 20.08.2011
Сообщений: 24
25.08.2011, 12:23  [ТС]
Спасибо!!!

Добавлено через 7 часов 13 минут
Насчёт 1-го пункта я так понял нужно вот так сделать!?
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
domains
 
    атс=integer
    список_атс=атс*
    фамилия,телефон=string
    название_района=string
    фамилии=фамилия*
 
facts
 
    человек(фамилия,телефон,атс).
    район(название_района,список_атс).
 
predicates
 
    nondeterm входит_в_список(атс,список_атс).
    nondeterm проживает_в_районе(фамилия,название_района).
 
clauses
 
    человек("Иванов","123-45-67",123).
    человек("Петров","124-45-24",124).
    человек("Сидоров","250-45-76",250).
    человек("Ковалёв","320-45-64",320).
 
    район("Академическая",[123,124,125,126,135]).
    район("Салтовка",[310,320,330,340,350]).
    район("Основа",[210,220,230,240,250]).
 
    входит_в_список(H,[H|_]).
    входит_в_список(H,[_|Tail]):-входит_в_список(H,Tail).
 
    проживает_в_районе(Фамилия,Район):- человек(Фамилия,_,АТС),район(Район,СписокАТС),входит_в_список(АТС,СписокАТС).
 
goal
 
    findall(Фамилия,человек(Фамилия,_,_),Фамилии).
А вот остальные я не могу сделать(( Поискал на сайте, но чё-то ничего не нашол!(
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
25.08.2011, 19:31
Да, 1й пункт так. Остальные предикаты встречаются на форуме, и очень часто, просто специальных тем для них нету. Это азы пролога, и если Вы и такие элементарные задачи сделать не можете, то Вы точно этот предмет не сдадите. Так что лучше постарайтесь написать самостоятельно. А уж если не получится, то с исправлением ошибок я помогу.
0
0 / 0 / 0
Регистрация: 20.08.2011
Сообщений: 24
27.08.2011, 14:06  [ТС]
Вот всё что я смог сделать...да и то походу неправильно!((

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
domains
 
    атс=integer
    список_атс=атс*
    фамилия,телефон=string
    название_района=string
    фамилии=фамилия*
    список = integer*
    вывести_список(список)
 
facts
 
    человек(фамилия,телефон,атс).
    район(название_района,список_атс).
 
predicates
 
    nondeterm входит_в_список(атс,список_атс).
    nondeterm проживает_в_районе(фамилия,название_района).
 
clauses
 
    человек("Иванов","123-45-67",123).
    человек("Петров","124-45-24",124).
    человек("Сидоров","250-45-76",250).
    человек("Ковалёв","320-45-64",320).
 
    район("Академическая",[123,124,125,126,135]).
    район("Салтовка",[310,320,330,340,350]).
    район("Основа",[210,220,230,240,250]).
 
    входит_в_список(H,[H|_]).
    входит_в_список(H,[_|Tail]):-входит_в_список(H,Tail).
 
    проживает_в_районе(Фамилия,Район):- человек(Фамилия,_,АТС),район(Район,СписокАТС),входит_в_список(АТС,СписокАТС).
 
    вывести_список([],N):-N=0.
    вывести_список([Г|Х],N) :-
    write(Г), nl,
    вывести_список(Х,N1),
    N=N1+1.
 
goal
 
    findall(Фамилия,человек(Фамилия,_,_),Фамилии).
    
    вывести_список([1, 2, 3]).
Больше ничего не получается сделать! Я в тупике, а сдавать уже в понедельник (
Помогите пожайлуста!!! Буду очень благодарен!!!
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
27.08.2011, 19:48
Ну неужели Вы даже компилятор скачать не можете? Не забывайте, что все предикаты надо отмечать в разделе predicates. Далее, в предикате "вывести_список", кроме самого вывода еще и считается количество элементов в списке, так что 2-3 пункты выполнены. 4й пункт я не очень поняла, если имеется в виду, что выдать индекс искомого вещества, то так
Prolog
1
2
search(X,[X|_],1).
search(X,[_|Tail],N):-search(X,Tail,N1),N=N1+1.
1
0 / 0 / 0
Регистрация: 20.08.2011
Сообщений: 24
28.08.2011, 18:12  [ТС]
Я так понял, что строку:
Prolog
1
вывести_список(список)
нужно из domains пемеместить в predicates и всё, первые три пункта готовы?!
0
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
28.08.2011, 19:06
Поставьте компилятор и сами проверяйте! В данном случае не все, т.к в предикате вывести_список у Вас где 1 параметр, а где и 2. Там, где 2, там считается и длина, так что надо исправить места, где 1.
0
0 / 0 / 0
Регистрация: 20.08.2011
Сообщений: 24
28.08.2011, 22:17  [ТС]
Чё-то я не совсем пойму где надо исправить!(

Можете, пожайлуста, написать правильно программу? Буду очень благодарен!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.08.2011, 22:17
Помогаю со студенческими работами здесь

Обработка списков
Список состоит из букв и цифр, буквы оставить без изменения, а цифры умножить на 2.

Рекурсивная обработка списков
Напишите предикат, находящий минимальный и максимальный элементы списка.

Обработка соответствующих элементов двух списков и формирование третьего
Даны два списка одинаковой длины. Получить третий список, каждый элемент равен 1, если элементы заданных списков с тем же номером имеют...

Обработка списков: вводы, разность, получение длины и сортировка [Arity]
помогите с прогой на Arity prolog?! организовать ввод и формирование двух символьных списков.Найти разность списков.Определить длину...

Определить, какой из списков меньше (как по значениям элементов, так и по длинам подсписков и самих списков)
Даны списки списков чисел l1 и l2. Определить, какой из списков меньше (как по значениям элементов, так и по длинам подсписков и самих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru