Длина списка - PullRequest
       7

Длина списка

0 голосов
/ 30 апреля 2018

Я новичок в ProLog и пытаюсь ответить на следующий вопрос:

Напишите предикат len, чтобы вычислить общую продолжительность списка x задачи, например

?- len([d, j, l, n], Time).

Time = 15

Существует ряд правил, которые необходимо соблюдать:

duration(a,5).
duration(b,7).
duration(c,3).
duration(d,4).
duration(e,10).
duration(f,4).

Я попробовал следующее, но есть сообщение об ошибке, и я не вижу, что я делаю неправильно.

length([], 0).
length([X], duration(X, T), Time).

sum([],0).
sum([X|L],N) :-
    sum(L,N1),N is N1 + X.

length([X|Xs], sum([duration(Xs, Ts)], Time).

Это ошибка: Singleton variables: [T,Time] Syntax error: Operator expected

Я хочу иметь возможность рассчитать продолжительность нескольких задач за один раз, введя задачи в виде списка.

Я определил сумму. Что еще нужно сделать?

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 30 апреля 2018

Вы, кажется, пытаетесь определить length как

length([], 0).

но length - это уже определенный предикат, который ограничивает второй аргумент длиной списка. Вы должны определить len здесь.


Это не хорошо.

length([X], duration(X, T), Time).

следующее будет лучше.

len([X], Time) :- duration(X, Time).

Но если вы правильно определите len([X|Xs], Time), len([X], Time) станет ненужным.


Я думаю sum не обязательно. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...