[Закрыть]
 
popoff.donetsk.ua
Эффект страуса позволяет нам быть уверенными в своих знаниях даже тогда, когда такой уверенности быть не должно.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Функциональное и логическое программирование - От новичка: нужна помощь в написании запроса

От новичка: нужна помощь в написании запроса

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Denis
Денис
Дек, 2006
Сообщений: 3
Denis url://forum.message:1781
От новичка: нужна помощь в написании запроса

есть переменная:
between(1, 360).
between(2, 1751).
есть правило:

cust(X, existing) <- between(X, Y), <(Y, 365). cust(X, new) <- between(X, Y), >=(Y, 365).

если ставить запрос:
cust(X, existing).
выводит: cust(1, existing).yes
ВОПРОС:
как определить переменные и правило, чтобы в запросе я писал: cust(360).  и результат был cust(1).yes?
Заранее благодарен.

Это сообщение было отредактировано Denis 25.12.06 17:22.
popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:1782

Denis,
какой версией Пролога Вы пользуетесь? Я с этой версией, видимо, плохо знаком, но тем не менее я могу заподозрить Вас в том, что Вы не совсем правильно скопировали текст. В частности, предикат cust в Вашем случае не может быть истенен ни при каких Х, если второй аргумент - existing. Вы же пишите, что предикат истинен для Х=1. Это было бы так, если бы 751 было меньше, чем 365.

у предиката cust 2 аргумента. Вы хотите в запросе использовать один аргумент?

~~~~~ 25 Дек 2006, 15:08 ~~~~~

Что за задачу Вы решаете?

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Denis
Денис
Дек, 2006
Сообщений: 3
Denis url://forum.message:1783

Я исправил between(1, 761). на between(1, 360).
Это первое. Второе - беда в том, что я использую пролог частично и вся программа построена на Джаве. Версии я вам тоже не скажу. Единственное, в чем я разобрался, так это то, что переменная between учавствует в правиле cust(X, existing) <- between(X, Y), <(Y, 365). И потому вывод именно такой. Я уже думал, что необходимо использовать несколько правил, одним не обойтись,но что именно использовать - не разберусь.....

Это сообщение было отредактировано popoff 25.12.06 17:30.
popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:1784

Denis,

Версии я вам тоже не скажу.

Denisфорумы popoff.donetsk.ua

Это тайна?

переменная between

Denisфорумы popoff.donetsk.ua

between - это не переменная, а факт. Х, Y - это переменные.

К сожалению, на Ваш вопрос невозможно ответить, потому что Вы непонятно его сформулировали. Также, в Вашем последнем посте Вы не ответили ни на один из моих вопросов.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Denis
Денис
Дек, 2006
Сообщений: 3
Denis url://forum.message:1785

Извините за настойчивость. Версии я вам не скажу, потому что не знаю . То, что ошибся с трактовкой - я ж новичок, и никогда не изучал пролог. Просто столкнулся с проблемой, которую нужно решить, вот и задал ее на первом форуме.
Ответы на ваши вопросы:
----------------------------

between(1, 360). between(2, 1751). cust(X, existing) <- between(X, Y), <(Y, 365). cust(X, new) <- between(X, Y), >=(Y, 365). запрос: cust(X, existing). вывод: cust(1, existing).yes

----------------------------
Я не отрицаю, что это частичное использование пролога. Возможно вам будет проще разобраться в составлении переменных и написании правил.

у предиката cust 2 аргумента. Вы хотите в запросе использовать один аргумент?


Я хочу использовать 2 аргумента, но необходимо исправить правила так, чтобы в запросе вместо cust(X, existing). писать cust(X, 320). и в результате был вывод cust(1, existing).yes или cust(1, 320).yes. Надеюсь, мой ответ стал немного понятнее. С уважением, Денис.

Это сообщение было отредактировано popoff 25.12.06 18:27.
popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:1787

вместо cust(X, existing). писать cust(X, 320). и в результате был вывод cust(1, existing).yes

Denisфорумы popoff.donetsk.ua

Так нельзя написать ни в одной версии пролога. cust - это предикат, и пролог просто говорит, при каких значениях аргументов этот предикат истинен. Значения аргументов могут быть заданы, а могут быть не заданы. Если не заданы, то пролог подбирает такие значения, при которых предикат был бы истинен и возвращает их. Если аргументы заданы, то пролог просто проверяет истинность предиката.

В данном случае cust(X, 320) второй аргумент - 320 - задан. Пролог не может поменять одно значение на другое. Он просто проверит, истинен ли предикат cust в случае, если на втором месте записано 320. Очевидно, для Вашей программы будет ложь, так как для предиката cust на втором месте возможно только одно из двух значений - existing и new.

в запросе вместо cust(X, existing). писать cust(X, 320). и в результате был вывод cust(1, 320).yes.

Denisфорумы popoff.donetsk.ua

А ещё в прологе есть понятие «анонимная переменная». Вы можете поискать, как она записывается в Вашей версии пролога. Обычно она обозначается подчёркиванием.

Анонимная переменная означает, что предикат истинен при любых значениях этого аргумента. Например, так:
cust(X, _) <- between(X, Y), <(Y, 365).
означает, что предикат истинен при любых значениях второго аргумента.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Программное обеспечение любой сложности
koins.com.ua