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

Списки, ошибка There is no corresponding list domain

13.09.2010, 12:52. Показов 6466. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Просьба помочь разобраться в задачах Пролога.

Представление базы знаний. Даны сведения о марках машин:
1) Марка;
2) год начала выпуска;
3) фирма-изготовитель;
4) технические характеристики (структурированный домен):
a) мощность двигателя (лошадиных сил);
b) объем двигателя (литров);
c) вид топлива;
d) максимальная скорость
5) цена в USD.

И есть задание
Списки.
1. Сформировать список, состоящий из марок машин.
2. Сформировать список, состоящий из цен.
3. Получить два списка марок машин: в первом списке находятся машины дешевле ...... $, во втором - более дорогие машины.

Вот моя реализация первого пункта:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
domains
  Марка = string
  Выпуск = integer
  Производитель = string
  Характеристики=Характеристики(integer Мощность, integer Объём, string Топливо, integer Макс_скорость)  
  Цена = integer
%Описание списка 
машина=марка(string);выпуск (integer) ;производитель(string); характеристики(Характеристики);цена (integer)
list_car= машина* 
 
predicates
nondeterm машина (Марка,Выпуск,Производитель, Характеристики,Цена)
 
clauses
/* факты и правила*/
машина ("ауди102",1990,"ауди", характеристики(100, 80," дизель", 220 ), 150000).
машина ("белорусь",1985,"завод", характеристики(1, 8,"соляра", 22 ), 15).
машина ("ваз2120",2010,"автоваз", характеристики(600, 180,"бензин", 320 ), 99999999).
 
goal
findall(Марка, машина (Марка,_,_, характеристики(Мощность, Объём,  Топливо,  Макс_скорость), _ ), List_Name).
В строке findall показывает ошибку
511 There is no corresponding list domain (т.е. Марка не объявлена в доменах, но её объявление там есть)
Помогите разобраться в причинах ошибки. Не исключено что я неправильно строю решение.
Также прошу совета в реализации остальных пунктов.

Добавлено через 29 минут
Работаю в Visual Prolog 5.2

Добавлено через 23 минуты
Так, первый и второй пункт выполнен.

Остался последний

Добавлено через 1 час 5 минут
выполняю третий пункт.

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
domains
 Марка = string
  Выпуск = integer
  Производитель = string
  Характеристики=Характеристики(integer Мощность, integer Объём, string Топливо, integer Макс_скорость)  
  Цена = integer
%Описание списка 
    машина=марка(string);выпуск (integer) ;производитель(string); характеристики(Характеристики);цена (integer)
    list_car,L,L1,L2 = string* 
 
predicates
nondeterm машина (Марка,Выпуск,Производитель, Характеристики,Цена)
nondeterm разделение(Цена,L,L1,L2).
 
clauses
/* факты и правила*/
машина ("ауди102",1990,"ауди", характеристики(100, 80," дизель", 220 ), 150000).
машина ("белорусь",1985,"завод", характеристики(1, 8,"соляра", 22 ), 15).
машина ("ваз2120",2010,"автоваз", характеристики(600, 180,"бензин", 320 ), 99999999).
 
разделение(Цена,[Head|Tail],[Head|L1],L2) :-
                   Head <= Цена,
                   разделение(Цена,Tail,L1,L2).
                   
разделение(Цена,[Head|Tail],L1,[Head|L2]) :-
                   разделение(Цена,Tail,L1,L2),
                   Head > Цена.
                   
разделение(_,[],[],[]).
 
goal
 
разделение (1000, findall(Цена, машина (_,_,_, _, Цена), List_Name),L1,L2).


Выскакикает ошибка 409 Syntax error. В строке
Prolog
1
разделение (1000, findall(Цена, машина (_,_,_, _, Цена), List_Name),L1,L2).
и
Prolog
1
 510 Objects from these domains cannot be compared
в строке
Prolog
1
 Head <= Цена,
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2010, 12:52
Ответы с готовыми решениями:

Пролог, списки. Ошибка "Basic domain becomes reference domain: integer"
Понимаю, что ошибка в логике. Не могу понять, как правильно при компиляции программы выдает ошибку &quot;Basic domain becomes reference...

The variable is not bound in this clause и Basic domain becomes reference domain
Вот так ошибок нет: ... firlast(L,X,Y):- first(L,X), last(L,Y). first(,X):- X=H. last(],Y):- Y=H. last(,Y):- last(T,Y)....

domain.com и www.domain.com в разных папках
Доброе время суток) Подскажите пожалуйста, как реализовать чтобы domain.com и www.domain.com отдавались с разных папок?

2
 Аватар для Грымзик
2507 / 1483 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
13.09.2010, 15:29
Нельзя вызывать один предикат в качестве параметра другого. Даже если бы можно было findall(Цена, машина (_,_,_, _, Цена), List_Name) вернет yes или no.И зачем искать список всех цен, надо список всех моделей.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
razdelenie(Cena,[Head|Tail],[Head|L1],L2) :-
            mashina(Head,_,_,_,C),      
                   C<= Cena,!,
                   razdelenie(Cena,Tail,L1,L2).
                   
razdelenie(Cena,[Head|Tail],L1,[Head|L2]) :-razdelenie(Cena,Tail,L1,L2).
                   
razdelenie(_,[],[],[]).
 
goal
 
findall(Car, mashina(Car,_,_, _,_), List_Name), razdelenie(1000,List_Name,L1,L2).
1
0 / 0 / 0
Регистрация: 13.07.2009
Сообщений: 36
13.09.2010, 20:58  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2010, 20:58
Помогаю со студенческими работами здесь

Списки List<T>
Входные данные для этой задачи должны читаться из текстового файла, а выходные – записываться в текстовый файл. В файле каждый набор...

Списки List
Здравствуйте, форумчанин. Недавно я освоил python. Было все проще и понятно. Но мне дали 3 вопроса: 1. Как обойти список? 2. Какие типы...

Ошибка pow: DOMAIN error
При запуске в C++ Builder функция спамит вышеуказанной ошибкой, в выводе все значения при (i-j)&lt;0 забиты значением INF, при (i-j)&gt;0...

Ошибка денвера: Domain name does not exist
создал новый сайт. Поместил его на на home/имя_нового_сайта/www/содержимое_нового_сайта.php Набираю в адресой строке имя_нового_сайта/ -...

Ошибка при компиляции undefined reference to `List<int>::List()'|
Доброго времени суток=) столкнулась с такой проблемой нужно написать шаблон класса. При компиляции выдает ошибку undefined reference to...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru