Этот проект является экспериментом и у автора нет никаких планов на него. Диагностика и контроль семантики очень слабые и бажные. Кроме того, синтаксис и семантика в Кожуре оригинальные и знание языков семейства Lisp вам не поможет. Автор сам не понимает что происходит и как это работает. От скобок текут слезы, а отладка программ на Кожуре доставляет боль. Хвостовая рекурсия не оптимизируется и это позволяет уронить платформу одной строчкой кода. Наличие функций высшего порядка и Лямбд возволяет писать работающий код, который через пять минут не способен понять даже автор.
- Программа - это последовательность выражений
- Выражение - это либо число, либо строка, либо идентификатор, либо вызов функции
- Число - это последовательность цифр, которая может включать десятичную точку
- Строка - это последовательность символов в двойных кавычках
- Идентификатор - это последовательность любых символов из разрешенных, если первый символ не цифра и не двойная кавычка
- Разрешенные символы -
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_=+-*/<>%!?* 0123456789абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
- Вызов функции - это последовательность выражений в круглых скобках
+
- складывает первый аргумент с остальными по порядку-
- вычитает из первого аргумента остальные по порядку; если аргумент один, то работает как унарный минус*
- умножает первый аргумент на остальные по порядку/
- делит первый аргумент на остальные по порядку%
- берет остаток от деления первого аргумента на остальные по порядку=
- возвращаетИстина
если все аргументы равны, иначеЛожь
(работает лениво)>
- возвращаетИстина
если во всех парах аргументов левый больше правого, иначеЛожь
(работает лениво)<
- возвращаетИстина
если во всех парах аргументов левый меньше правого, иначеЛожь
(работает лениво)>=
- возвращаетИстина
если во всех парах аргументов левый больше правого или равен ему, иначеЛожь
(работает лениво)<=
- возвращаетИстина
если во всех парах аргументов левый меньше правого или равен ему, иначеЛожь
(работает лениво)<>
- возвращаетИстина
если во всех парах аргументов левый не равен правому, иначеЛожь
(работает лениво)И
- возвращаетИстина
если все аргументы равныИстина
, иначеЛожь
(работает лениво)Или
- возвращаетИстина
если хотя бы один аргумент равенИстина
, иначеЛожь
(работает лениво)Не
- возвращаетИстина
если все аргументы равныЛожь
(работает лениво)Функция
- создает новую функцию и помещает в текущее окружение- форма 1:
(Функция ИмяФункции ИмяПараметра {ПромежуточноеВыражение} Выражение)
- форма 2:
(Функция ИмяФункции (ИмяПараметра {ИмяПараметра}) {ПромежуточноеВыражение} Выражение)
- форма 1:
Если
- возвращает одно из двух выражений по условию (работает лениво)- форма:
(Если БулевоВыражение ВыражениеЕслиИстина ВыражениеЕслиЛожь)
- форма:
Выбор
- возвращает одно из выражений по порядку по условию (работает лениво)- форма
(Выбор ВыражениеКогда ВыражениеТогда {ВыражениеКогда ВыражениеТогда})
- форма
Пусть
- создает неизменяемую переменную и помещает ее в текущее окружение- форма:
(Пусть ИмяПеременной Выражение)
- форма:
Лямбда
- создает анонимную функцию- форма 1:
(Функция ИмяПараметра {ПромежуточноеВыражение} Выражение)
- форма 2:
(Функция (ИмяПараметра {ИмяПараметра}) {ПромежуточноеВыражение} Выражение)
- форма 1:
Сообщить
- выводит аргументы в панель сообщений (консоль)- форма:
(Сообщить Выражение {Выражение})
- форма:
Список
- создает список- форма:
(Список Выражение {Выражение})
- форма:
Морда
- получает значение первого элемента списка- форма:
(Морда Выражение)
- форма:
Хвост
- создает новый список из данного исключением первого элемента- форма:
(Хвост Выражение)
- форма:
Истина
- возвращаетИстина
Ложь
- возвращаетЛожь
Неопределено
- возвращаетНеопределено