Skip to content

Instantly share code, notes, and snippets.

@disolovyov
Created October 18, 2011 23:37
Show Gist options
  • Select an option

  • Save disolovyov/1297077 to your computer and use it in GitHub Desktop.

Select an option

Save disolovyov/1297077 to your computer and use it in GitHub Desktop.
Функционально-логическое программирование. Лабораторная работа 2.

Постановка

Ниже приведена программа на Прологе, реализующая REPL-подобную среду для работы со списками.

process(Input) :-
    write('> '),
    read(Command),
    perform(Command,Input,Output),
    process(Output).

perform(show,X,X) :- write(X),nl.
perform(add(Item),Before,After) :- append(Before,[Item],After).

Пример использования:

> show.
[]
> add(1).
> add(2).
> show.
[1,2]
> add(3).
> show.
[1,2,3]
> exit.
no

Общие задания

Реализовать дополнительные команды для REPL:

  • clear. — удалить все элементы из списка;
  • set(NewList). — заменить все элементы на данные;
  • getlen. — вывести на экран длину списка;
  • push(X). — добавить элемент в конец списка;
  • pop. — извлечь элемент с конца списка и вывести на экран.

Индивидуальные задания

Реализовать команду my. По номеру в журнале её смысл:

  1. Поменять местами первый и последний элементы списка.
  2. Удалить все элементы из списка, кроме первого и последнего.
  3. Переместить N элементов из начала списка в конец.
  4. Скопировать N элементов из начала списка в конец.
  5. Удалить первые N элементов списка.
  6. Удалить последние N элементов списка.
  7. Подсчитать сумму значений чётных элементов.
  8. Разместить элементы списка в обратном порядке, кроме первого и последнего.
  9. Увеличить значение каждого элемента в списке на 1.
  10. Увеличить значение последнего элемента в списке на 1.
  11. Вставить в список заданный элеменет по заданному индексу.
  12. Удалить из списка элемент с заданным индексом.
  13. Удалить первую половину элементов из списка.
  14. Поменять местами чётные и нечётные элементы списка.
  15. Продублировать каждый элемент в списке.
  16. Вывести средний или левый средний элемент списка на экран.
  17. Найти в списке элемент с самым большим значением.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment