Введение в функциональный язык программирования Перфо — различия между версиями

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
м (Анонимные (лямбда) - функции)
м
Строка 1: Строка 1:
 
* [https://habr.com/ru/company/tinkoff/blog/267015/ предполагается сделать на основе статьи Введение в Scheme с хабра]
 
* [https://habr.com/ru/company/tinkoff/blog/267015/ предполагается сделать на основе статьи Введение в Scheme с хабра]
  
Пока более полое описание синтаксиса смотрите в [[Учебник языка Перфо для школьников]]
+
Пока самое полное описание синтаксиса смотрите в [[Учебник языка Перфо для школьников]] и в файлах примеров поставляемых вместе с Перфо.
  
 
== Синтаксис ==
 
== Синтаксис ==
Строка 81: Строка 81:
 
  )
 
  )
  
=== Цикл Для ===
+
=== Цикл Для ===
 
Реализация цикла Для
 
Реализация цикла Для
 
  (Перем Шаг -1.95)
 
  (Перем Шаг -1.95)
Строка 90: Строка 90:
  
 
== Препроцессор ==
 
== Препроцессор ==
=== Область ... Конец области ===
+
* [[Препроцессор языка Перфо]]
Назначение операторов '''Область ... Конец области''' - группировка кода в сворачиваемые области по смыслу. Обозначив кусок кода (сразу '''несколько''' функций, кусок кода внутри функции, описания и т.п.) его можно сворачивать/разворачивать. На панели инструментов в редакторе есть кнопка позволяющая быстро перейти к нужной области по её названию. На исполнение программы никак не влияют.
 
#Область "Область данных"
 
...
 
#КонецОбласти
 
  
 
== ссылки ==
 
== ссылки ==

Версия 20:19, 2 декабря 2020

Пока самое полное описание синтаксиса смотрите в Учебник языка Перфо для школьников и в файлах примеров поставляемых вместе с Перфо.

Синтаксис

Комментарий

// - комментарии

Пауза

(Пауза)

Имена переменных регистронезависимые, тип переменных определяется компилятором

(Перем НаСчету 500) // Объявляется переменная  и ей присваивается значение 500

Анонимные (лямбда) - функции

Объявление анонимной функции:

функ аналог lambda в Scheme
(функ (x) (* x x))    // создать функцию, которая вычисляет квадрат числа
(функ (x y) (+ x y)) // создать функцию, которая вычисляет сумму двух чисел
(перем квадрат (функ (x) (* x x)))  // создать функцию, которая вычисляет квадрат числа и назвать её "квадрат".
(Вывод "Квадрат  = " (квадрат 100) ПС)
//используем лямбду без параметров
(перем ЛЯМ (функ () "значение лямбды"))
(Вывод "Результат (лям) = " (лям) ПС)
//используем лямбду с двумя параметрами
(перем ЛЯМ2 (функ (х у) (+ х у)))
(Вывод "Результат (лям2 3 5) = " (лям2 3 5) ПС)

Область видимости

Проверим область видимости

(функция (ФА Б) (+ (* Б Б) 25))
(функция (ФД Б) (+ (ФА (+ Б 1)) (ФА (- Б 1))))
(Вывод "(ФА 5)=" (ФА 5) пс)
(Вывод "(ФБ 10)=" (ФА 10) пс)

Присваивание переменной - Функции

Запомним встроенную функцию * в переменную УМН

(Перем УМН *)
(Вывод "(УМН 2 3 4)=" (УМН 2 3 4) пс)

Окружение

Создадим новое окружение и проверим, что переменные созданные в нем не доступны снаружи:

(Окружение
   (Перем ВнутрПерем1 1)
   (Перем ВнутрПерем2 2)
   (Вывод "В окружении (+ ВнутрПерем1 ВнутрПерем2) = " (+ ВнутрПерем1 ВнутрПерем2) пс)
)

Встроенные функции

Проверка встроенных функций:

(Вывод "(ТекущаяДата) = " (ТекущаяДата) пс)
(Вывод "(ТипЗнчСтр ""строка"") = " (ТипЗнчСтр "строка") пс)
(Вывод "(Число? 45.54) = " (Число? 45.54) пс)
(Вывод "(Вещ? 45.54) = " (Вещ? 45.54) пс)
(Вывод "(ТипЗнчСтр 45.54) = " (ТипЗнчСтр 45.54) пс)
(Перем Аня "Девочка Аня гуляет")
(Вывод "(Сред """ Аня """ 9) = " (Сред Аня 9) пс)
(Вывод "(Сред ""Девочка Аня гуляет"" 9 3) = " (Сред Аня 9 3) пс)
(Вывод "(Лев """ Аня """ 7) = " (Лев Аня 7) пс)
(Вывод "(Прав """ Аня """ 6) = " (Прав Аня 6) пс)

Циклы в функциональном языке Перфо

Цикл Пока. Команда Прервать

(Перем Индекс 0)
(Пока (< Индекс 13)
   (Если (= Индекс 1) ((Вывод "Пропустили 1 с помощью оператора Продолжить!" ПС) (++ Индекс) (Продолжить)))
   (Вывод "Пока Индекс = " Индекс ПС)
   (++ Индекс)
   (Если (= Индекс 3) ((Вывод "Сработала команда Прервать!" ПС) (Прервать)))
)

Цикл Для

Реализация цикла Для

(Перем Шаг -1.95)
(Для (Индекс 6.1 0 Шаг)
    (Если (< Индекс 1) ((Вывод "Сработала команда Прервать!" ПС) (Прервать)))
    (Вывод "Для Индекс = " Индекс ПС) // ПС - Перевод Строки
)

Препроцессор

ссылки