Пролог: нахождение 2-х раз чисел в списке и помещение числа и его двойника в список - PullRequest
1 голос
/ 06 марта 2019

Я новичок в Прологе, и я пытался создать предикат в Прологе, который находит двойное число в списке чисел и помещает число и его двойное число в один единственный список.Например:

?- double_list([2,3,6,10], List).
List = [[2, 4], [3, 6], [6, 12], [10, 20]].

Вот код, который я сделал до сих пор:

double_list([],[]).
double_list([H|T], [[H, double]| List]):-
    double is (H*2),
    double_list(T, List).

Я не знаю, где я ошибся.Я продолжаю получать false. при попытке запустить программу.

1 Ответ

5 голосов
/ 06 марта 2019

Переменные в Прологе начинаются с буквы нижнего или верхнего регистра.Проблема в вашем коде в том, что вы написали double вместо Double.Исправление кода:

double_list([],[]).
double_list([H|T], [[H, Double]| List]):-
    Double is H*2,
    double_list(T, List).

дает ожидаемый ответ на ваш запрос:

| ?- double_list([2,3,6,10], List).

List = [[2, 4], [3, 6], [6, 12], [10, 20]]
yes

Некоторые системы Prolog способны обнаружить ошибку в вашем коде.Например, используя SICStus Prolog, мы получаем:

* invalid LHS in arithmetic expression: double
...