f n = 1 + 1/f (n-1)
Сколько получится?
φ
= 1.618…
FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.
Email: Нажмите что бы посмотреть
s1 ? s1+n
s2 ? s2+sin n
i ? i+1
p ? p*i
s ? s+p*i
с
с
с
с
Где кончается правило и начинается следующее?
Двумерный синтаксис
(off-side rule)
Запоминаем позицию первой лексемы после let (i в примере)
Правее ? продолжение правила
На том же уровне ? новое правило
Левее ? конец конструкции
Правильное решение 2
minlist [x] = x
minlist (x:xs) =
let m = minlist xs
in if x < m then x else m
Правильное решение 3
Используем min
minlist [x] = x
minlist (x:xs) =
min x (minlist xs)
zip (x:xs) (y:ys) =
(x,y) : zip xs ys
zip [] _ = []
zip _ [] = []
Или
zip _ _ = []
И в лямбда-выражениях: слева от -> могут быть шаблоны
map (\(x, y) -> x+y)) xs
[(1,2), (3,4)]
? [3, 7]
Похожая вещь в С++:
tie
tie(s, p) = areaPerim(10);
Pt – конструктор
Совсем не то, что конструктор в обычных языках ☹
Задается в data
Может использоваться в pattern matching
Начинается с заглавной буквы
Имя может совпадать с именем data:
data Point = Point Integer Integer
Пример функции: hello
Person -> строка-привествие
hello (Student name _ _) =
"Привет, " ++ name
hello (Professor name _ ) =
"Здравстуйте, профессор "
++ name
Еще пример: вместо enum:
data Suit =
Spade | Heart | Club | Diamond
Кстати: deriving Show
data Tree = Empty |
Node Integer Tree Tree
deriving Show
data Point = Pt Integer Integer
deriving Show
чтобы можно было печатать
Еще вариант
check cond [] = False
check cond (x:xs) = cond x || check cond xs
Стиль Haskell!!
(использовать функции высшего порядка)
Еще вариант, без if
checkDifferent (x:xs) =
not any (\t -> t == x) xs &&
checkDifferent xs
Более эффективное рещение?
N Log N
Например, сначала отсортировать
Можно задавать часть параметров (только несколько первых)
Получается функция от оставшихся параметров
f 1 2 4 – функция от x
f 1 2 – функция от с и x
f 1 – функция от b, c и x
Можно использовать при определении функции
f1 = f 1 2 4