From 6263d97e3edca2e1d927e7120225c0abb5bb2c9c Mon Sep 17 00:00:00 2001 From: Trifon Trifonov Date: Thu, 28 Nov 2024 21:09:45 +0200 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D1=8F=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=B0=20=D0=BE=D0=BF=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=D0=BD=20=D1=81=D0=BB=D0=B0=D0=B9=D0=B4=20?= =?UTF-8?q?=D0=B7=D0=B0=20=D0=BB=D0=B5=D0=BD=D0=B8=D0=B2=20=D0=B2=D1=85?= =?UTF-8?q?=D0=BE=D0=B4/=D0=B8=D0=B7=D1=85=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2.4-haskell_lazy.tex | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/2.4-haskell_lazy.tex b/2.4-haskell_lazy.tex index d8b0007..5be8233 100644 --- a/2.4-haskell_lazy.tex +++ b/2.4-haskell_lazy.tex @@ -1,9 +1,15 @@ \documentclass[alsotrans,beameroptions={aspectratio=169}]{beamerswitch} \usepackage{fprog} +% взели ли сме вече вход/изход? +\newbooltrue{io} + +% примери за безточково програмиране +\newboolfalse{pointfree} + \title[Лениво оценяване]{Лениво оценяване и програмиране от по-висок ред} -\date{3--10 януари 2024 г.} +\date{29 ноември 2024 г.} \lstset{language=Haskell,style=Haskell} @@ -435,6 +441,26 @@ \section{Потоци} \end{itemize} \end{frame} +\begin{frame}<\switch{io}>[fragile] + \frametitle{Ленив вход и изход} + + \begin{itemize}[<+->] + \item Ленивото оценяване в Haskell ни позволява да работим с входно/изходни потоци + \item \lst{getContents :: IO String} --- връща списък от \alert{всички} символи на стандартния вход + \item списъкът се оценява лениво, т.е. прочита се при нужда + \item \textbf{Пример:} +\begin{lstlisting} +noSpaces = do text <- getContents + putStr $ filter (/=' ') text +\end{lstlisting} + \item \lst{interact :: (String -> String) -> IO ()} --- лениво прилага функция над низове над стандартния вход и извежда резултата на стандартния изход + \item \textbf{Пример:} +\begin{lstlisting} +noSpaces = interact $ filter (/=' ') +\end{lstlisting} + \end{itemize} +\end{frame} + \section{Безточково програмиране} \begin{frame} @@ -481,7 +507,7 @@ \section{Безточково програмиране} \end{itemize} \end{frame} -\begin{frame} +\begin{frame}<\switch{pointfree}> \frametitle{Безточково (point-free) програмиране} С помощта на операциите \tt{\$} и \tt. можем да дефинираме функции чрез директно използване на други функции.\\\pause @@ -507,7 +533,7 @@ \section{Безточково програмиране} \end{itemize} \end{frame} -\begin{frame} +\begin{frame}<\switch{pointfree}> \frametitle{Безточково (point-free) програмиране} \textbf{Пример 3:} \begin{itemize}[<+->] @@ -522,7 +548,7 @@ \section{Безточково програмиране} \end{itemize} \end{frame} -\begin{frame} +\begin{frame}<\switch{pointfree}> \frametitle{Безточково (point-free) програмиране} Можем да използваме още следните функции от \lst{Control.Monad}: @@ -549,7 +575,7 @@ \section{Безточково програмиране} \end{frame} -\begin{frame} +\begin{frame}<\switch{pointfree}> \frametitle{Безточково (point-free) програмиране} \textbf{Пример 4:} \begin{itemize}[<+->]