Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота 1_укр.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
53 Кб
Скачать
☆
  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 '())( Т