Эта статья опять будет без отсылок к Delphi.
Да простят меня Borland и Embarcadero.
Вот тут - http://18delphi.blogspot.ru/2013/11/gui_9015.html я описал использование слова WORDWORKER.
На самом деле - использование этого слова - позволяет ЗНАЧИТЕЛЬНО влиять на грамматику языка.
Это слово и подобные ему позволяют формировать "свой DSL" из аксиоматики заданной в коде скриптовой машины на Delphi (всё же одна отсылка есть)
Приведу ещё один пример.
Давайте узнаем входит ли число в заданный интервал.
Например между 2 и 10.
В нашем языке конечно есть конструкция if и всякие разные операторы сравнения. Как они "устроены внутри" - я КОНЕЧНО ЖЕ позже расскажу.
А пока - вернёмся к нашей задаче.
На "хардкорном" уровне поставленная выше задача решается так:
По-русски? Да что-то - СОВСЕМ не по-русски. Да и "обратная польская запись". Не все её любят.
Поработаем над этим.
Ещё один "анонс" - у нас есть не только слово WORDWORKER, но и WORDWORKERFUNCTION. Название "то ещё". Но учитывая наличие слова WordAlias - любой желающий может придумать ему подходящий синоним и пользоваться им.
WORDWORKERFUNCTION отличается от WORDWORKER тем, что не только умеет работать с "параметрами слева" или "параметрами справа", но и возвращать значение.
Попробуем описать слова "между" и "строго между".
Выглядит это так:
Пример использования:
Ну и ещё есть "синтаксический сахар", что а_без_пробелов равно "а_без_пробелов" поэтому для "единообразия можно писать и так:
Ещё хотел написать о логических операторах.
Но по-моему - "и так много".
В общем - в следующей серии".
Сейчас я её напишу.
Следующая серия вот - http://18delphi.blogspot.com/2013/11/gui-3.html
Да простят меня Borland и Embarcadero.
Вот тут - http://18delphi.blogspot.ru/2013/11/gui_9015.html я описал использование слова WORDWORKER.
На самом деле - использование этого слова - позволяет ЗНАЧИТЕЛЬНО влиять на грамматику языка.
Это слово и подобные ему позволяют формировать "свой DSL" из аксиоматики заданной в коде скриптовой машины на Delphi (всё же одна отсылка есть)
Приведу ещё один пример.
Давайте узнаем входит ли число в заданный интервал.
Например между 2 и 10.
В нашем языке конечно есть конструкция if и всякие разные операторы сравнения. Как они "устроены внутри" - я КОНЕЧНО ЖЕ позже расскажу.
А пока - вернёмся к нашей задаче.
На "хардкорном" уровне поставленная выше задача решается так:
X 2 >= IF ( X 10 <= IF true ELSE false ) ELSE false
По-русски? Да что-то - СОВСЕМ не по-русски. Да и "обратная польская запись". Не все её любят.
Поработаем над этим.
Ещё один "анонс" - у нас есть не только слово WORDWORKER, но и WORDWORKERFUNCTION. Название "то ещё". Но учитывая наличие слова WordAlias - любой желающий может придумать ему подходящий синоним и пользоваться им.
WORDWORKERFUNCTION отличается от WORDWORKER тем, что не только умеет работать с "параметрами слева" или "параметрами справа", но и возвращать значение.
Попробуем описать слова "между" и "строго между".
Выглядит это так:
BOOLEAN WORDWORKERFUNCTION между INTEGER IN anX INTEGER VAR "Нижняя граница" INTEGER VAR "Верхняя граница" WordToWork // - слово справа, а на самом деле может быть "последовательность слов", за счёт оператора "скобки" (о нём я расскажу позже) DO // - вычисляем переданное слово =: "Верхняя граница" // - снимаем со стека верхнюю границу =: "Нижняя граница" // - снимаем со стека нижнюю границу anX "Нижняя граница" >= IF ( anX "Верхняя граница" <= IF true =: Result ELSE false =: Result ) ELSE false =: Result END //между BOOLEAN WORDWORKERFUNCTION "строго между" INTEGER IN anX INTEGER VAR "Нижняя граница" INTEGER VAR "Верхняя граница" WordToWork // - слово справа, а на самом деле может быть "последовательность слов", за счёт оператора "скобки" (о нём я расскажу позже) DO // - вычисляем переданное слово =: "Верхняя граница" // - снимаем со стека верхнюю границу =: "Нижняя граница" // - снимаем со стека нижнюю границу anX "Нижняя граница" > IF ( anX "Верхняя граница" < IF true =: Result ELSE false =: Result ) ELSE false =: Result END //между
Пример использования:
3 между ( 2 5 ) // true 0 между ( 2 5 ) // false 2 между ( 2 5 ) // true 5 между ( 2 5 ) // true 10 между ( 2 5 ) // false 3 "строго между" ( 2 5 ) // true 2 "строго между" ( 2 5 ) // false 5 "строго между" ( 2 5 ) // false 0 "строго между" ( 2 5 ) // false 10 "строго между" ( 2 5 ) // false
Ну и ещё есть "синтаксический сахар", что а_без_пробелов равно "а_без_пробелов" поэтому для "единообразия можно писать и так:
3 "между" ( 2 5 ) // true 0 "между" ( 2 5 ) // false 2 "между" ( 2 5 ) // true 5 "между" ( 2 5 ) // true 10 "между" ( 2 5 ) // false 3 "строго между" ( 2 5 ) // true 2 "строго между" ( 2 5 ) // false 5 "строго между" ( 2 5 ) // false 0 "строго между" ( 2 5 ) // false 10 "строго между" ( 2 5 ) // false
Ещё хотел написать о логических операторах.
Но по-моему - "и так много".
В общем - в следующей серии".
Сейчас я её напишу.
Следующая серия вот - http://18delphi.blogspot.com/2013/11/gui-3.html
Комментариев нет:
Отправить комментарий