Перфо.NET — различия между версиями

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
м (Описание языка:)
м (См. также)
 
(не показано 20 промежуточных версий 3 участников)
Строка 1: Строка 1:
Перфо - интерпретатор языка программирования Перфо - русскоязычный вариант языка похожего на [[Scheme]], унифицированный с языком [[Перфолента]] / 1С /[[OneScript]]
+
Перфо - интерпретируемый функциональный язык программирования - русскоязычный вариант языка похожего на [[Scheme]] ([[Lisp]]), унифицированный с языком [[Перфолента]] / 1С /[[OneScript]]. Полностью написан на языке [[Перфолента.NET]] также основан на платформе NET Framework. Пока существует Бетта-версия для внутреннего тестирования участников телеграмм-канала.
  
 +
* Расширение .perfo (.перфо). В качестве среды разработки используется среда [[Перфолента.NET]].
 +
* Последняя версия Перфо 0.49.1 от 29.11.2020
 +
* В версии 0.49.1 реализовано частичное применение функций и добавлен оператор [[Препроцессор языка Перфо|препроцессора]] #'''ВключитьФайл''' - что позволяет создавать библиотеки
 +
* В версии 0.48.1 реализован оператор map, частичное применение функций (каррирование, https://habr.com/ru/post/518692/)
 +
* в версии 0.47 реализован оператор Список (list)
 +
 +
* [[Перфо. Что Сделать. Известные Ошибки]]
 
==  Описание языка:  ==
 
==  Описание языка:  ==
* есть 3 типа сущностей: Идентификаторы, Значения и Списки
+
* есть 3 типа сущностей: '''Идентификаторы''', '''Значения''' и '''Списки'''
* '''значениями''' могут быть простые типы: строки, символы, числа, даты, булево и неопределено или созданные во время выполнения объекты и [[делегаты действий]]
+
* '''Значениями''' могут быть простые типы: строки, символы, числа, даты, булево (логический тип) и Неопределено, а также созданные во время выполнения объекты и [[делегаты действий]] (ссылки на Действия (функции))
 
** синтаксис значений такой же, как в языке Перфолента:  
 
** синтаксис значений такой же, как в языке Перфолента:  
  
   "строка" - строка, "С"с - символ, 4.537 - число, '23.07.2020' - дата, Истина - булево, Неопределено     
+
   "строка" - строка, "С"с - символ, 4.537 - число, '23.07.2020' - дата, Правда/Ложь/Да/Нет - булево (логическая) , Неопределено     
 +
 
 +
* '''Идентификатор''' - любой другой набор символов не содержащий пробельных символов: А1, $SYM, !!!Ошибка!!!
 +
* '''Списки''' состоят из любых сущностей разделенных пробелами и заключенных в круглые скобки: (+ 3 4 5)
 +
** '''Действие''' это '''список''', первым элементом которого является '''идентификатор''', а остальные элементы являются '''параметрами действия'''
 +
  (ИдентификаторДействия Параметр1 Параметр2 ... ПараметрН), например:
 +
 
 +
(мин 34 9 100)
 +
 
 +
** '''Идентификатор''' может быть вычисляемым
 +
 
 +
((Идент "ИдентификаторДействия") Параметр1 Параметр2 ... ПараметрН)
  
* '''идентификатор''' - любой другой набор символов не содержащий пробельных символов: А1, $SYM, !!!Ошибка!!!
+
** '''Параметр Действия''' может быть любой сущностью или '''последовательностью'''
* '''списки''' состоят из любых сущностей разделенных пробелами и заключенных в круглые скобки: (+ 3 4 5)
+
** '''Последовательность''' это '''список''' состоящий из любых сущностей ('''Идентификаторы''', '''Значения''' и '''Списки'''), у которого первый элемент НЕ идентификатор. Т.е. все списки это или '''Последовательность''' или '''Действие'''. Пример последовательности:
** '''действие''' это список, первым элементом которого является '''идентификатор''', а остальные элементы являются '''параметрами действия'''
 
  (ИдентификаторДействия Параметр1 Параметр2 ... ПараметрН), например, (мин 34 9 100)
 
** '''идентификатор''' может быть вычисляемым ((Идент "ИдентификаторДействия") Параметр1 Параметр2 ... ПараметрН)
 
** '''параметр действия''' может быть любой сущностью или '''последовательностью'''
 
** '''последовательность''' это список состоящий из любых сущностей, у которого первый элемент НЕ идентификатор:
 
  
 
   (Значение1 Значение2 Значение3) или ((Действие1) (Действие2) (Действие3)) или ((Действие1) (Действие2) Значение1)
 
   (Значение1 Значение2 Значение3) или ((Действие1) (Действие2) (Действие3)) или ((Действие1) (Действие2) Значение1)
  
* '''оператор''' это специальная форма '''действия''', в которой смысл и назначение параметров, а так же их последовательность выполнения определены стандартом языка, например:
+
* '''Оператор''' это специальная форма '''действия''', в которой смысл и назначение параметров, а так же их последовательность выполнения определены стандартом языка, например:
  
 
  (Если (Условие) (СписокДействий1) (СписокДействий2)) или (Перем ИмяПеременной Значение)
 
  (Если (Условие) (СписокДействий1) (СписокДействий2)) или (Перем ИмяПеременной Значение)
 +
 +
* '''Делегаты Действий''' - это ссылки на Действия (функции)
  
 
Возвращаемые значения:
 
Возвращаемые значения:
* значение возвращает само себя
+
* '''Значение''' возвращает само себя (т.е. Значение)
* идентификатор возвращает сопоставленное ему значение, в том числе, делегат действия, идентификатор или неопределено
+
* '''Идентификатор''' возвращает сопоставленное ему значение, в том числе, делегат действия, идентификатор или неопределено
* действие может вернуть значение, делегат действия, идентификатор или неопределено
+
* '''Действие''' может вернуть значение, делегат действия, идентификатор или неопределено
* оператор возвращает то, что определено стандартом языка
+
* '''оператор''' возвращает то, что определено стандартом языка
* последовательность возвращает результат последнего элемента
+
* '''последовательность''' возвращает результат последнего элемента последовательности
 +
 
 +
=== Важно ===
 +
* Если использовать ключевое слово '''Число''' в качестве переменой: - в Перфо ключевых слов как таковых нет... если вы использовали одно из "ключевых слов" как имя функции или переменной, значит вы переопределили его назначение...
 +
* Типы данных: Цитата: "В языке Scheme поддерживается ряд встроенных типов данных, таких как числовые типы, строковый тип, символьный тип, структурные типы (пара (pair), список и вектор) и некоторые другие, а также встроенные функции для работы со значениями этих типов."
 +
разработчик Перфо расширил этот список и добавил в него все встроенные типы данных [[Перфолента.NET]].
 +
* в Перфо можно использовать многострочные строки.... т.е. вот так:
 +
это первая строка текста
 +
это вторая строка текста
 +
это третья строка текста
 +
 
 +
вот в таких строках сейчас нельзя использовать комментарии!
  
 
== См. также ==
 
== См. также ==
 +
* [[Учебник языка Перфо для школьников]] переделка учебника [[Scheme]] - наиболее полное в настоящий момент описание Перфо 0.4.9.1
 +
* [[Введение в функциональный язык программирования Перфо]]
 +
* [[Скрипты  и программы на  языке Перфо]]
 
* [[Перфолента.NET]]
 
* [[Перфолента.NET]]
 +
* [[Перфо (Исходный код)]] языка программирования Перфо на Перфолента.NET
 +
* [[Функциональное программирование]]
  
 +
== Ссылки ==
 +
* https://habr.com/ru/company/tinkoff/blog/267015/ - Введение в Scheme (от Тинькофф Банка) - будет использоваться в качестве  заготовки для [[Введения в функциональный язык программирования Перфо]].
 +
* https://habr.com/ru/hub/funcprog/ - Хабр Функциональное программирование
  
 
[[Категория:Язык программирования]]
 
[[Категория:Язык программирования]]
Строка 38: Строка 72:
 
[[Категория:Перфолента.NET]]
 
[[Категория:Перфолента.NET]]
 
[[Категория:Перфо]]
 
[[Категория:Перфо]]
 +
[[Категория:Функциональное программирование]]

Текущая версия на 12:08, 15 декабря 2022

Перфо - интерпретируемый функциональный язык программирования - русскоязычный вариант языка похожего на Scheme (Lisp), унифицированный с языком Перфолента / 1С /OneScript. Полностью написан на языке Перфолента.NET также основан на платформе NET Framework. Пока существует Бетта-версия для внутреннего тестирования участников телеграмм-канала.

  • Расширение .perfo (.перфо). В качестве среды разработки используется среда Перфолента.NET.
  • Последняя версия Перфо 0.49.1 от 29.11.2020
  • В версии 0.49.1 реализовано частичное применение функций и добавлен оператор препроцессора #ВключитьФайл - что позволяет создавать библиотеки
  • В версии 0.48.1 реализован оператор map, частичное применение функций (каррирование, https://habr.com/ru/post/518692/)
  • в версии 0.47 реализован оператор Список (list)

Описание языка:

  • есть 3 типа сущностей: Идентификаторы, Значения и Списки
  • Значениями могут быть простые типы: строки, символы, числа, даты, булево (логический тип) и Неопределено, а также созданные во время выполнения объекты и делегаты действий (ссылки на Действия (функции))
    • синтаксис значений такой же, как в языке Перфолента:
 "строка" - строка, "С"с - символ, 4.537 - число, '23.07.2020' - дата, Правда/Ложь/Да/Нет - булево (логическая) , Неопределено    
  • Идентификатор - любой другой набор символов не содержащий пробельных символов: А1, $SYM, !!!Ошибка!!!
  • Списки состоят из любых сущностей разделенных пробелами и заключенных в круглые скобки: (+ 3 4 5)
    • Действие это список, первым элементом которого является идентификатор, а остальные элементы являются параметрами действия
 (ИдентификаторДействия Параметр1 Параметр2 ... ПараметрН), например:
(мин 34 9 100)
    • Идентификатор может быть вычисляемым
((Идент "ИдентификаторДействия") Параметр1 Параметр2 ... ПараметрН)
    • Параметр Действия может быть любой сущностью или последовательностью
    • Последовательность это список состоящий из любых сущностей (Идентификаторы, Значения и Списки), у которого первый элемент НЕ идентификатор. Т.е. все списки это или Последовательность или Действие. Пример последовательности:
 (Значение1 Значение2 Значение3) или ((Действие1) (Действие2) (Действие3)) или ((Действие1) (Действие2) Значение1)
  • Оператор это специальная форма действия, в которой смысл и назначение параметров, а так же их последовательность выполнения определены стандартом языка, например:
(Если (Условие) (СписокДействий1) (СписокДействий2)) или (Перем ИмяПеременной Значение)
  • Делегаты Действий - это ссылки на Действия (функции)

Возвращаемые значения:

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

Важно

  • Если использовать ключевое слово Число в качестве переменой: - в Перфо ключевых слов как таковых нет... если вы использовали одно из "ключевых слов" как имя функции или переменной, значит вы переопределили его назначение...
  • Типы данных: Цитата: "В языке Scheme поддерживается ряд встроенных типов данных, таких как числовые типы, строковый тип, символьный тип, структурные типы (пара (pair), список и вектор) и некоторые другие, а также встроенные функции для работы со значениями этих типов."

разработчик Перфо расширил этот список и добавил в него все встроенные типы данных Перфолента.NET.

  • в Перфо можно использовать многострочные строки.... т.е. вот так:
это первая строка текста
это вторая строка текста
это третья строка текста

вот в таких строках сейчас нельзя использовать комментарии!

См. также

Ссылки