[Закрыть]
 
popoff.donetsk.ua
Нет злых людей в этом мире, есть только страдающие. /Лиз Бурбо/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Клуппы Yato - ДонНТУ - Функциональное и логическое программирование - Вопросы и ответы - Программа на Лиспе
Я это делаю
Персональное меню
Голосование
Клуппы Yato Постоянный адрес этого вопроса
Ваш возраст (не обязательно):

Введите целое число от 3 до 99.
Почему? (не обязательно):
Другие вопросы
Поиск по сайту
Реклама
Программное обеспечение любой сложности
koins.com.ua
Статистика

Программа на Лиспе

Постоянный адрес статьи
Что такое S-выражение?
  • Это именованный список.

  • Это система атомов.

  • Это стандартная единица операторов в LISP

    В Лиспе не используется термин «оператор». Там только функции.

    Но фраза «стандартная единица функций в Лиспе» - тоже не имеет смысла.

S-выражение. Пример.
  • (2 3 (5 2)) - содержит в себе 2 атома и 3 символа

    Слово «символ» может применяться только при рассмотрении содержимого атомов. Например, об атомах можно говорить, что они символьные, если они содержат в себе нечисловые символы или они числовые, если они содержат в себе только числовые символы.

Функция atom. Чем она является?
  • Предикат

  • Атом

    Атом - это один из видов S-выражения, но не функция.

  • Селектор

  • Конструктор

  • Квантор

  • Элемент списка

    Это данное. Функция - это программа, но не данное.

  • T или nil

    Это данное. Функция - это программа, но не данное.

  • True или False

    Это данное. Функция - это программа, но не данное.

  • Истина или Ложь

    Это данное. Функция - это программа, но не данное.

Функция atom. Семантика.
  • Проверяет, является ли элемент атомным

    Слово «элемент» можно применять применительно к спискам. Предикат atom может применяться и без списков.

    «Атомный» - неправильное название термина.

  • Эта функция существует для выделения атома из массива.

    В Лиспе не используется термин «массив».

  • Эта функция существует для выделения атома из списка.

    Не известно значение термина «выделить».

  • Проверяет, является ли заданный аргумент элементом списка. Возвращает T, если аргумент - это элемент списка и nil, если аргумент - это список.

    Проверку «является ли Х элементом списка» можно осуществить только зная сам список. У функции atom - только один аргумент, в качестве которого можно передать либо только этот элемент, либо только этот список. Поэтому, такую проверку никак не получится выполнить.

    Неправильное понимание термина «элемент списка».

  • Функция atom возвращает true или false.

    Неправильное понимание термина «семантика».

    Возвращаемое значение (здесь оно указано не правильно) не является семантикой.

Функция atom. Тип.
  • atom: S-выражение -> true|false

    Логический тип данных в Лиспе обозначается другими атомами.

Функция car. Чем она является?
  • Предикат

  • Атом

  • Селектор

  • Конструктор

  • Квантор

Функция car. Семантика.
  • Взять вершину массива

    В Лиспе не используется термин «массив».

Функция car. Пример.
  • $ (car (a b c))
    a

    В примере существует вызов функции с неизвестным именем.

Функция cdr. Семантика.
  • Удалить вершину массива

    В Лиспе не используется термин «массив».

  • Функция cdr возвращает указатель на хвост.

    В Лиспе нет указателей.

Функция cdr. Пример.
  • $ (cdr (a b c))
    (b c)

    В примере существует вызов функции с неизвестным именем.

Функция cons. Семантика.
  • Соединяет списки

Функция cons. Тип.
  • cons: S-выражение х S-выражение -> список

Функция cons. Пример.
  • $ (cons (a b c) (c b a))
    (a b c c b a)

    В примере существует вызов функции с неизвестным именем.

  • $ (car '(a b c d))
    a
    $ (cons (e f g))
    (a e f g)

    В примере существует вызов функции с неизвестным именем.

    Неправильный синтаксис функции cons. Передан один аргумент вместо двух.

    Во втором вызове - дополнительный атом «а» не имеет никакого отношения к первому вызову. Поэтому, по сути, этот атом взялся из ниоткуда.

  • $ (cons (2 4) 3)
    ((2 4) 3)

    Несоответствие аргументов типу функции cons.

    В примере существует вызов функции с неизвестным именем.

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

Функция eq. Семантика.
  • Сравнение символьных переменных (посимвольно)

    Неправильное понимание термина «переменная».

    Ни в одном языке программирования нельзя сравнивать переменные. Можно сравнивать только значения.

Функция eq. Синтаксис.
  • (eq x1 x2 ... xn)

Функция eql. Семантика.
  • Эта функция сравнивает типы.

Функция eql. Синтаксис.
  • (eql x1 x2 ... xn)

Функция quote. Семантика.
  • Запрещает вычисление предыдущего списка

  • Блокировку никогда не имеет смысла применять к атомам.

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

Функция setq. Семантика.
  • Передаёт имя выражению (списку)

  • Эта функция предназначена для именования списков.

  • Записывает результат вычисления в константу. При этом, в отличие от set, сама переменная не вычисляется.

  • Эта функция существует для установления значений.

Функция setq. Тип.
  • setq: список х S-выражение -> S-выражение

  • setq: список х ... -> S-выражение

Функция setq. Пример.
  • (setq (a 4))

    Функция setq имеет два аргумента, а в этом примере указан только один аргумент.

  • В программе подчеркиваю строчку:
    (setq P (list 1 2))
    Предложите другие способы записи этого же списка.

    Ответы:
    (cons P (1 2))
    (atom '(P (1 2)))

Арифметика в Лиспе. Синтаксис.
  • (+ v1 v2)

Функции сравнения на равенство
  • =

  • >=

  • <=

  • <

  • >

  • eq

  • eql

  • equal

  • eqal

  • equl

  • eval

  • evl

  • lve

Функции >, < =. Синтаксис.
  • (> x1 x2 ... xn)

  • (< x1 x2 ... xn)

  • (= x1 x2 ... xn)

Функции сравнения. Примеры.
  • ((условия) (вып_если_истина) (вып_если_ложь))

    В примере приведено нечто, похожее на синтаксис условного оператора (но тем не менее им не являющееся), но не пример применения функции сравнения.

Последняя модификация: 20.10.06 19:27