Заменить элемент в списке на Visual Prolog

Помечено: , ,

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 7 мес. назад.

  • Автор
    Сообщения
  • #2239

    questioner
    Участник

    Дан список, а также два значения – старое и новое. Необходимо заменить в списке все элементы, совпадающие со старым значением на новое.

  • #2240

    replace([], _OldValue, _NewValue, []):-!.
    replace([OldValue|Tail], OldValue, NewValue, [NewValue|ReplacedTail]):-
      !, replace(Tail, OldValue, NewValue, ReplacedTail).
    replace([Head|Tail], OldValue, NewValue, [Head|ReplacedTail]):-
      replace(Tail, OldValue, NewValue, ReplacedTail).

    Если исходный список пуст, то независимо от от значений заменяемых элементов, результатом должен быть пустой список. Поэтому перед именами переменных стоит символ подчеркивания – переменные не используются, поэтому должны быть анонимными, иначе компилятор выдавал бы предупреждения.

    Иначе от исходного списка отделяется первый элемент, остальные элементы (Tail) обрабатываются рекурсивно – в результате формируется ReplacedTail, содержащий элементы хвоста, в которых уже произведена замена. К полученному результату необходимо добавить либо значение нового элемента (если первый элемент исходного списка совпал со старым значением), либо значение головы исходного списка.

    Вложения:

Для ответа в этой теме необходимо авторизоваться.