Наставак писања рада

This commit is contained in:
kappa 2019-02-26 13:50:00 +01:00
parent 76b75f9c54
commit f3d20686db
4 changed files with 51 additions and 9 deletions

BIN
doc/list.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -6,7 +6,7 @@
} }
@article{mccarthy96, @article{mccarthy96,
author = {Mccarthy, John}, author = {McCarthy, John},
year = {1996}, year = {1996},
month = {08}, month = {08},
pages = {}, pages = {},
@ -60,7 +60,7 @@
publisher = "MIT Press", publisher = "MIT Press",
} }
@article{McCarthy:1960:RFS:367177.367199, @article{recursive,
author = {McCarthy, John}, author = {McCarthy, John},
title = {Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I}, title = {Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I},
journal = {Commun. ACM}, journal = {Commun. ACM},

View file

@ -1,11 +1,13 @@
\documentclass[a4paper]{article} \documentclass[a4paper]{article}
% biber
\usepackage[T2A]{fontenc} \usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc} \usepackage[utf8]{inputenc}
\usepackage[serbian]{babel} \usepackage[serbianc]{babel}
\usepackage{multicol} \usepackage{multicol}
\usepackage{textcase} \usepackage{textcase}
\usepackage{tocloft} \usepackage{tocloft}
\usepackage{graphicx}
\usepackage[backend=biber]{biblatex} \usepackage[backend=biber]{biblatex}
\addbibresource{lit.bib} \addbibresource{lit.bib}
@ -65,11 +67,19 @@
\newpage \newpage
\section{Кратак опис Лисп програмског језика} \section{Кратак опис Лисп програмског језика}
Лисп је један од најстаријих програмских језика који је и данас у општој примени, једино надмашен од стране Фортрана. Познат је по својој једноставној и једноличној синтакси, аутоматским системима за управљање меморијом, и моћним макроима који могу проширити његову већ изражајну синтаксу. Управо због своје екстензибилности, и изражајне моћи основа његовог дизајна, Лисп је један од ретких програмских језика који поседује сопствене дијалекте. Постоје стотине Лисп дијалеката, сваки са другачијом сврхом и философијом дизајна. Од више функционалних и декларативних, као Ским или Кложур, до практичнијих и опште-наменских, као Комон Лисп и, па и обласно-специфичних као Емакс-Лисп. Лисп је један од најстаријих програмских језика који је и данас у општој примени. Познат је по својој једноставној и једноличној синтакси, аутоматским системима за управљање меморијом, и моћним макроима који могу проширити његову већ изражајну синтаксу. Управо због своје екстензибилности, и изражајне моћи основа његовог дизајна, Лисп је један од ретких програмских језика који поседује сопствене дијалекте. Постоје стотине Лисп дијалеката, сваки са другачијом сврхом и философијом дизајна. Од више функционалних и декларативних, као Ским или Кложур, до практичнијих и опште-наменских, као Комон Лисп и, па и обласно-специфичних као Емакс-Лисп.
\subsection{Историја} \subsection{Листе и функције}
Лисп је првобитно осмишљен од стране Џона Мекартија, при крају педесетих, за сврхе изтраживања у пољу вештачке интелигенције \textcite{mccarthy81}, Лисп је акроним за List Processing (пређивање листа) што указује на најосновнију, и најбитнију сложену структуру података која је доступна у овом језику, наиме листа. Листа се гради помоћу конс ћелија, структура које поседују два показивача (или два сама објекта у зависности од имплементације) који могу показати на било какав податак. Ови показивачи се респективно зову CAR и CDR (Contents of the address part of the register number и Contents of the decrement part of the register number). Листа се уз њих дефинише као скуп конс ћелија где CAR сваке показује на одређени податак, члан листе, а CDR показује на следећу конс ћелију која чини исто као и претходна, све до задње, која показује на посебни тип објекта најчешће зван нил објекат.\parencite{recursive}
\subsection{Листе} \begin{figure}[h!]
Лисп је акроним за List Processing (пређивање листа) што указује на најосновнију, и најбитнију сложену структуру података која је доступна у овом језику, наиме листа. Листа се гради помоћу конс ћелија, структура које поседују два показивача који могу показати на било какав податак. Ови показивачи се респективно зову CAR и CDR (Contents of the address part of the register number и Contents of the decrement part of the register number). Листа се уз њих дефинише као скуп конс ћелија где CAR сваке показује на одређени податак, члан листе, а CDR показује на следећу конс ћелију која чини исто као и претходна, све до задње, која показује на посебни тип објекта најчешће зван нил објекат. \includegraphics[width=\linewidth]{list.png}
%ovde ubaciti fotku \caption{Приказ листе}
\label{list1}
\end{figure}
Слика \label{list1} приказује листу која би се текстуално могла представити као симболички израз \texttt{(1 . (2 . (3 . ())))} или у скраћеној нотацији симболичких израза, \texttt{(1 2 3)}.
Лиспова синтакса је хомоиконична, другим речима он није само способан да прерађује листе, већ је и сам његов код сачињен од листа. Ово чини саму синтаксу језика довољно једноставном да се опише једним примером позива функцијем, који у Лиспу увек бивају следећег облика: \texttt{(функција арг1 арг2 арг3 ...)}, овако изгледа готово свака операција или функција извршена у самом језику, то наравно значи да су неки, нама познати изрази као \texttt{1 / (3 + 4 * 5)}, претворени у, на први изглед, необичне \texttt{(/ 1 (+ 3 (* 4 5)))}. Међутим, управо та чудна униформност читаве синтаксе која није присутна у већини других програмских језика је управо оно што Лиспу омогућава толику изражајну моћ.
\newpage
\renewcommand\refname{Литература}
\printbibliography \printbibliography
\end{document} \end{document}

View file

@ -89,5 +89,37 @@
(опиши ламбда-израз (надовежи (листа 'ламбда имена) тело)) (опиши ламбда-израз (надовежи (листа 'ламбда имена) тело))
(конс ламбда-израз вредности)))) (конс ламбда-израз вредности))))
(опиши (макс . аргументи)
(опиши (листа-бројева? листа)
(примени и (мапирај број? листа)))
(услов
((= 0 (дужина аргументи))
(баци "Функција \"макс\" захтева барем један\
аргумент"))
((није (број? (сар аргументи))) (баци "Аргументи дати функцији\
\"макс\" нису бројеви"))
((и (= 1 (дужина аргументи)) (број? (сар аргументи)))
(сар аргументи))
(#и
(опиши остатак (примени макс (сдр аргументи)))
(ако (> остатак (сар аргументи))
остатак (сар аргументи)))))
(опиши (мин . аргументи)
(опиши (листа-бројева? листа)
(примени и (мапирај број? листа)))
(услов
((= 0 (дужина аргументи))
(баци "Функција \"макс\" захтева барем један\
аргумент"))
((није (број? (сар аргументи))) (баци "Аргументи дати функцији\
\"макс\" нису бројеви"))
((и (= 1 (дужина аргументи)) (број? (сар аргументи)))
(сар аргументи))
(#и
(опиши остатак (примени мин (сдр аргументи)))
(ако (< остатак (сар аргументи))
остатак (сар аргументи)))))
(опиши (цео-број? џ) (опиши (цео-број? џ)
(= (именилац (нетачно->тачно џ)) 1)) (= (именилац (нетачно->тачно џ)) 1))