1. Иерархическая семантика.
Необходимость в иерархической семантике в принципе очевидна и связана не только с необходимостью вводить новые термины и понятия или желания иметь развивающийся язык. Более глубоким свойством развивающегося языка является возможность в новых терминах оперировать с уже существующими терминами и понятиями, т.е. возможность создавать метаязык. Именно это свойство позволяет избежать семантической замкнутости языка.
Наличие механизма введения новых терминов и понятий предполагает, во-первых, назначение имен этим терминам и понятием, и, во-вторых, использование этих имен для оперирования созданными понятиями. Вряд ли я сообщу что-то новое, если скажу, что обычно это делается последовательностью букв и знаками. Т.е. текстом.
Конструируя язык, обычно жалуются на недостаток знаков. Могу прибавить к этой проблеме недостаток слов. Одно и то же слово в обычном языке может иметь разный смысл в зависимости от контекста. Например, слово «Стул» может иметь значение какого-то конкретного существующего стула, а может указывать на класс или на объект которого нет, но должен быть, а может быть это просто такое слово, которое надо написать или проверить на правильность написания. И, наконец, самое убедительное выражено в пословице «сколько не говори «мед» во рту слаще не станет». Т.е. слово «мед» съесть нельзя, а мед можно.
Хотя проблема «недостатка слов» легко и красиво решена. Исходя из контекста, как правило, можно определить какой именно смысл имеет данное слово. Например, слово «дом» в фразе «Я вышел из дома…» явно объект. И мы догадываемся, что вопросы насчет свойств этого объекта (количество этажей, окон, подъездов или материала) имеют смысл. Однако применение того же слова в фразе «Каждый мужчина должен построить дом…» имеет значение класса. И уточнять количество этажей в данном случае не имеет смысла.
Совсем не будет неожиданно, что на вопрос – «что такое дом?» получим правильный ответ, что это существительное в обеих фразах. Здесь это слово рассматривается, не в том смысле, что оно обозначает, а как часть предложения. Т.е. анализируется фраза и слово «дом» выполняет какую-то роль в этой фразе.
Ну, и само собой можно рассматривать слово «дом» как текст. Или точнее совокупность букв «д», «о» и «м».
Здесь мы и обратим внимание на то, что написание и именование объектов их указаний или манипуляций с ними создает некую иерархию, которая отрывается от реального мира и начинает существовать отдельно. Собственно, появление неких понятий и их именование и составляет суть развития человечества. Потому изобретение слова «Стул» для первобытного человека было значительным шагом вперед от указания на этот объект пальцем и характерным мычанием на тему «стула». В момент изобретения этого слова были выделены характерные свойства общие для класса объектов «Стул», а это большая умственная работа, которой мы пользуемся легко и даже не замечаем этого. Как и таких слов как «Стол», «Кровать». И вот, еще озарение. Изобретено слово «Мебель» (Синтезирован новый класс с собственными свойствами). И в этот класс входит и «Кровать» и«Стул» и «Стол» и «Шкаф». И то, что это новый класс со своими свойствами (не всегда явно сформулированными) очевидно из фразы «Николай присутствовал на совещании в качестве мебели». И ведь ясно, какое из свойств класса «Мебель» имеется в виду.
Изобретение слова «Дифференциал» сыграло значительную роль в развитии математики, хотя его определение было известно сотни лет как «отношение приращения функции к приращению аргумента». А ведь придумано только слово! И зажило отдельной своей жизнью.
Здесь мы можем вернуться к первобытному человеку, который общается с помощью указания на вещи. Так вот задача в «придумывании» слова обозначающего предмет не просто назначение имени предмету и таким образом формируя «новое слово» (в таком контексте именование объекта аналогично нумерации). Новое слово формируется как слово обозначающее класс объектов, а затем с помощью указателей, предлогов, артиклей или из контекста осуществляется (при необходимости) конкретизация объекта. В этом свете неопределенные артикли английского языка определяют классы (a water), а указательные – объект (cup of water).
Но дело не только в этом. Часто применяемый прием доказательства нумерация слов алфавита справедлив только для первого (и абстрактного) этапа создания языка. Если считать что все объекты можно перечислить (пронумеровать, именовать), то в реальном языке дело обстоит не так. Появление новых слов (и применение старых) связано с возникновением нового семантического содержания включающего в себя предыдущий уровень семантики. А именно все предметы, на которые можно было бы указать как на стул вместо указания (или вместе с указанием) приобрели новый семантический смысл класса «Стул». Ведь этот класс содержит в себе и классы «Пень», «Камень на котором можно сидеть», «Табуретка» и т.д. Следующий по иерархии уровень класс «мебель». И еще выше класс «столярных изделий». Конечно, существует и прямое именование. Например, имена-фамилии, клички и вообще имена собственные, но это не делает погоды по большому счету.
Итак, интегрируя с помощью классов свои знания, создается «новый язык» (можно его назвать метаязык по отношению к старому) позволяющий рассуждать о терминах «старого языка». И «новые слова», конечно, можно пронумеровать (даже не смотря на то, что некоторые слова имеют несколько значений) только это будут слова нового языка. И, надеюсь, в этом новом языке нам не грозит проблема непротиворечивости и не полноты.
Можно считать такой подход развитием логических типов Рассела и продолжением идей Тарского о семантической концепции истины.
Сомнения в правомочности нумерации фраз языка вызывают еще две причины. Одна из них условности и относительности, которые являются одним из правил, по крайней мере, для индоевропейских языков. Так понятия связанные с объективизацией языка вводят понятия «Внутри», «Вне», «Слева» и т.д. приводят к тому, что одна и та же фраза может иметь разный смысл и быть для одного истинной, а для другого ложной. Например, «Нож лежит лева от тарелки» справедливо только для того, кто сидит перед тарелкой, а для того кто сидит напротив это утверждение ложно.
Такая же ситуация связана с объективизацией времени. Все фразы связанные с относительным указанием времени могут изменять свой смысл. А все вместе это приводит к полной каше, яркий пример, которой привел Карл Бюлер в «Теории языка». Цитирую «грустный, он просидел там весь вечер; он получил сегодня (вм.: в тот день) два печальных известия — он поехал в Рим; здесь (вм.: там) он прожил два дня — и сейчас уже вернулся». Что бы правильно понять данную фразу необходимо самому принять правильную позицию в пространстве и времени и изменять ее в ходе фразы.
2. Оформление текста.
Но отделить текст, от предмета анализа сравнительно легко, разделив все, что написано на текстовые константы, знаки и имена собственные соблюдая следующие предлагаемые правила.
1. Текстовые константы пишутся курсивом и черным цветом.
2. Применение в качестве текстовых констант знаков и слов не курсивом или отличающихся от черного цвета осуществляется выделением в текстовые скобки в начале и конце текстовой константы. “”
3. При необходимости использовать текстовые скобки в качестве текстовой константы этот знак берется в фигурные скобки. Это правило совершенно лишнее, если применять открывающие и закрывающие текстовые скобки.
4. Имена собственные (объекты, классы и типы) пишутся с большой буквы и выделяются цветом. Принадлежность объекта к классу можно выделить тремя первыми согласными из имени класса или типа. Классы и объекты одного цвета, но классы выделяются жирным шрифтом. Типы и значения одного цвета, типы выделяются жирным шрифтом.
5. Имена предикатов, функций, процедур и функторов пишутся с большой буквы и не выделяются цветом (черный цвет) не курсив.
6. Имена бесскобочных предикатов, функций, процедур и функторов могут содержать ссылку на знак, заменяющий данное имя.
7. Значения пишутся с маленькой буквы черным цветом не курсив.
8. Ключевые слова выделяются подчеркиванием.
9. Сокращения содержат более одной большой буквы и могут ссылаться на текст, объясняющий данное сокращение.
10. Имена собственные, а так же имена предикатов, функций, процедур и функторов могут дублироваться, объединяясь в массив.
11. Аббревиатура. Содержит более одной большой буквы.
12. Обозначение. Может содержать только большие буквы, цифры и соединительную черту.
Текстовые константы объединяются пробелом.
В формализованных языках, а тем более в языках с иерархической семантикой где допустимо вводить новые термины и понятия ситуация еще печальней. Здесь мы вообще можем называть, что хотим и как хотим, и ощущается недостаток слов. Вернее хотелось бы иметь содержательные имена, а не произвольную комбинацию букв. И здесь выбор не богатый, либо коверкать подходящее слово комбинируя его еще какими-то объяснениями типа Длина1 или СамаяБольшаяДлина, либо научиться отличать смысл не только по буквам.
Классическим решением этой проблемы всякие знаки перед (или после) именем понятия или объекта, которые доопределяют смысловое (а, следовательно, и конкретное) значение имени. Или использование скобок для уточнения значения текста. Кроме этого предлагаются различные стандарты, как например, имена целых чисел, что б начинались с буквы I. Или рекомендательные правила именования объектов разного класса. Например, имена кнопок, что б начинались Btn, а имена форм с Frm. Читать и писать программу, перегруженную специальными знаками не просто. Гораздо проще выделять лексемы цветом. Собственно это уже широко применяется в современных языках. Ключевые слова, идентификаторы, константы и многое другое выделяется цветом. Осталось самая малость, сделать выделение цветом не дополнительным удобством, а средством определения лексемы.
Таким образом, мы вполне можем доопределить одну и ту же лексему «New» как
New New: New= New New
Здесь, конечно, перебор, но вполне реальный.
Предлагаемые цвета.
New — Ключевое слово определяющее объект
New — Тип
New — Класс
New — Текст
New — Идентификатор наследует цвет класса или типа. В данном случае типа.
New — Зеленым цветом выделяется комментарий.
New — Ошибки
один – Значение
Add – Функтор сложения
Length- Свойство
Gray- Серые параметры
Обратим внимание, что правила 5 и 6 то, что написано черным цветом и не курсивом может быть заменено соответствующим значением или знаком как комбинация знаков. А именно:
Значение «одиннадцать» имеет значение 11, а предикат «More» можно заменить знаком «>».
В принципе такой подход не должен сильно осложнить работу программиста по редактированию программы. Весь текст можно писать одним шрифтом, и выделять комментарий знаком «’», транслятор сам раскрасит текст, и удалит знак комментария. Участие программиста понадобится при редактировании лексем воспринимаемых транслятором не однозначно на что и будет обращено его внимание мерцанием лексемы и подсказкой допустимых вариантов.
Кроме выделения цветом одинаковых лексем, лексемы можно объединять в массивы. Это тоже можно встретить в некоторых случаях. Вместо того что бы писать Fun1, Fun2 (что у нас нельзя делать так, как идентификатор состоит только из букв), мы можем писать Fun[1], Fun[2] и т.д.
3. Обращение к свойствам в языке Lada.
Вот обычная конструкция обращения к свойству класса. Где Ob – объект, а Length –свойство.
Ob.Length
Ob-понятное дело, идентификатор объекта, а что такое Length? Это идентификатор? Нет. Это константа? Может быть. Смотря, как реализован транслятор. Но, по сути, понятно, что это имя свойства. Тогда почему мы не пользуемся текстовой переменной или идентификатором для обращения к свойству на общих основаниях? Ведь это может значительно расширить возможности языка. Да и упрощает логику. Ответ есть. Делается так только потому, что так удобнее. Можно сделать подсказку из раскрывающего списка. А если ставить текстовую переменную, то будет выглядеть весьма коряво. Вот приблизительно так
Ob.”Length”
Но мы забываем возможности современных текстовых редакторов. Многие трансляторы выделяют лексемы цветом. Почему бы в нашем случае не поступить так же. И можно обращаться к свойству тремя способами, причем не нарушающими общие принципы и логику. Правда, при этом, мы должны иметь транслятор, различающий лексемы не только по тексту. Будем считать, что он у нас есть. Три способа обращения к свойству.
1. Идентификатором. Что не возможно в существующих языках, и что дает новые возможности.
Dim NamePropperty: String= Length
Ob. NamePropperty
2. Текстовой переменной. Что выглядит не очень симпатично, но допустимо, а иногда возможно и пригодится. Заметим, что у нас текстовая константа выделяется курсивом.
Ob.Length
3. Константой, которая подается из раскрывающегося списка мастером подсказки как готовая лексема и отличающаяся цветом от возможно такого же идентификатора. Что само по себе тоже новая возможность.
Ob.Length
Необходимость в иерархической семантике в принципе очевидна и связана не только с необходимостью вводить новые термины и понятия или желания иметь развивающийся язык. Более глубоким свойством развивающегося языка является возможность в новых терминах оперировать с уже существующими терминами и понятиями, т.е. возможность создавать метаязык. Именно это свойство позволяет избежать семантической замкнутости языка.
Наличие механизма введения новых терминов и понятий предполагает, во-первых, назначение имен этим терминам и понятием, и, во-вторых, использование этих имен для оперирования созданными понятиями. Вряд ли я сообщу что-то новое, если скажу, что обычно это делается последовательностью букв и знаками. Т.е. текстом.
Конструируя язык, обычно жалуются на недостаток знаков. Могу прибавить к этой проблеме недостаток слов. Одно и то же слово в обычном языке может иметь разный смысл в зависимости от контекста. Например, слово «Стул» может иметь значение какого-то конкретного существующего стула, а может указывать на класс или на объект которого нет, но должен быть, а может быть это просто такое слово, которое надо написать или проверить на правильность написания. И, наконец, самое убедительное выражено в пословице «сколько не говори «мед» во рту слаще не станет». Т.е. слово «мед» съесть нельзя, а мед можно.
Хотя проблема «недостатка слов» легко и красиво решена. Исходя из контекста, как правило, можно определить какой именно смысл имеет данное слово. Например, слово «дом» в фразе «Я вышел из дома…» явно объект. И мы догадываемся, что вопросы насчет свойств этого объекта (количество этажей, окон, подъездов или материала) имеют смысл. Однако применение того же слова в фразе «Каждый мужчина должен построить дом…» имеет значение класса. И уточнять количество этажей в данном случае не имеет смысла.
Совсем не будет неожиданно, что на вопрос – «что такое дом?» получим правильный ответ, что это существительное в обеих фразах. Здесь это слово рассматривается, не в том смысле, что оно обозначает, а как часть предложения. Т.е. анализируется фраза и слово «дом» выполняет какую-то роль в этой фразе.
Ну, и само собой можно рассматривать слово «дом» как текст. Или точнее совокупность букв «д», «о» и «м».
Здесь мы и обратим внимание на то, что написание и именование объектов их указаний или манипуляций с ними создает некую иерархию, которая отрывается от реального мира и начинает существовать отдельно. Собственно, появление неких понятий и их именование и составляет суть развития человечества. Потому изобретение слова «Стул» для первобытного человека было значительным шагом вперед от указания на этот объект пальцем и характерным мычанием на тему «стула». В момент изобретения этого слова были выделены характерные свойства общие для класса объектов «Стул», а это большая умственная работа, которой мы пользуемся легко и даже не замечаем этого. Как и таких слов как «Стол», «Кровать». И вот, еще озарение. Изобретено слово «Мебель» (Синтезирован новый класс с собственными свойствами). И в этот класс входит и «Кровать» и«Стул» и «Стол» и «Шкаф». И то, что это новый класс со своими свойствами (не всегда явно сформулированными) очевидно из фразы «Николай присутствовал на совещании в качестве мебели». И ведь ясно, какое из свойств класса «Мебель» имеется в виду.
Изобретение слова «Дифференциал» сыграло значительную роль в развитии математики, хотя его определение было известно сотни лет как «отношение приращения функции к приращению аргумента». А ведь придумано только слово! И зажило отдельной своей жизнью.
Здесь мы можем вернуться к первобытному человеку, который общается с помощью указания на вещи. Так вот задача в «придумывании» слова обозначающего предмет не просто назначение имени предмету и таким образом формируя «новое слово» (в таком контексте именование объекта аналогично нумерации). Новое слово формируется как слово обозначающее класс объектов, а затем с помощью указателей, предлогов, артиклей или из контекста осуществляется (при необходимости) конкретизация объекта. В этом свете неопределенные артикли английского языка определяют классы (a water), а указательные – объект (cup of water).
Но дело не только в этом. Часто применяемый прием доказательства нумерация слов алфавита справедлив только для первого (и абстрактного) этапа создания языка. Если считать что все объекты можно перечислить (пронумеровать, именовать), то в реальном языке дело обстоит не так. Появление новых слов (и применение старых) связано с возникновением нового семантического содержания включающего в себя предыдущий уровень семантики. А именно все предметы, на которые можно было бы указать как на стул вместо указания (или вместе с указанием) приобрели новый семантический смысл класса «Стул». Ведь этот класс содержит в себе и классы «Пень», «Камень на котором можно сидеть», «Табуретка» и т.д. Следующий по иерархии уровень класс «мебель». И еще выше класс «столярных изделий». Конечно, существует и прямое именование. Например, имена-фамилии, клички и вообще имена собственные, но это не делает погоды по большому счету.
Итак, интегрируя с помощью классов свои знания, создается «новый язык» (можно его назвать метаязык по отношению к старому) позволяющий рассуждать о терминах «старого языка». И «новые слова», конечно, можно пронумеровать (даже не смотря на то, что некоторые слова имеют несколько значений) только это будут слова нового языка. И, надеюсь, в этом новом языке нам не грозит проблема непротиворечивости и не полноты.
Можно считать такой подход развитием логических типов Рассела и продолжением идей Тарского о семантической концепции истины.
Сомнения в правомочности нумерации фраз языка вызывают еще две причины. Одна из них условности и относительности, которые являются одним из правил, по крайней мере, для индоевропейских языков. Так понятия связанные с объективизацией языка вводят понятия «Внутри», «Вне», «Слева» и т.д. приводят к тому, что одна и та же фраза может иметь разный смысл и быть для одного истинной, а для другого ложной. Например, «Нож лежит лева от тарелки» справедливо только для того, кто сидит перед тарелкой, а для того кто сидит напротив это утверждение ложно.
Такая же ситуация связана с объективизацией времени. Все фразы связанные с относительным указанием времени могут изменять свой смысл. А все вместе это приводит к полной каше, яркий пример, которой привел Карл Бюлер в «Теории языка». Цитирую «грустный, он просидел там весь вечер; он получил сегодня (вм.: в тот день) два печальных известия — он поехал в Рим; здесь (вм.: там) он прожил два дня — и сейчас уже вернулся». Что бы правильно понять данную фразу необходимо самому принять правильную позицию в пространстве и времени и изменять ее в ходе фразы.
2. Оформление текста.
Но отделить текст, от предмета анализа сравнительно легко, разделив все, что написано на текстовые константы, знаки и имена собственные соблюдая следующие предлагаемые правила.
1. Текстовые константы пишутся курсивом и черным цветом.
2. Применение в качестве текстовых констант знаков и слов не курсивом или отличающихся от черного цвета осуществляется выделением в текстовые скобки в начале и конце текстовой константы. “”
3. При необходимости использовать текстовые скобки в качестве текстовой константы этот знак берется в фигурные скобки. Это правило совершенно лишнее, если применять открывающие и закрывающие текстовые скобки.
4. Имена собственные (объекты, классы и типы) пишутся с большой буквы и выделяются цветом. Принадлежность объекта к классу можно выделить тремя первыми согласными из имени класса или типа. Классы и объекты одного цвета, но классы выделяются жирным шрифтом. Типы и значения одного цвета, типы выделяются жирным шрифтом.
5. Имена предикатов, функций, процедур и функторов пишутся с большой буквы и не выделяются цветом (черный цвет) не курсив.
6. Имена бесскобочных предикатов, функций, процедур и функторов могут содержать ссылку на знак, заменяющий данное имя.
7. Значения пишутся с маленькой буквы черным цветом не курсив.
8. Ключевые слова выделяются подчеркиванием.
9. Сокращения содержат более одной большой буквы и могут ссылаться на текст, объясняющий данное сокращение.
10. Имена собственные, а так же имена предикатов, функций, процедур и функторов могут дублироваться, объединяясь в массив.
11. Аббревиатура. Содержит более одной большой буквы.
12. Обозначение. Может содержать только большие буквы, цифры и соединительную черту.
Текстовые константы объединяются пробелом.
В формализованных языках, а тем более в языках с иерархической семантикой где допустимо вводить новые термины и понятия ситуация еще печальней. Здесь мы вообще можем называть, что хотим и как хотим, и ощущается недостаток слов. Вернее хотелось бы иметь содержательные имена, а не произвольную комбинацию букв. И здесь выбор не богатый, либо коверкать подходящее слово комбинируя его еще какими-то объяснениями типа Длина1 или СамаяБольшаяДлина, либо научиться отличать смысл не только по буквам.
Классическим решением этой проблемы всякие знаки перед (или после) именем понятия или объекта, которые доопределяют смысловое (а, следовательно, и конкретное) значение имени. Или использование скобок для уточнения значения текста. Кроме этого предлагаются различные стандарты, как например, имена целых чисел, что б начинались с буквы I. Или рекомендательные правила именования объектов разного класса. Например, имена кнопок, что б начинались Btn, а имена форм с Frm. Читать и писать программу, перегруженную специальными знаками не просто. Гораздо проще выделять лексемы цветом. Собственно это уже широко применяется в современных языках. Ключевые слова, идентификаторы, константы и многое другое выделяется цветом. Осталось самая малость, сделать выделение цветом не дополнительным удобством, а средством определения лексемы.
Таким образом, мы вполне можем доопределить одну и ту же лексему «New» как
New New: New= New New
Здесь, конечно, перебор, но вполне реальный.
Предлагаемые цвета.
New — Ключевое слово определяющее объект
New — Тип
New — Класс
New — Текст
New — Идентификатор наследует цвет класса или типа. В данном случае типа.
New — Зеленым цветом выделяется комментарий.
New — Ошибки
один – Значение
Add – Функтор сложения
Length- Свойство
Gray- Серые параметры
Обратим внимание, что правила 5 и 6 то, что написано черным цветом и не курсивом может быть заменено соответствующим значением или знаком как комбинация знаков. А именно:
Значение «одиннадцать» имеет значение 11, а предикат «More» можно заменить знаком «>».
В принципе такой подход не должен сильно осложнить работу программиста по редактированию программы. Весь текст можно писать одним шрифтом, и выделять комментарий знаком «’», транслятор сам раскрасит текст, и удалит знак комментария. Участие программиста понадобится при редактировании лексем воспринимаемых транслятором не однозначно на что и будет обращено его внимание мерцанием лексемы и подсказкой допустимых вариантов.
Кроме выделения цветом одинаковых лексем, лексемы можно объединять в массивы. Это тоже можно встретить в некоторых случаях. Вместо того что бы писать Fun1, Fun2 (что у нас нельзя делать так, как идентификатор состоит только из букв), мы можем писать Fun[1], Fun[2] и т.д.
3. Обращение к свойствам в языке Lada.
Вот обычная конструкция обращения к свойству класса. Где Ob – объект, а Length –свойство.
Ob.Length
Ob-понятное дело, идентификатор объекта, а что такое Length? Это идентификатор? Нет. Это константа? Может быть. Смотря, как реализован транслятор. Но, по сути, понятно, что это имя свойства. Тогда почему мы не пользуемся текстовой переменной или идентификатором для обращения к свойству на общих основаниях? Ведь это может значительно расширить возможности языка. Да и упрощает логику. Ответ есть. Делается так только потому, что так удобнее. Можно сделать подсказку из раскрывающего списка. А если ставить текстовую переменную, то будет выглядеть весьма коряво. Вот приблизительно так
Ob.”Length”
Но мы забываем возможности современных текстовых редакторов. Многие трансляторы выделяют лексемы цветом. Почему бы в нашем случае не поступить так же. И можно обращаться к свойству тремя способами, причем не нарушающими общие принципы и логику. Правда, при этом, мы должны иметь транслятор, различающий лексемы не только по тексту. Будем считать, что он у нас есть. Три способа обращения к свойству.
1. Идентификатором. Что не возможно в существующих языках, и что дает новые возможности.
Dim NamePropperty: String= Length
Ob. NamePropperty
2. Текстовой переменной. Что выглядит не очень симпатично, но допустимо, а иногда возможно и пригодится. Заметим, что у нас текстовая константа выделяется курсивом.
Ob.Length
3. Константой, которая подается из раскрывающегося списка мастером подсказки как готовая лексема и отличающаяся цветом от возможно такого же идентификатора. Что само по себе тоже новая возможность.
Ob.Length