Visual Prolog 5.2 Число,представленное списком двоичных разрядов напечатать в виде десятичного числа

Узнай цену своей работы

Формулировка задачи:

Не могу понять,почему компилятор выдает No solution.Первый раз программирую на языке после теории,не судите строго.
Все,исправил сам.Чо-т очень глупую ошибку совершил,надо было еще подумать.

Решение задачи: «Visual Prolog 5.2 Число,представленное списком двоичных разрядов напечатать в виде десятичного числа»

textual
Листинг программы
domains
intl=integer*
 
predicates
b2d_(intl,integer,integer)
b2d(intl,integer)
 
clauses
b2d_([],R,R).
b2d_([H|T],R,S) :- R1=R*2+H, b2d_(T,R1,S).
b2d(X,R) :- b2d_(X,0,R).

Объяснение кода листинга программы

  1. domains - определения типов данных, используемых в программе. В данном случае, intl определен как integer*, что означает, что это список целых чисел.
  2. predicates - определения пользовательских функций (предикатов) в программе. В данном случае, b2d_ и b2d - две версии одной функции, принимающие три аргумента (intl, integer, integer) и два аргумента (intl, integer) соответственно.
  3. clauses - определения правил (условий) в программе. В данном случае, есть два правила: a. b2d_([],R,R). - когда входной список пуст, то результатом будет R, то есть входной аргумент. b. b2d_([H|T],R,S) :- R1=R*2+H, b2d_(T,R1,S). - когда входной список не пуст, то есть H, первый элемент списка, и T, оставшаяся часть списка. Результатом будет R1, полученное умножением R на 2 и добавлением H. Затем вызывается рекурсивно функция b2d_ для списка T и аргументов R1 и S.
  4. b2d(X,R) :- b2d_(X,0,R). - определение версии функции b2d, принимающей два аргумента. Когда второй аргумент равен 0, то есть X является пустым списком, то результатом будет R, то есть входной аргумент. В противном случае, вызывается рекурсивно функция b2d_ для списка X, аргументов 0 и R. Таким образом, данный код представляет собой реализацию функции, преобразующей список двоичных чисел в десятичное число.

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы