Функциональный язык программирования.

Проекты участника antol. Геометрия. Смысл. Язык.

Модератор: antol

Ответить
Аватара пользователя
antol
Администратор форума
Сообщения: 808
Зарегистрирован: Пт окт 27, 2006 12:32

Функциональный язык программирования.

Сообщение antol »

Феодор Пи. "Механизм функционирования языка программирования."


Функциональные языки программирования.

Языки программирования интересны тем, что на их основе строятся целостные работающие системы программирования, имеющие практические материальные результаты в наблюдаемом мире.

В Новый год я приобрел книжку "Изучаем HASKELL", современного языка программирования относящегося к семейству функциональных языков программирования, как ML, Lisp, Scala, Clojure и могу отследить концепцию построения языка.
"Основной отличительной чертой функционального программирования является возможность работы с функциями так же, как с любыми другими данными имеющимися в программе."

Здесь я предполагаю изложить мое представление механизма функционирования языка программирования и мне хотелось бы услышать в чем конкретно заключаются слабости и сильные стороны моего подхода.

Хотя я и не имею опыта программирования на языках типа Lisp, тем не менее с концепциями построения языков с нуля знаком.


Сущности, имеющие количественные и качественные свойства.

По-моему, в основании языка (хаски) лежит утверждение:
- существуют символы;

При уточнении вопроса, что собой представляют символ и символы приходим к утверждению, что символы являются экземплярами некоторого изначально заданного шаблонного набора, именуемого алфавитом.
Символы в алфавите имеют уникальное количественное свойство, которое задает очередность следования символов в шаблонном наборе алфавита.
Это количественное свойство символа в алфавите (в реализации языка) именуется кодом символа. Все символы в алфавите имеют еще одно общее для всех символов алфавита количественное свойство именуемое длиной кода.

И так:
- символы имеют количественные свойства: (по крайней мере) одно общее, присущее всем символам алфавита и одно уникальное для каждого символа из алфавита.

Далее. Следует предполагать, что символы алфавита обладают также и качественными свойствами. По аналогии с количеством, символы должны обладать по крайней мере одним общим качественным свойством и одним уникальным качественным свойством для каждого символа из алфавита.
- символы имеют качественные свойства: (по крайней мере) одно общее, присущее всем символам алфавита и одно уникальное для каждого символа из алфавита.

С вариантами кандидатами именоваться качественными свойствами символов проблемы, по-моему, нет.
Общим качественным свойством присущим всем символам является способность образовывать упорядоченные цепочки из символов экземпляров шаблонного набора. Собственно, алфавит является примером такой упорядоченной цепочки, в котором все символы представлены единственными экземплярами и упорядочены по значению их уникального количественного свойства.
Цепочки из символов в языке именуются также строками и/или списками, являющиеся синонимами используемого мною термина "цепочка".
- возможно создавать произвольные цепочки из символов экземпляров базового алфавита;


Процесс вычисления является реализацией качества.

Уникальное качественное свойство символа есть его функциональность, собственно существование которой и позволяет осуществлять процесс вычисления, задавая первым символом цепочки способ свертки всех следующих за первым символом оставшихся символов цепочки.
Используется единственная схема реализации функциональности - это что делать с первым элементом списка (головой списка) и что делать с оставшейся частью списка (хвостом списка).
Вообще-то, выбор функциональности задается не первым элементом (головой) списка, а задается через имя функции предшествующее списку. Это имя, представляющее собой уникальную цепочку символов алфавита, и есть расширение заложенной в реализацию языка функциональности символов алфавита. Особенность обработки первого и всех последующих элементов списка является реализацией процесса вычисления (свертки) через рекурсивную схему.
- процесс вычисления представляет собой переход цепочки символов в другую цепочку символов;
Примером преобразования цепочки символов является и алфавит, переводящий последовательность символов в ту же самую последовательность символов.

Кроме описанных принципов: конечности алфавита и наличия у символов количественных и качественных свойств, возможности строить цепочки, в реализации языка используется еще несколько возможностей расширяющих применение.
Это, например, принцип рекурсии, позволяющий в качестве символов цепочек использовать составные символы, являющиеся цепочками символов.
Также очень важным является использование совместно с основным алфавитом символов других, более коротких специализированных алфавитов, имеющих собственную уникальную функциональность.
Это алфавиты двоичной логики, состоящий из двух символов: true и false, позволяющий осуществлять сравнения и алфавит арифметики, реализующий систему исчисления и позволяющий получать численные оценки.
- существует алфавит двоичной логики;
- существует алфавит арифметики, реализующий систему исчисления;


