kojura
Описание
Импорт c: https://github.com/pbuk2/kojura Этот проект является экспериментом и у автора нет никаких планов на него. Диагностика и контроль семантики очень слабые и бажные. Кроме того, синтаксис и семантика в Кожуре оригинальные и знание языков семейства Lisp вам не поможет.
Языки
- 1C Enterprise100%
kojura

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