🗊Презентация Haskell тілде типтерді анықтау. (Дәріс 3-4)

Нажмите для полного просмотра!
Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №1Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №2Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №3Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №4Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №5Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №6Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №7Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №8Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №9Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №10Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №11Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №12Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №13Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №14Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №15Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №16Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №17Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №18Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №19Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №20Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №21Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №22Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №23Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №24Haskell тілде типтерді анықтау. (Дәріс 3-4), слайд №25

Содержание

Вы можете ознакомиться и скачать презентацию на тему Haskell тілде типтерді анықтау. (Дәріс 3-4). Доклад-сообщение содержит 25 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1






Haskell тілде типтерді анықтау
Описание слайда:
Haskell тілде типтерді анықтау

Слайд 2





ax2 + bx + c = 0:
ax2 + bx + c = 0:
roots a b с =
((-b + sqrt    (b*b - 4*а*с))   /   (2*а),  (-b - sqrt    (b*b - 4*а*с))   /   (2*а))
Описание слайда:
ax2 + bx + c = 0: ax2 + bx + c = 0: roots a b с = ((-b + sqrt (b*b - 4*а*с)) / (2*а), (-b - sqrt (b*b - 4*а*с)) / (2*а))

Слайд 3





roots a b с	=
roots a b с	=
let det	=	sqrt    (b*b - 4*a*c)
in  ((-b+det /   (2*a),  (-b- det /   (2*a))
roots a b с =
let det = sqrt (b*b - 4*a*c)
     twice_a =2*a
in  ((-b + det)/ twice_a, (-b-det)/ twice_a)
Описание слайда:
roots a b с = roots a b с = let det = sqrt (b*b - 4*a*c) in ((-b+det / (2*a), (-b- det / (2*a)) roots a b с = let det = sqrt (b*b - 4*a*c) twice_a =2*a in ((-b + det)/ twice_a, (-b-det)/ twice_a)

Слайд 4





roots a b с =
roots a b с =
let { let = sqrt(b*b - 4*a*c); twice_a =2*a }
in  ((-b + det)   / twice_a,
(-b - det)   / twice_a)
Описание слайда:
roots a b с = roots a b с = let { let = sqrt(b*b - 4*a*c); twice_a =2*a } in ((-b + det) / twice_a, (-b - det) / twice_a)

Слайд 5





roots a b с =
roots a b с =
((-b + det)   / twice_a,
(-b - det)   / twice_a)
where  det = sqrt    (b*b - 4*a*c)
twice_a =   2 *a
Описание слайда:
roots a b с = roots a b с = ((-b + det) / twice_a, (-b - det) / twice_a) where det = sqrt (b*b - 4*a*c) twice_a = 2 *a

Слайд 6





det  a b c= sqrt    (b*b - 4*а*с)
det  a b c= sqrt    (b*b - 4*а*с)
        twice_a  a =   2 *а
        roots a b с =
        ((-b + det а b с)   / twice_a  a, 
        (-b-det а b с)   / twice_a  a)
Описание слайда:
det a b c= sqrt (b*b - 4*а*с) det a b c= sqrt (b*b - 4*а*с) twice_a a = 2 *а roots a b с = ((-b + det а b с) / twice_a a, (-b-det а b с) / twice_a a)

Слайд 7





Берілген m санынан натуралды сандар тізімін [m,m+1, m+2,…, n] қайтаратын numsFro көмекші функцияны енгіземіз және осы анықтаманы локалды етеміз
Берілген m санынан натуралды сандар тізімін [m,m+1, m+2,…, n] қайтаратын numsFro көмекші функцияны енгіземіз және осы анықтаманы локалды етеміз
numsTo n=
let numsFrom m= if m ==  n then [m]   else m:numsFro (m+1)
in numsFrom 1
Описание слайда:
Берілген m санынан натуралды сандар тізімін [m,m+1, m+2,…, n] қайтаратын numsFro көмекші функцияны енгіземіз және осы анықтаманы локалды етеміз Берілген m санынан натуралды сандар тізімін [m,m+1, m+2,…, n] қайтаратын numsFro көмекші функцияны енгіземіз және осы анықтаманы локалды етеміз numsTo n= let numsFrom m= if m == n then [m] else m:numsFro (m+1) in numsFrom 1

Слайд 8





factorial 0 = 1
factorial 0 = 1
factorial n = n* factorial  (n-1)
Описание слайда:
factorial 0 = 1 factorial 0 = 1 factorial n = n* factorial (n-1)

Слайд 9





factorial 0 = 1
factorial 0 = 1
factorial n = if  n>  0  then
n* factorial  (n-1)
else
error "factorial:  negative    argument"
Описание слайда:
factorial 0 = 1 factorial 0 = 1 factorial n = if n> 0 then n* factorial (n-1) else error "factorial: negative argument"

Слайд 10





factorial 0 = 1
factorial 0 = 1
factorial n | n<  0  =  error  “factorial : negative argument”
                   | n>=  0  =  n * factorial (n-1)
Описание слайда:
factorial 0 = 1 factorial 0 = 1 factorial n | n< 0 = error “factorial : negative argument” | n>= 0 = n * factorial (n-1)

Слайд 11





signum х   |   х <  0    =  -1
signum х   |   х <  0    =  -1
                   | х == 0      =    0
                   | otherwise = 1
Описание слайда:
signum х | х < 0 = -1 signum х | х < 0 = -1 | х == 0 = 0 | otherwise = 1

Слайд 12





signum х  = if х <0      then
signum х  = if х <0      then
		   -1 
       else
if x == 0     then
    0
else
-1
Описание слайда:
signum х = if х <0 then signum х = if х <0 then -1 else if x == 0 then 0 else -1

Слайд 13





Haskell тілінде типтердің полиморфты жүйесі қолданылады. Белгілі тізімнің бірінші элементін қайтаратын tail функциясын қарастырайық
Haskell тілінде типтердің полиморфты жүйесі қолданылады. Белгілі тізімнің бірінші элементін қайтаратын tail функциясын қарастырайық
Prelude> tail  [1,2 ,3]
[2,3]
Prelude> tail  [‘a’,’b’, ‘c’]
[’b’, ‘c’]
Prelude> tail  [“list”,”of”, “lists”]
[”of”, “lists”]
tail функциясы  полиморфты тип: [а]  ->  [a]. Бұл оның аргумент ретінде  кез келген тізімді қабылдап, сол типтің тізімін қайтаратынын білдіреді. Мұнда а типтік айнымалыны білдіреді, яғни оның орнына кез келген нақты типті қоюға болады. 
а типтік айнымалыны білдіреді, яғни оның орнына кез келген нақты типті қоюға болады. Сонымен [а] -> [а] жазбасы типтердің бүтін бір жанұясын көрсетеді мысалы, [Integer]  ->  [Integer],   [Char]  ->  [Char],   [[Char]]  ->  [[Char]] және т.б.
Полиморфты типтерде айнымалылардың бірнеше типтерін  қолануға мүмкін, мысалы fst функциясы (а,b)     > а  типті. Бұл типті  анықтағанда екі типтік айнымалы қолданылады
 
Описание слайда:
Haskell тілінде типтердің полиморфты жүйесі қолданылады. Белгілі тізімнің бірінші элементін қайтаратын tail функциясын қарастырайық Haskell тілінде типтердің полиморфты жүйесі қолданылады. Белгілі тізімнің бірінші элементін қайтаратын tail функциясын қарастырайық Prelude> tail [1,2 ,3] [2,3] Prelude> tail [‘a’,’b’, ‘c’] [’b’, ‘c’] Prelude> tail [“list”,”of”, “lists”] [”of”, “lists”] tail функциясы полиморфты тип: [а] -> [a]. Бұл оның аргумент ретінде кез келген тізімді қабылдап, сол типтің тізімін қайтаратынын білдіреді. Мұнда а типтік айнымалыны білдіреді, яғни оның орнына кез келген нақты типті қоюға болады. а типтік айнымалыны білдіреді, яғни оның орнына кез келген нақты типті қоюға болады. Сонымен [а] -> [а] жазбасы типтердің бүтін бір жанұясын көрсетеді мысалы, [Integer] -> [Integer], [Char] -> [Char], [[Char]] -> [[Char]] және т.б. Полиморфты типтерде айнымалылардың бірнеше типтерін қолануға мүмкін, мысалы fst функциясы (а,b) > а типті. Бұл типті анықтағанда екі типтік айнымалы қолданылады  

Слайд 14





Мысал ретінде стандарттыға ұқсас жұптың анықталуын қарастырамыз. 
Мысал ретінде стандарттыға ұқсас жұптың анықталуын қарастырамыз. 
data        Pair a b =        Pair a b
data – кілттік сөзі  типті өзіміз анықтайтымызды білдіреді;
a b- типтің параметрлерін білдіретін типтік айнымалылар.
Теңдік белгісінен кейін біз осы типтің берілгендер конструкторын көрсетеміз яғни Pair (берілгендер конструкторының атауы тип атауымен сәйкес келуі міндетті емес). Конструктор атауынан кейін біз тағы да а b жазамыз, бұл жұпты конструкциялау үшін бізге а және  b  типіне жататын екі мән қажет екенін білдіреді.
Описание слайда:
Мысал ретінде стандарттыға ұқсас жұптың анықталуын қарастырамыз. Мысал ретінде стандарттыға ұқсас жұптың анықталуын қарастырамыз. data Pair a b = Pair a b data – кілттік сөзі типті өзіміз анықтайтымызды білдіреді; a b- типтің параметрлерін білдіретін типтік айнымалылар. Теңдік белгісінен кейін біз осы типтің берілгендер конструкторын көрсетеміз яғни Pair (берілгендер конструкторының атауы тип атауымен сәйкес келуі міндетті емес). Конструктор атауынан кейін біз тағы да а b жазамыз, бұл жұпты конструкциялау үшін бізге а және b типіне жататын екі мән қажет екенін білдіреді.

Слайд 15





Бұл анықтама Pair   : :   а  ->  b  ->  Pair a b, функциясын енгізеді, ол   Pair типті жұптарды конструкциялау үшін қажет. 
Бұл анықтама Pair   : :   а  ->  b  ->  Pair a b, функциясын енгізеді, ол   Pair типті жұптарды конструкциялау үшін қажет. 
Бұл кодты интерпретаторға енгізіп, жұптардың қалай конструкцияланатынын көруге болады.
 Main>:t  Pair
Pair   ::  a  ->  b  ->  Pair a b
Main> : t  Pair ‘a’
Pair  'a'	::  a  ->  Pair    Char a
Main>: t   Pair 'a'  "Hello"
Pair 'a'  "Hello"   ::  Pair    Char   [Char]
Описание слайда:
Бұл анықтама Pair : : а -> b -> Pair a b, функциясын енгізеді, ол Pair типті жұптарды конструкциялау үшін қажет. Бұл анықтама Pair : : а -> b -> Pair a b, функциясын енгізеді, ол Pair типті жұптарды конструкциялау үшін қажет. Бұл кодты интерпретаторға енгізіп, жұптардың қалай конструкцияланатынын көруге болады. Main>:t Pair Pair :: a -> b -> Pair a b Main> : t Pair ‘a’ Pair 'a' :: a -> Pair Char a Main>: t Pair 'a' "Hello" Pair 'a' "Hello" :: Pair Char [Char]

Слайд 16






Берілгендер конструкторларына сәйкес функцияларды қолдану кезінде үлгімен сәйкестентіретін қасиеті бар. Осылайша бұл жұптың бірінші және екінші элементін алу үшін:
 pairFst  (Pair  х у)  =  x
pairSnd  (Pair  x у)  =  y
Описание слайда:
Берілгендер конструкторларына сәйкес функцияларды қолдану кезінде үлгімен сәйкестентіретін қасиеті бар. Осылайша бұл жұптың бірінші және екінші элементін алу үшін: pairFst (Pair х у) = x pairSnd (Pair x у) = y

Слайд 17





Өзіндік типтерді құруда бір-  бірінен  ' |' символымен ажыратылатын бірнеше конструкторларды қолдану мүмкін.
Өзіндік типтерді құруда бір-  бірінен  ' |' символымен ажыратылатын бірнеше конструкторларды қолдану мүмкін.
Түстерді ұсынатын Color типін қарастырайық,   R      Gee   және  Be  мүмкін мәндері бар  Оны былайша анықтауға болады
data Color =  Red  |  Green   |   Blue
мұнда  Color — тип атауы, aл Red, Green және Blue – берілгендер конструкторлары. 
Назар аударыңыз, бұл тип параметрлер қабылдамайды. Бұл типтар санаушы деп аталады.
Описание слайда:
Өзіндік типтерді құруда бір- бірінен ' |' символымен ажыратылатын бірнеше конструкторларды қолдану мүмкін. Өзіндік типтерді құруда бір- бірінен ' |' символымен ажыратылатын бірнеше конструкторларды қолдану мүмкін. Түстерді ұсынатын Color типін қарастырайық, R Gee және Be мүмкін мәндері бар Оны былайша анықтауға болады data Color = Red | Green | Blue мұнда Color — тип атауы, aл Red, Green және Blue – берілгендер конструкторлары. Назар аударыңыз, бұл тип параметрлер қабылдамайды. Бұл типтар санаушы деп аталады.

Слайд 18





Алайда көпшілік конструкторларда параметрлер қабылдауы мүмкін. Осылайша Color типі тек үш түсті ғана анықтауға мүмкіндік беретінін байқауға болады. Оны үш бүтін санмен берілетін  қызы, жасыл және көк түстердің деңгейіне сәйкес келетін (стандартты rgb ) кез келген түсті анықтайтындай етіп кеңейтейік. 
Алайда көпшілік конструкторларда параметрлер қабылдауы мүмкін. Осылайша Color типі тек үш түсті ғана анықтауға мүмкіндік беретінін байқауға болады. Оны үш бүтін санмен берілетін  қызы, жасыл және көк түстердің деңгейіне сәйкес келетін (стандартты rgb ) кез келген түсті анықтайтындай етіп кеңейтейік. 
data      Color =  Red   |	Green   |    RGB Int      Int      Int
Мұнда Color типі, стандартты түстерден басқа  Red, Green және Blue, RGB конструкторының көмегімен үш бүтін санды қабылдап түстердің rgb-компоненттері бар кез келген түсті анықтауға мүмкіндік береді. Сонда, мысалы, түстің red-компонентін ерекшелеу былай жазылады
redComponent	::	Color   ->  Int
redComponent	Red =   255
redComponent	(RGB  r  _ _)  = r
redComponent  _  =  0
Описание слайда:
Алайда көпшілік конструкторларда параметрлер қабылдауы мүмкін. Осылайша Color типі тек үш түсті ғана анықтауға мүмкіндік беретінін байқауға болады. Оны үш бүтін санмен берілетін қызы, жасыл және көк түстердің деңгейіне сәйкес келетін (стандартты rgb ) кез келген түсті анықтайтындай етіп кеңейтейік. Алайда көпшілік конструкторларда параметрлер қабылдауы мүмкін. Осылайша Color типі тек үш түсті ғана анықтауға мүмкіндік беретінін байқауға болады. Оны үш бүтін санмен берілетін қызы, жасыл және көк түстердің деңгейіне сәйкес келетін (стандартты rgb ) кез келген түсті анықтайтындай етіп кеңейтейік. data Color = Red | Green | RGB Int Int Int Мұнда Color типі, стандартты түстерден басқа Red, Green және Blue, RGB конструкторының көмегімен үш бүтін санды қабылдап түстердің rgb-компоненттері бар кез келген түсті анықтауға мүмкіндік береді. Сонда, мысалы, түстің red-компонентін ерекшелеу былай жазылады redComponent :: Color -> Int redComponent Red = 255 redComponent (RGB r _ _) = r redComponent _ = 0

Слайд 19





Көпшілік конструкторлы типтер полиморфты болуы мүмкін. Келесі мәселені қарастырайық. Функция қандай да бір нәтижені қайтаруы немесе полиморфты болуы мүмкін. Мысалы:
Көпшілік конструкторлы типтер полиморфты болуы мүмкін. Келесі мәселені қарастырайық. Функция қандай да бір нәтижені қайтаруы немесе полиморфты болуы мүмкін. Мысалы:
сызықтық теңдеуді шешу функциясы табылған түбірді қайтарады
 тізімдегі бірінші теріс емес санды іздеп, осы санды қайтарады. 
Сонымен бірге теңдеудің шешімі болмауы да мүмкін, тізімде теріс сандар болмауы мүмкін.
Описание слайда:
Көпшілік конструкторлы типтер полиморфты болуы мүмкін. Келесі мәселені қарастырайық. Функция қандай да бір нәтижені қайтаруы немесе полиморфты болуы мүмкін. Мысалы: Көпшілік конструкторлы типтер полиморфты болуы мүмкін. Келесі мәселені қарастырайық. Функция қандай да бір нәтижені қайтаруы немесе полиморфты болуы мүмкін. Мысалы: сызықтық теңдеуді шешу функциясы табылған түбірді қайтарады тізімдегі бірінші теріс емес санды іздеп, осы санды қайтарады. Сонымен бірге теңдеудің шешімі болмауы да мүмкін, тізімде теріс сандар болмауы мүмкін.

Слайд 20





Бұл мәселе стандартты Maybe типімен шешіледі
Бұл мәселе стандартты Maybe типімен шешіледі
Data Maybe  	a = Nothing        |   Just a
Maybe типі (ағыл. maybe - мүмкін) типтік а айнымалысымен параметрленген және екі конструкторды ұсынады: Nothing (ағылш. ештеңе) шешімнің жоқтығын көрсету үшін және Just (ағылш. қарапайым, дәл) ойластырылған нәтиже. Онда біздің функцияны мына түрде жазуға болады:
-- Функция теңдеудің түбірін қайтарады ах + b =  0
solve   ::   Double  -> Double   - > Maybe Double
solve  0   b = Nothing
solve  a b = Just   (- b / a)
-- Функция тізімнің бірінші теріс емес элементін қайтарады
findPositive     ::   [Integer]        -> Maybe Integer
findPositive     []   = Nothing
findPositive      (x:xs)   |   x >	0       =  Just x
                                        |   otherwise  =  findPositive xs
Описание слайда:
Бұл мәселе стандартты Maybe типімен шешіледі Бұл мәселе стандартты Maybe типімен шешіледі Data Maybe a = Nothing | Just a Maybe типі (ағыл. maybe - мүмкін) типтік а айнымалысымен параметрленген және екі конструкторды ұсынады: Nothing (ағылш. ештеңе) шешімнің жоқтығын көрсету үшін және Just (ағылш. қарапайым, дәл) ойластырылған нәтиже. Онда біздің функцияны мына түрде жазуға болады: -- Функция теңдеудің түбірін қайтарады ах + b = 0 solve :: Double -> Double - > Maybe Double solve 0 b = Nothing solve a b = Just (- b / a) -- Функция тізімнің бірінші теріс емес элементін қайтарады findPositive :: [Integer] -> Maybe Integer findPositive [] = Nothing findPositive (x:xs) | x > 0 = Just x | otherwise = findPositive xs

Слайд 21





Типтер класы кейінірек егжей тегжей қарастырылады. Қазір біз бұл жерде тек негізгі түсініктерін ғана береміз, себебі олар қолданушы типтерімен жұмысты жеңілдетеді.
Типтер класы кейінірек егжей тегжей қарастырылады. Қазір біз бұл жерде тек негізгі түсініктерін ғана береміз, себебі олар қолданушы типтерімен жұмысты жеңілдетеді.
Типтер класы бірқатар ортақ қасиеттері бар көптеген типтер жинағынан тұрады.
Мысалы, Eq типтер класына нысандары үшін теңдік класы анықталған болуы керек, яғни егер  х және у айнымалылары бірдей типке жататын болған жағдайда  Eq класына х == уих /= у  өрнегін есептей аламыз. Барлық қарапайым типтер сонымен бірге кортеждер мен тізімдер де осы класқа кіреді, алайда теңдеулік қатынастар үшін анықталмаған және функция типтері Eq класына жатпайды.
Сонымен бірге Show класы да маңызды болып табылады.  Show класына экранға көрсетуге мүмкін болатын нысандарды жолдарға айналдыра алатын типтер кіреді. Қарамайым типтер, кортеждер және тізімдер бұл класқа кіреді, сондықтан интерпретатор оларды енгізе алады, мысалы жолға.   Функциялар бұл класқа кірмейді. Қолданушы типтер үнсіз келісім бойынша ешқандай класқа кірмейді, сондықтан бұл типтерді салыстыра алмайсын және интерпретатор да оларды басып шығара алмайды. Бұл әрине ыңғайсыз. Сондықтан  типтерді анықтау кезінде оларды өзіңіз қалаған класқа жатқыза аласыз. Бұл үшін типті анықтағаннан кейін deriving  кілттік сөзін қосып, жақшаларда класстарды санап шығу керек.
Мысал
-- Тәулік уақытын көрсететін тип 
data	DayTime  =  Morning
|   Afernoon
|   Evening
|   Night dervining        (Eq,   Show)
Типтерді анықтау кезінде оларды Eq   және   Show класына жатқызыңыз. Бұл сіздің жұмысыңызды жеңілдетеді.
Описание слайда:
Типтер класы кейінірек егжей тегжей қарастырылады. Қазір біз бұл жерде тек негізгі түсініктерін ғана береміз, себебі олар қолданушы типтерімен жұмысты жеңілдетеді. Типтер класы кейінірек егжей тегжей қарастырылады. Қазір біз бұл жерде тек негізгі түсініктерін ғана береміз, себебі олар қолданушы типтерімен жұмысты жеңілдетеді. Типтер класы бірқатар ортақ қасиеттері бар көптеген типтер жинағынан тұрады. Мысалы, Eq типтер класына нысандары үшін теңдік класы анықталған болуы керек, яғни егер х және у айнымалылары бірдей типке жататын болған жағдайда Eq класына х == уих /= у өрнегін есептей аламыз. Барлық қарапайым типтер сонымен бірге кортеждер мен тізімдер де осы класқа кіреді, алайда теңдеулік қатынастар үшін анықталмаған және функция типтері Eq класына жатпайды. Сонымен бірге Show класы да маңызды болып табылады. Show класына экранға көрсетуге мүмкін болатын нысандарды жолдарға айналдыра алатын типтер кіреді. Қарамайым типтер, кортеждер және тізімдер бұл класқа кіреді, сондықтан интерпретатор оларды енгізе алады, мысалы жолға. Функциялар бұл класқа кірмейді. Қолданушы типтер үнсіз келісім бойынша ешқандай класқа кірмейді, сондықтан бұл типтерді салыстыра алмайсын және интерпретатор да оларды басып шығара алмайды. Бұл әрине ыңғайсыз. Сондықтан типтерді анықтау кезінде оларды өзіңіз қалаған класқа жатқыза аласыз. Бұл үшін типті анықтағаннан кейін deriving кілттік сөзін қосып, жақшаларда класстарды санап шығу керек. Мысал -- Тәулік уақытын көрсететін тип data DayTime = Morning | Afernoon | Evening | Night dervining (Eq, Show) Типтерді анықтау кезінде оларды Eq және Show класына жатқызыңыз. Бұл сіздің жұмысыңызды жеңілдетеді.

Слайд 22





Тілде типтердің синонимдарын анықтау мүмкіндігі бар, яғни  жиі қолданылатын тип атауларын. Олар кілттік сөздер арқылы іске асады. Міне бірнеше мысал
Тілде типтердің синонимдарын анықтау мүмкіндігі бар, яғни  жиі қолданылатын тип атауларын. Олар кілттік сөздер арқылы іске асады. Міне бірнеше мысал
type String  =  [Char]
type Person = (Name   Address)
type Name = String
type Address =     Maybe String
Типтер синонимдері жаңа типтерін анықтамай жай бар типтерге жаңа атаулар береді. Мысалы, Person – Name типі (String, Maybe String) -> String типіне толық сәйкес келеді. Алайда оларды қолданады, себебі біріншіден олар типтерге қысқа тау беруге көмектеседі, екіншіден кодтың түсіну деңгейін көтереді.
Описание слайда:
Тілде типтердің синонимдарын анықтау мүмкіндігі бар, яғни жиі қолданылатын тип атауларын. Олар кілттік сөздер арқылы іске асады. Міне бірнеше мысал Тілде типтердің синонимдарын анықтау мүмкіндігі бар, яғни жиі қолданылатын тип атауларын. Олар кілттік сөздер арқылы іске асады. Міне бірнеше мысал type String = [Char] type Person = (Name Address) type Name = String type Address = Maybe String Типтер синонимдері жаңа типтерін анықтамай жай бар типтерге жаңа атаулар береді. Мысалы, Person – Name типі (String, Maybe String) -> String типіне толық сәйкес келеді. Алайда оларды қолданады, себебі біріншіден олар типтерге қысқа тау беруге көмектеседі, екіншіден кодтың түсіну деңгейін көтереді.

Слайд 23





Мысалы
Мысалы
Дүкеннің мәліметтер базасының фрагменті: торт пен жемістер бар және  торттар үшін жеткізушілер көрсетіледі. Сонымен бірге, тауардың бағасы белгілі.
type Cake =String  
type Fruit = String
type  Cost = Integer
 type Supplier = String
data Good = F Fruit  Cost
                    |    С Cake Supplier Cost
Dervining  (Eq, Show)
Описание слайда:
Мысалы Мысалы Дүкеннің мәліметтер базасының фрагменті: торт пен жемістер бар және торттар үшін жеткізушілер көрсетіледі. Сонымен бірге, тауардың бағасы белгілі. type Cake =String type Fruit = String type Cost = Integer type Supplier = String data Good = F Fruit Cost | С Cake Supplier Cost Dervining (Eq, Show)

Слайд 24





Мысалы
Мысалы
Тауардың  атауы бойынша бағасын алу
getCost::Good>Cost 
getCost ( F_ cost) = cost 
getCost   _ _ cost) = cost
--Мәліметтер базасының тапсырмасы
goods::[Good] 
goods=[F "Apple"          12,
C   "Nochka" "Konditer" 30,
C   "Sever" "Oktjabr’"             23, 
F "Pear"                                 10
С "Nochka"        "Super"         34]
-- getCost функциясының орындалу нәтижесі 
Main> getCost (F "Pear"   10)
::   Integer
Описание слайда:
Мысалы Мысалы Тауардың атауы бойынша бағасын алу getCost::Good>Cost getCost ( F_ cost) = cost getCost _ _ cost) = cost --Мәліметтер базасының тапсырмасы goods::[Good] goods=[F "Apple" 12, C "Nochka" "Konditer" 30, C "Sever" "Oktjabr’" 23, F "Pear" 10 С "Nochka" "Super" 34] -- getCost функциясының орындалу нәтижесі Main> getCost (F "Pear" 10) :: Integer

Слайд 25





Мысал. Торттың тапсырылған атауының барлық жеткізушісінің тізімі
Мысал. Торттың тапсырылған атауының барлық жеткізушісінің тізімі
getSupplier::Cake    ->  [Good]   ->   [Supplier]
getSupplier cake     []     []
getSupplier cake    (C cake1   supplier_: goods)
                |  cake==cake1  = supplier  : getSupplier cake goods  
    |  otherwise    getSupplier cake goods
getSupplier cake(F   _ _:goods)
 	    getSupplier cake goods
-- getSupplier функциясының орындалу нәтижесі
 Main> getSuppler "Nochka" goods 
["Konditer","Supper"] :: [Supplier]
Описание слайда:
Мысал. Торттың тапсырылған атауының барлық жеткізушісінің тізімі Мысал. Торттың тапсырылған атауының барлық жеткізушісінің тізімі getSupplier::Cake -> [Good] -> [Supplier] getSupplier cake [] [] getSupplier cake (C cake1 supplier_: goods) | cake==cake1 = supplier : getSupplier cake goods | otherwise getSupplier cake goods getSupplier cake(F _ _:goods) getSupplier cake goods -- getSupplier функциясының орындалу нәтижесі Main> getSuppler "Nochka" goods ["Konditer","Supper"] :: [Supplier]



Похожие презентации
Mypresentation.ru
Загрузить презентацию