Наставак писања рада
This commit is contained in:
parent
76b75f9c54
commit
f3d20686db
BIN
doc/list.png
Normal file
BIN
doc/list.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
|
@ -6,7 +6,7 @@
|
|||
}
|
||||
|
||||
@article{mccarthy96,
|
||||
author = {Mccarthy, John},
|
||||
author = {McCarthy, John},
|
||||
year = {1996},
|
||||
month = {08},
|
||||
pages = {},
|
||||
|
@ -60,7 +60,7 @@
|
|||
publisher = "MIT Press",
|
||||
}
|
||||
|
||||
@article{McCarthy:1960:RFS:367177.367199,
|
||||
@article{recursive,
|
||||
author = {McCarthy, John},
|
||||
title = {Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I},
|
||||
journal = {Commun. ACM},
|
||||
|
|
24
doc/rad.tex
24
doc/rad.tex
|
@ -1,11 +1,13 @@
|
|||
\documentclass[a4paper]{article}
|
||||
|
||||
% biber
|
||||
\usepackage[T2A]{fontenc}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[serbian]{babel}
|
||||
\usepackage[serbianc]{babel}
|
||||
\usepackage{multicol}
|
||||
\usepackage{textcase}
|
||||
\usepackage{tocloft}
|
||||
\usepackage{graphicx}
|
||||
\usepackage[backend=biber]{biblatex}
|
||||
\addbibresource{lit.bib}
|
||||
|
||||
|
@ -65,11 +67,19 @@
|
|||
\newpage
|
||||
|
||||
\section{Кратак опис Лисп програмског језика}
|
||||
Лисп је један од најстаријих програмских језика који је и данас у општој примени, једино надмашен од стране Фортрана. Познат је по својој једноставној и једноличној синтакси, аутоматским системима за управљање меморијом, и моћним макроима који могу проширити његову већ изражајну синтаксу. Управо због своје екстензибилности, и изражајне моћи основа његовог дизајна, Лисп је један од ретких програмских језика који поседује сопствене дијалекте. Постоје стотине Лисп дијалеката, сваки са другачијом сврхом и философијом дизајна. Од више функционалних и декларативних, као Ским или Кложур, до практичнијих и опште-наменских, као Комон Лисп и, па и обласно-специфичних као Емакс-Лисп.
|
||||
\subsection{Историја}
|
||||
Лисп је првобитно осмишљен од стране Џона Мекартија, при крају педесетих, за сврхе изтраживања у пољу вештачке интелигенције \textcite{mccarthy81},
|
||||
\subsection{Листе}
|
||||
Лисп је акроним за List Processing (пређивање листа) што указује на најосновнију, и најбитнију сложену структуру података која је доступна у овом језику, наиме листа. Листа се гради помоћу конс ћелија, структура које поседују два показивача који могу показати на било какав податак. Ови показивачи се респективно зову CAR и CDR (Contents of the address part of the register number и Contents of the decrement part of the register number). Листа се уз њих дефинише као скуп конс ћелија где CAR сваке показује на одређени податак, члан листе, а CDR показује на следећу конс ћелију која чини исто као и претходна, све до задње, која показује на посебни тип објекта најчешће зван нил објекат.
|
||||
%ovde ubaciti fotku
|
||||
Лисп је један од најстаријих програмских језика који је и данас у општој примени. Познат је по својој једноставној и једноличној синтакси, аутоматским системима за управљање меморијом, и моћним макроима који могу проширити његову већ изражајну синтаксу. Управо због своје екстензибилности, и изражајне моћи основа његовог дизајна, Лисп је један од ретких програмских језика који поседује сопствене дијалекте. Постоје стотине Лисп дијалеката, сваки са другачијом сврхом и философијом дизајна. Од више функционалних и декларативних, као Ским или Кложур, до практичнијих и опште-наменских, као Комон Лисп и, па и обласно-специфичних као Емакс-Лисп.
|
||||
\subsection{Листе и функције}
|
||||
Лисп је акроним за 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}
|
||||
\begin{figure}[h!]
|
||||
\includegraphics[width=\linewidth]{list.png}
|
||||
\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
|
||||
\end{document}
|
||||
|
|
32
инит.ћ
32
инит.ћ
|
@ -89,5 +89,37 @@
|
|||
(опиши ламбда-израз (надовежи (листа 'ламбда имена) тело))
|
||||
(конс ламбда-израз вредности))))
|
||||
|
||||
(опиши (макс . аргументи)
|
||||
(опиши (листа-бројева? листа)
|
||||
(примени и (мапирај број? листа)))
|
||||
(услов
|
||||
((= 0 (дужина аргументи))
|
||||
(баци "Функција \"макс\" захтева барем један\
|
||||
аргумент"))
|
||||
((није (број? (сар аргументи))) (баци "Аргументи дати функцији\
|
||||
\"макс\" нису бројеви"))
|
||||
((и (= 1 (дужина аргументи)) (број? (сар аргументи)))
|
||||
(сар аргументи))
|
||||
(#и
|
||||
(опиши остатак (примени макс (сдр аргументи)))
|
||||
(ако (> остатак (сар аргументи))
|
||||
остатак (сар аргументи)))))
|
||||
|
||||
(опиши (мин . аргументи)
|
||||
(опиши (листа-бројева? листа)
|
||||
(примени и (мапирај број? листа)))
|
||||
(услов
|
||||
((= 0 (дужина аргументи))
|
||||
(баци "Функција \"макс\" захтева барем један\
|
||||
аргумент"))
|
||||
((није (број? (сар аргументи))) (баци "Аргументи дати функцији\
|
||||
\"макс\" нису бројеви"))
|
||||
((и (= 1 (дужина аргументи)) (број? (сар аргументи)))
|
||||
(сар аргументи))
|
||||
(#и
|
||||
(опиши остатак (примени мин (сдр аргументи)))
|
||||
(ако (< остатак (сар аргументи))
|
||||
остатак (сар аргументи)))))
|
||||
|
||||
(опиши (цео-број? џ)
|
||||
(= (именилац (нетачно->тачно џ)) 1))
|
||||
|
|
Loading…
Reference in a new issue