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