Десятичное число пролога в список чисел

#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].