Базовый алфавит.

Должно быть возможным сформулировать и пробовать доказать теорему, что количественные свойства символов алфавитов степени двойки больших единицы могут быть построены на базисе алфавита двоичной логики.
Но вопрос каким образом при этом порождаются качественные свойства символов алфавита более нетривиален. Хотя, возможно, для небольших количеств решается однозначно.(?)

Можно, например, посмотреть на набор функциональностей заложенный разработчиками языка хаски. Список изначальных функциональностей следующий: создание пустого списка; добавление элемента в хвост существующего списка; проверка списка на пустоту; получение головы списка; получение хвоста списка;
Алфавит русского языка начинается с буквы "А", функциональностью которой, по-моему мнению, является определение свойства дискретности.


Модель мира.

Существование символов предполагает также существование модели мира, сводящейся к утверждению:
- существует вместилище для символов;

Процесс программирования, по-моему, требует существование понятий программа и компьютер.
Программа, как некоторая изначально заданная извне (программистом) иерархия списков;
Должно имееться также некоторое вместилище, именуемое компьютер и в который помещается созданная программа;
В компьтере уже имеется иерархия списков именуемая библиотекой, с заложенной в язык встроенной функциональностью;
Среди списков программы имеется особенный список, назначенный первым для вычисления;

Процесс вычисления по программе завершается, например, итогом получения пустого или невычислимого списка, либо исчерпываются возможности компьтера, как вместилища списков, либо продолжается бесконечно во времени;
Собственно, последний вариант процесса вычисления особенно интересен, так как напоминает реально наблюдаемый мир, в котором становится возможным "забыть" с чего все началось.


Тем неменее, чтобы являться полноценным языком описания реально наблюдаемого мира необходимо изначально заложить в язык качественные и количественные свойства понятий пространства, времени, материи. Но таких свойств в функциональных языках программирования, к сожалению, нет.

Изображение


12 февраля 2015 г.

* * *
Аватара пользователя
A1exander
Модератор
Сообщения: 1033
Зарегистрирован: Вс мар 20, 2011 13:20
.: МУ

Re: Функциональный язык программирования.

Сообщение A1exander »

antol писал(а): Тем неменее, чтобы являться полноценным языком описания реально наблюдаемого мира необходимо изначально заложить в язык качественные и количественные свойства понятий пространства, времени, материи. Но таких свойств в функциональных языках программирования, к сожалению, нет.
Естественно нужны основы. Как и ребенку, который впитывает как губка в первые годы жизни информацию о мире. Все уже есть (по части знаний), надо только воплощать, деньги тратить на науки, а не на войны.

Человеки - биокомпьютеры наделенные чем-то типа "воли", которое отделяет его от просто функции обыденного компьютера. Принципы работы "воли" которых не известны. Все остальные моделирования робототехники, программ искусственного разума -есть создание подобия человека в "неодушевленном теле" (железке). Т.е. скатываемые с человека технологии воплощаемые на другом низком технологическом уровне. Технологический уровень очень важен, он позволяет впихнуть до этого не впихиваемое.
Принципы Языка берутся те же, а тип адаптирования его под среду (механизм, технологический уровень развития) различные.
Сначала человеки должны очистить свой язык (логос) программирования от лишних "лже-кодов", привести их к соответствию реально наблюдаемого мира. Потом уже и появиться язык для машин более усовершенствованный, т.к. будут известны новые инструменты для работы и оболочки (новые технологии) в которых будет это воплощено.

Вопрос интересный. Какой он язык будущего? :D Я думаю тем кому интересно, могут попробовать начать изучать языки народов мира, в них много чего (из отрывков или целых кодов) скрыто. Тем, кто считает свой язык единственным совершенным, не постигнут эти знания.
Аватара пользователя
antol
Администратор форума
Сообщения: 808
Зарегистрирован: Пт окт 27, 2006 12:32

Re: Функциональный язык программирования.

Сообщение antol »

A1exander писал(а):Все уже есть (по части знаний), надо только воплощать, деньги тратить на науки, а не на войны.
К сожалению, это не так. По части знаний базиса устройства мира - мало что есть. Физика находится в кризисе.

Вот ваши слова - Человеки - биокомпьютеры наделенные чем-то типа "воли", которое отделяет его от просто функции обыденного компьютера. Принципы работы "воли" которых не известны.
Копирование с человека это лишь один из множества путей поиска, но и здесь существенных упехов в понимании механизмов функционирования наблюдаемого нами мира нет.
Ответить

Вернуться в «Моделирование Мира людей»