Передача изменяющихся данных в прологе. Поиск минимума без использования списка.
Здравствуйте! Вот, тут задачка такого рода. Есть список товаров с их названием и ценой, а также датами начала и конца «сезона», то есть времени, когда они дешевле на 25% . Первая часть задачи не особенно трудна - показть названия товаров, подлежащих уценке и их новую цену, если известна текущая дата. Я создал такие предикаты :
tovar(name,day,day,month,month,integer)
И ,собственно, товары такого вида : tovar (“Santa”,1,1,2,12,500). Что значит :Деды морозы стоят по 500 единиц за штуку и в период с 1.02 по 2.12 их цена падает на 25%.
С первым заданием ообых проблем не было. А вот второе звучало так: вывести из НЕсезонных товаров самый дешевый. Я сделал предикат, который истеннен, когда товар не является в днный момент сезонным. Функция :
nucenka(Name,Day,Month,Cost) :- tovar(Name,Day1,Day2,Month1,Month2,Cost),ucenka3(Day,Month,Day1,Month1,Day2,Month2).
Выводит все несезонные в данный момент товары и их цены. НО, как я бду хранить цену самого дешевого? Ведь для этого нужно 2 действия : сравнить текущий минимум с ценой товара и если проверка успешна, то переопределить тек. минимум. Но во-первых, есть проблема начального значения минимума : мы его ищем, сл-но это бдет переменная, которая никак вначале не инициализирована. Во-вторых, чтобы хранить этот самый текущий минимум нужна, похоже, рекурсия. Но если я запущу рекурсивно nucenka, то она каждый раз будет проверять ВСЕ товары, даже отсечение не поможет. То есть проблемы такие : как хранить текущий минимум (в каком виде и как передавать дальше) и как его переопределть, едь ельзя одновременно и сравнивать 2 параметра и переопределять.
Спасио за внимание. С уважением, kentussharelus
Это сообщение было отредактировано popoff 01.12.07 02:22.