- •Оглавление
- •Эзотерические языки программирования. Занятие 1
- •Язык Ассемблер. Занятие 2.
- •Интеграция ассемблера в си. Занятие 3.
- •Занятие 4
- •Функциональное программирование
- •Язык программирования лисп
- •Занятие 6.
- •Занятие 7.
- •Занятие 8.
- •Логическое программирование Занятие 9.
- •Язык программирования пролог. Занятие 10.
- •Visual Prolog
- •Ic- Prolog swi- Prolog
- •Iso Prolog
- •Визуальные языки программирования. Занятие 10.
Занятие 4
chislov ‘00000’ invoke ExitProcess,0 outint
Ванная программа на языке ассемблера, как правило заносится в память с использованием директив, так называемая директивы определения данных при этом интерпретация того что хранится в памяти разлагается на программу, понятия типа данных на языке ассемблера отсутствует.
DB - помещает в память байт.
[<name>] DB <on> [<operand>]
A DB ?,5 - помещает в память байт, в простейшем случае 1 байт, но может быть записано через запятую несколько, может быть записано конкретное константное значение, которое для байта может принимать значения от -128 до 127 для чисел со знаком и от 0 до 255 для чисел без знака. Но так же может встретиться и подозрительный символ как ?. Это означает что мы резервируем память по адресу, конкретно тут по А будет зарезервирован байт и не будет инициироваться его значения.
M DB 2,-2,?,’*’ - В память будет помещено: M 2 -2 M+1 ? M+2 M+3
Можно записать целую строку:
S DB ‘Коля’ S К О Л Я
FlatAssembler (бесплатный компилятор)
*data
*code
DW работает похоже на ДБ, но оперирует данными размером в 2 байта A DW ? B DW 1234h C DW -2
Есть дупликация, которую можем использовать как для DB так и для DW.
P DW 0,0,0,0,0 P DW 5 DUP(0)
Дуплицировать можно не только простейшие константы, но и целые цепочки.
X DB 2 DUP(‘ab’,?,1) X a B ? 1 A B ? S DB ‘К’ DB ‘О’ DB ‘Л’ DB ’Я’ – то же самое, изменится только запись на ассемблере
B DD – отводит память размером по 32 бита=4 байта
Такие значение от -2^32 до 2^32-1
Выражение
В аргументах директив и в аргументах команд в программе на ассемблере допускается использовать выражения и в них знаки арифметических операций, скобки, константы. Все эти действия производятся ассемблером до начала трансляции программ и в память помещаются уже результаты.
Определить имя, которое будет затем использоваться в выражениях можно вот так: K EQU 30 X DB (3*K-1)/2 DUP (?) X DW 1, 2, 3, 4, 5 Y DB ? SIZEXY EQU Y-X; =10 получится значение 10
Могут быть команды, помеченные в программе и в выражениях можно использовать адрес метки.
MASM - подсчет нечетных
Функциональное программирование
Ушло от понятия когда программа выполнялась как последовательность шагов. 1 шаг 2 шаг 3 шаг – нет
Теория положенная в основу аппликативного программирования это т.н. лямбда исчисление (Алонза Черча) а также комбинаторная логика, которую придумал Моисей Шейнфинкель – наш соотечественник -20 -30 г 20в.
Первый implemented языком стал Lisp – 1958 год - Джон Маккарти в МТИ.
Лисп – LIST Processing – обработка списков. Списки играют главную роль в данном языке программирования, но чтобы не складывалось извращенного представления что лисп единственный, мы поговорим и о других языках которые представляют это парадигму программирования (направление): Common LISP Scheme Clojure FP FL
AutoLISP, AutoCAD - прямые потомки лиспа
Языки Hope, Miranda 1985 , HasKell 1993 (несколько потомков Curry, Clean, Gofel). Интересно что Карри и Хаскель это фамилия и имя логика.
NB! Хаскель – чистый функциональный язык.
ML( автор Роберт Милмер 1979) – потомки Objective CAML, F#(является частью Microsoft .NET) , Scala, Nemerle, Harlequins SMVJORKS.
SiSal, Reduce, APL, Erlang 1986 – последний характерен тем, что используется в индустрии телегиганта Ериксон. Язык многопоточный – изначально до 1000 параллельно работающих потоков.
APL 1961 – минималистичный синтаксис – обладает векторами и матрицами. Легко записывать обработку больших структур данных короткими операторами. У него есть наследники K, J.
Язык Пифагор – создан в Красноярском госуниверситете, в настоящем продолжается в институте космических и информационных технологий в Сибири. Параллельный информационно функционально алгоритмический.
Языки достаточно отличаются друг от друга.
GNU cLisp – будет там прогать, чисто функциональную часть изучаем.
IPL – язык обработки информации.