1 / 6

Синтаксис Haskell vs OCAML

Синтаксис Haskell vs OCAML. OCAML let func x y = match x, y with | patt1 -> res1 | patt2 -> res2 … | pattN -> resN. Haskell func pattx_1 patty_1 = res1 func pattx_ 2 patty_ 2 = res 2 … func pattx_ N patty_ N = res N. match x with | patt1 when cond -> res1.

charla
Download Presentation

Синтаксис Haskell vs OCAML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Синтаксис Haskell vs OCAML OCAML let func x y = match x, y with | patt1 -> res1 | patt2 -> res2 … | pattN -> resN Haskell func pattx_1 patty_1 = res1 func pattx_2 patty_2 = res2 … func pattx_N patty_N = resN match x with | patt1 when cond -> res1 func patt1 | cond = res1 x::x2 [1;2;3] ‘a list ‘a list -> ‘a list e as v x:x2 [1,2,3] [a] [a] -> [a] v @ e

  2. Типы данных в Haskell • Integer – число бесконечной разрядности • Int – машинное целое • Char, Bool • Float, Double – 4 и 8 байт соответственно • data T = V1 | V2 | … | Vn • data Maybe a = Nothing | Some a • (OCAML: type ‘a maybe = Nothing | Some of ‘a) • data Tree a = Leaf a | Branch (Tree a) (Tree a) • (OCAML: type ‘a tree = Leaf of ‘a | Branch of (‘a tree * ‘a tree)

  3. Классы в Haskell • Классы и типы данных – различные сущности в Haskell. • Классы объединяют типы данных (в т.ч. несуществующие на момент описания класса), на которых определен полиморфизм каких-либо функций • Можно описать новый тип данных, «причислить» его к классу и доопределить функции, требуемые спецификацией класса. • Спецификация класса ничего не говорит о внутреннем устроении типов данных. • Класс подобен интерфейсу Java.

  4. Как используются классы • Eq – класс, поддерживающий сравнение • class Eq a where (==) :: a -> a -> Bool • element :: (Eq a) => a -> [a] -> Bool • element _ [] = False • element e (x:_) | e == x = True • element e (_:xs) = element e xs

  5. Как используются классы • Num – класс числовых типов • Можно определить функцию, работающую только на типах данных, «выводимых» из Num: • f :: Num a => [a] -> [a] • f [] -> []f (x:xs) -> (x+1):(f xs)

  6. Как определяются классы • class Num a => MyNum a my_operation :: a -> a -> a my_operation x y = abs (x – y) • my_func x y z = (my_operation x y) / (my_operation y z) • Компилятор «выведет» ограничение типа для аргументов my_func: • my_func :: (MyNum a) => a -> a -> a -> a • Не возбраняется и программисту давать сигнатуры функций, не дожидаясь помощи компилятора

More Related