#prolog
Вопрос:
Я новичок на этой странице, но надеюсь, что получу необходимую помощь. Мне нужно закодировать программу, которая выдает список чисел от 0 до 9 из заданного большего числа. Я не знаю, как объяснить это лучше, поэтому я добавляю пример:
numbertolist(Number,List). ?- numbertolist(1456,List). List = [1,4,5,6].
Главное, что я не могу использовать number_chars/2
number_codes/2
функции , которые легко давали бы этот результат, я должен реализовать все функции.
number_codes(123456,X), maplist(plus(48),Y,X).
дает
Y = [1,2,3,4,5,6]
Комментарии:
1. Это обычная программная головоломка; запомните свое длинное деление:
10
делится1456
на 145 раз с остатком 6. Не случайно 6 было последней цифрой. А 145-это меньшее число.2. Я понимаю. Таким образом, ему в основном нужно запрограммировать, что остаток 1456/10, 145 6 переходит в Список = _ _ _ 6, следовательно, он движется дальше, и остаток 145/10, 14 5 переходит в список=_,_, 5, 6 и снова? Спасибо.
3. Примите мое решение, думаю, мы оба наберем несколько очков.
Ответ №1:
Решение без вызова number_codes/2
является
прямым, используя шаблон программирования аккумулятора:
number_digits(N, L) :- number_digits(N, [], L). number_digits(0, L, L) :- !. number_digits(N, L, R) :- D is N rem 10, M is N // 10, number_digits(M, [D|L], R).
Программа Пролог дает:
?- number_digits(1454, X). X = [1, 4, 5, 4].