Как устранить ошибку в получении числа дней? Суть программы - посчитать количество дней в летних месяцах. Имеется следующий код: % Copyright implement main open core, console, math, string class facts месяц : (string Имя_Месяца, unsigned Номер_по_порядку, unsigned Количество_дней). class predicates sumli : (unsigned C,unsigned Sum [out]) . clauses месяц("Январь", 1, 31). месяц("Февраль", 2, 28). месяц("Март", 3, 31). месяц("Апрель", 4, 30). месяц("Май", 5, 31). месяц("Июнь", 6, 30). месяц("Июль", 7, 31). месяц("Август", 8, 31). месяц("Сентябрь", 9, 30). месяц("Октябрь", 10, 31). месяц("Ноябрь", 11, 30). месяц("Декабрь", 12, 31). sumli(N,0):- N>8,!. sumli(N,C):- месяц(_, N, Count),sumli(N+1,Count1),C=Count1+Count. run() :- setConsoleTitle("задача 8"), sumli(6,Sum), /* Sum = 0, месяц(_, N, Count), N >= 6, N <= 8, fail() or write("ответ: ", Sum),*/ write(Sum), nl, write("для закрытия нажмите любую клавишу"), clearInput(), _ = readChar(). % place your own code here end implement main goal console::run(main::run). Но, выдает ошибку e631 The predicate 'main::sumli/2 (i,o)', which is declared as 'procedure', is actually 'nondeterm' main.pro
Ошибка заключается в том, что предикат sumli объявлен с аргументами N и C как входными, в то время как в определении он используется рекурсивно как N+1 и Count1. Это означает, что на самом деле предикат sumli является недетерминированным (вызывается несколько раз для разных входных значений N), а не процедурным (вызывается только один раз с определенными аргументами). Чтобы устранить эту ошибку, измените декларацию предиката sumli следующим образом:
sumli : (unsigned N, unsigned Sum [out]) .
Затем корректируйте определение предиката sumli, чтобы оно соответствовало новой декларации:
sumli(N,0):- N>8,!. sumli(N,C):- месяц(_, N, Count),NextN = N+1,sumli(NextN,Count1),C=Count1+Count.
Эти изменения должны устранить ошибку и позволить правильно вычислять количество дней в летних месяцах.
Ошибка заключается в том, что предикат sumli объявлен с аргументами N и C как входными, в то время как в определении он используется рекурсивно как N+1 и Count1. Это означает, что на самом деле предикат sumli является недетерминированным (вызывается несколько раз для разных входных значений N), а не процедурным (вызывается только один раз с определенными аргументами). Чтобы устранить эту ошибку, измените декларацию предиката sumli следующим образом:
sumli : (unsigned N, unsigned Sum [out]) .Затем корректируйте определение предиката sumli, чтобы оно соответствовало новой декларации:
sumli(N,0):- N>8,!.sumli(N,C):- месяц(_, N, Count),NextN = N+1,sumli(NextN,Count1),C=Count1+Count.
Эти изменения должны устранить ошибку и позволить правильно вычислять количество дней в летних месяцах.