Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа1.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
43 Кб
Скачать
☆
  1. Загрузка системы, системный редактор

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

https://www.tutorialspoint.com/execute_lisp_online.php.

Данная среда включает:

- текстовый редактор;

- исполнитель кода.

  1. Функции списков

  • Функция CAR возвращает в качестве значения первый элемент списка:

(CAR список) → S- выражение (атом либо список).

  • Функция CDR – возвращает в качестве значения хвостовую часть списка, т. е. список, получаемый из исходного списка после удаления из него головного элемента:

(CDR список) → список

Примеры:

(write (car '(a b c d e f)))

(write (cdr '(a b c d e f)))

(write (cons 'a '(b c)))

(write (list 'a '(b c) '(e f)))

(write (append '(b c) '(e f) '(p q) '() '(g)))

(write (last '(a b c d (e f))))

(write (reverse '(a b c d (e f))))

Результат:

A

(B C D E F)

(A B C)

(A (B C) (E F))

(B C E F P Q G)

((E F))

((E F) D C B A)

  • Объединение команд

Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, в Лиспе для этого используется более короткая запись. Желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции:

(C...R список)

cadadr = car cdr car cdr.

Вместо многоточия записывается нужная комбинация из букв А и D (для CAR и CDR соответственно). В один вызов можно объединять не более четырех функций CAR и CDR.

(CADAR х) = (CAR (CDR (CAR х)))

(CDDAR ‘((a bed) е)) = (с d)

(CDDR ‘(k 1 m)) = (m)

(cadadr '(a (c d) (e f g))) = d

  • Функция создания CONS.

  • Функция CONS строит новый список из переданных ей в качестве аргументов головы и хвоста.

(CONS голова хвост)

Для того чтобы можно было включить первый элемент функции CONS в качестве первого элемента значения второго аргумента этой функции, второй аргумент должен быть списком. Значением функции CONS всегда будет список:

(CONS s-выражение список) → список

(write (cons 'a '(b c)))

(write (cons 'ab 'cd))

(write (cons NIL '(a b c) ))

(write (cons '(a b c) NIL))

(write (cons 1 nil))

(write (cons 1 (cons 2 nil)))

(write (cons 1 (cons 2 (cons 3 nil))))

(write (cons 'a (cons 'b (cons 'c nil))))

(write ( car (cons 'a (cons 'b (cons 'c nil)))))

(write ( cdr (cons 'a (cons 'b (cons 'c nil)))))

Результат:

(A B C)(AB . CD)(NIL A B C)((A B C))(1)(1 2)(1 2 3)(A B C)A(B C) 

  • Функция LIST – создает список из элементов. Она возвращает в качестве своего значения список из значений аргументов. Количество аргументов произвольно.

Функция

Описание

car

Принимает список в качестве аргумента и возвращает его первый элемент

cdr

Принимает список в качестве аргумента и возвращает список без первого элемента

cons

Принимает два аргумента, элемент и список, и возвращает список с элементом, вставленным в первое место

list

Принимает любое количество аргументов и возвращает список с аргументами в качестве элементов списка.

append

Объединяет два или более списка в один.

last

Принимает список и возвращает список, содержащий последний элемент.

member

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

reverse

Принимает список и возвращает список с верхними элементами в обратном порядке.

Примеры

(write (list 1 2))

(write (list 'a 'b))

(write (list 1 nil))

(write (list 1 2 3))

(write (list 'a 'b 'c))

(write (list 3 4 'a (car '(b . c)) (* 4 -2)))

(write (list (list 'a 'b) (list 'c 'd 'e)))

Результат

(1 2)

(A B)

(1 NIL)

(1 2 3)

(A B C)

(3 4 A B -8)

((A B) (C D E))

  • Предикаты ATOM, ЕО, EOL, EQUAL.

Предикат – функция, которая определяет, обладает ли аргумент определенным свойством, и возвращает в качестве значения NIL или Т.

  • Предикат АТОМ - проверяет, является ли аргумент атомом:

(ATOM s - выражение)

Значением вызова АТОМ будет Т, если аргументом является атом, и NIL – в противном случае.

(АТОМ ‘а)  Т

(АТОМ ‘(а b с))  NIL

(АТОМ NIL)  Т

(АТОМ ‘(NIL))  NIL

  • Предикат ЕО сравнивает два символа и возвращает значение Т, если они идентичны, в противном случае – NIL. С помощью EQ сравнивают только символы или константы Т и NIL.

(EQ ‘a ‘b)  NIL

(EQ ‘a (CAR ‘(a b с)))  T

(EQ NIL 0)  T

  • Предикат EOL работает так же как и EQ, но дополнительно позволяет сравнивать однотипные числа.

(EQL 2 2)  Т

(EQL 2.0 2.0)  Т

(EQL 2 2.0)  NIL

Для сравнения чисел различных типов используют предикат «=». Значением предиката «=» является Т в случае равенства чисел независимо от их типов и внешнего вида записи.

(= 2 2.0)  Т

  • Предикат EQUAL проверяет идентичность записей. Он работает как EQL, но дополнительно проверяет одинаковость двух списков. Если внешняя структура двух лнсповскнх объектов одинакова, то результатом EQUAL будет Т.

(EQUAL ‘а ‘а)  Т

(EQUAL ‘(а b с) ‘(а b с))  Т

(EQUAL ‘(а b с) ‘(CONS ‘а ‘(Ь с)))  Т

(EQUAL 1.0 1)  NIL

  • Функция NULL проверяет на пустой список.

(NULL ‘()) Т