Министерство образования Республики Беларусь
ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Кафедра технологий программирования
Отчёт
по лабораторной работе № 4 по курсу «Функциональное программирование»
«Создание исполняемых программ»
Выполнила: Туркова В.А
10-ИТ-1
Полоцк. 2012
Цель
научиться создавать исполняемы программы на языке Haskell
Задания
1. Напишите следующие программы:
1) Программа, считывающая два числа и возвращающая их сумму.
2) Программа, распечатывающая переданные в нее аргументы командной строки.
3) Программа, которая принимает в командной строке имя файла и распечатывает его на экране.
4) Программа, принимающая в командной строке число n и имя файла и выводящая на экран первые n строк файла (используйте функцию lines, разбивающую строку на список строк в символах конца строки, т.е., напри-
мер lines"line1\nline2" вернет ["line1", "line2"]. Также полезна функция unlines, осуществляющая обратную операцию.)
-
Реализуйте программы, выполняющие задания вашего варианта из первой лабораторной работы. Параметры функций должны считываться с клавиатуры.
Решение
1.hs
module Main(main)
where
import IO
main :: IO ()
main = do
a <- readLn
b <- readLn
s <- summ a b
putStr s
summ :: Int->Int->IO String
summ a b = return (show(a)++"+"++show(b)++"="++show(a+b)++"\n")
2.hs
module Main(main)
where
import IO
import System
main :: IO ()
main = do
args <- getArgs
print args
3.hs
module Main(main)
where
import IO
import System
main :: IO ()
main = do
[fname] <-getArgs
hFile <- openFile fname ReadMode
s <- hGetContents hFile
putStr s
hClose hFile
4.hs
module Main(main)
where
import IO
import System
main :: IO ()
main = do
[fname,n] <- getArgs
hFile <- openFile fname ReadMode
s <- hGetContents hFile
func (lines s) (read n::Int)
hClose hFile
func :: [String]->Int->IO ()
func (x:xs) n = do
if (n ==0) then return () else do
putStr x
putStr "\n"
func xs (n-1)
return ()
func [] n = do
return ()
1.1.hs
module Main(main)
where
import IO
import System
main :: IO ()
main = do
x <- readLn
y <- readLn
s <- sort2 x y
putStr s
sort2 :: Int->Int->IO String
sort2 x y = do
if (x<y) then return (show(x)++" "++show(y)++"\n") else return (show(y)++" "++show(x)++"\n")
1.2.hs
module Main(main)
where
import IO
import System
main :: IO ()
main = do
x1 <- readLn
y1 <- readLn
x2 <- readLn
y2 <- readLn
x3 <- readLn
y3 <- readLn
x4 <- readLn
y4 <- readLn
s <- isParallel x1 y1 x2 y2 x3 y3 x4 y4
putStr s
isParallel :: Double->Double->Double->Double->Double->Double->Double->Double->IO String
isParallel x1 y1 x2 y2 x3 y3 x4 y4 = do
k1 <- getK x1 y1 x2 y2
k2 <- getK x3 y3 x4 y4
if (k1==k2) then return ("paralleni\n") else return ("ne paralleni\n")
getK :: Double->Double->Double->Double->IO Double
getK x1 y1 x2 y2 = return((y2-y1)/(x2-x1))
Пример работы
Вывод
В ходе выполнения данной лабораторной работы были получены навыки по созданию исполняемых программ на языке Haskell