11. Языки высокого уровня
Клонирование других языков (лучше, по-своему)
Желание писать меньше кода (более специфичный,
подходящий к задачам)
Экономия времени и денег (время выполнения время
разработки)
+объективная реальность: развитие платформ,
масштабируемость
20. Зачем учить языки?
Это интересно
Расширяет горизонт
Помогает писать на основном языке
Лучше понимаете современные подходы
21. Зачем учить языки?
Это интересно
Расширяет горизонт
Помогает писать на основном языке
Лучше понимаете современные подходы
Расширяете доступный вам контент
22. Зачем учить языки?
Это интересно
Расширяет горизонт
Помогает писать на основном языке
Лучше понимаете современные подходы
Расширяете доступный вам контент
Можно, наконец, определиться со
специализацией
28. -- строки и символы
"это строка"
'a' -- символ
'строки только в двойных кавычках' -- error!
-- конкатенация
"Hello " ++ "world!" -- "Hello world!"
-- строка - лист символов
"СТРОКА" !! 0 -- 'С'
-- !! - обращение к индексу
29. -- листы базовая структура
[1, 2, 3, 4, 5]
[1..5]
['a'..'z']
-- могут быть бесконечными!
[1..]
[1..] !! 999 -- 1000 (soo lazy)
30. -- сложение
[1..5] ++ [6..10]
-- добавление в начало
0:[1..5] -- [0, 1, 2, 3, 4, 5]
-- базовые операции
head [1..5] -- 1
tail [1..5] -- [2, 3, 4, 5]
init [1..5] -- [1, 2, 3, 4]
last [1..5] -- 5
31. -- list comprehensions (генераторы листов)
[x*2 | x <- [1..5]] -- [2, 4, 6, 8, 10]
-- возможно условие
[x*2 | x <- [1..5], x*2 > 4] -- [6, 8, 10]
32. -- Tuple (кортеж)
-- в кортежах тип данных любой, но
-- длина фиксирована
("haskell", 1)
-- доступ к элементам
fst ("haskell", 1) -- "haskell"
snd ("haskell", 1) -- 1
33. -- Теперь о функциях
-- определяем функцию
add a b = a + b
-- используем
add 1 2 -- 3
-- можно так
1 `add` 2 -- 3
Зачем?
34. -- определяем свой оператор!
(//) a b = a `div` b
(//) a b = div a b
35 // 4 -- 8
К рекурсии!
35. -- Числа Фиббоначи (guard)
fib x
| x < 2 = x
| otherwise = fib (x - 1) + fib (x - 2)
-- Числа Фиббоначи (pattern)
fib 1 = 1
fib 2 = 2
fib x = fib (x - 1) + fib (x - 2)
36. -- Карринг(currying)
-- прокидывает недостающие аргументы
add a b = a + b
foo = add 10 -- на основе нашей функции
foo 5 -- 15
И это только самые основные основы!
38. Пример на JS
function sort(array, less) {
function swap(i, j) { var t=array[i]; array[i]=array[j];
array[j]=t }
function quicksort(left, right) {
if (left < right) {
var pivot = array[(left + right) >> 1];
var left_new = left, right_new = right;
39. Пример на JS
do {
while (less(array[left_new], pivot)
left_new++;
while (less(pivot, array[right_new])
right_new--;
if (left_new <= right_new)
swap(left_new++, right_new--);
} while (left_new <= right_new);
40. Пример на JS
quicksort(left, right_new);
quicksort(left_new, right);
}
}
quicksort(0, array.length-1);
return array;
}
42. Задание
Есть направленный граф, каждое ребро
имеет вес. Написать функцию,
возвращающую стоимость и оптимальный
маршрут между двумя вершинами.
1) на хаскелле
2) на любом незнакомом языке (лучше не
функциональном чтоб интереснее)