274.49K
Category: programmingprogramming

Функциональное программирование. Лекция 1

1.

Функциональное
программирование
Лекция 1

2.

Источники информации
• Лекции
• Erlang.org
• Книжки
• Ответы на внятные вопросы по почте
[email protected]

3.

Источники информации

4.

Источники информации

5.

Целые числа
• -234
• 0
• 10
• 1000000000
• 2#1010
• 16#ЕА

6.

Интерпретатор Erlang

7.

Интерпретатор Erlang
1> -234.
-234
2> 2#1010.
10
3> $А.
65
4> 54>
4> 4.
1
4> 5-.
* 1: syntax error before: '.'
5> q().

8.

Действительные числа
17.368
-56.654
1.234Е-10
0.0000000001234

9.

Арифметические операции

10.

Арифметические операции
1> +1.
1
2> -1.
-1
3> 11 div 5.
2
4> 11 rem 5.
1
5> (12 + 3) div 5.
3
б> (12 + 3)/5.
3.00000

11.

Арифметические операции
7> 2*2*3.14.
12.5600
8> 1+2+3+5+8 .
19
9> 2*2 + -3*3.
-5
10> 1/2 + (2/3 + (3/4 + (4/5))) - 1.
1.71667
13> 2.0 rem 3.
** exception error: bad argument in an arithmetic expression
in operator rem/2
called as 2.0 rem 3

12.

Атомы
January
fooBar
alfa21
start
withlowercase
node@ramone
true
false

13.

Атомы
'January'
'a space'
'Anything inside quotes{}#@ \n\012'
'[email protected]'

14.

Атомы
1> abc.
abc
2> 'abc_123_CDE'.
abc_123_CDE
3> 'using spaces'.
'using spaces'
4> 'lowercaseQuote'.
lowercaseQuote
5> '\n\n' .
'\n\n'

15.

Атомы
6> '1
6> 2
б> 3
6> 4'.
‘1\n2\n3\n4'
7> 'funny characters in quotes: !@#$%л&*()-+'.
'funny characters in quotes: !@#$%л&*()-+'
8> '1+2+3'.
'1+2+3'
9> 'missing a full stop.'
9> .
'missing a full stop.'

16.

Логические значения
1> 1==2.
false
2> 1<2.
true
3> a>z.
false
5> is_boolean(9+6).
false
б> is_boolean(true).
true

17.

Логические операторы

18.

Логические операторы
1> not((1<3) and (2==2)).
false
2> not((1<3) or (2==2)).
false
3> not((1<3) xor (2==2)).
true

19.

Кортежи
{123, bed}
{123, def, abc}
{abc, {def, 123}, ghi}
{}
{person, 'Joe', 'Armstrong'}
{person, 'Mike', 'Williams'}
{123}

20.

Функции для работы с кортежами
1> tuple_size({abc, {def, 123}, ghi}).
3
2> element(2,{abc, {def, 123}, ghi}).
{def,123}
3> setelement(2, {abc, {def, 123}}, def).
{abc,def}
4> {1,2}<{1,3}.
true
5> {2,3}<{2,3}
false
6> {1,2}=={2,3}
false

21.

Списки
[January, february, march]
[a, [b,[c,d,e],f] , g]
[]
[{person,'Joe','Armstrong'},{person,'Robert','Vir
ding'},{person,'Mike','Williams'}]
[72,101,108,108,111,32,87,111,114,108,100]
[$H,$e,$l,$l,$o,$ ,$W,$o,$r,$l,$d]

22.

Символы и строки
1> $А.
65
2> $А + 32.
97
3> $а.
97
4> [65,66,67].
"ABC"
5> [67,$А+32,$А+51].
"Cat"
6> [72,101,108,108,111,32,87,111,114,108,100].
"Hello World"
7> [$H,$e,$l,$l,$o,$ ,$W,$o,$r,$l,$d].
"Hello World"

23.

Внутреннее представление списков

24.

Многоуровневый список

25.

Создание и обработка списков
[Элемент | Список] или [ ]
• [one, two, three, four]
• [one, two, three, four|[] ]
• [one, two|[three, four]]
• [one, two|[three|[four|[]] ]
• [one|[two|[three|[four| []]]] ]

26.

Создание и обработка списков
1> lists:max([l,2,3]).
3
2> lists:reverse([1,2,3]).
[3,2,1]
3> lists:sort([2,l,3]).
[1,2,3]
4> lists:sum([3,4,10,7,9]).
33
7> lists:delete(2,[l,2,3,2,4,2]).
[1,3,2,4,2]
5> lists:last([l,2,3]).
3
8> lists:member(5,[1,24]).
False
9> hd([1,2,3,4]).
1

27.

Создание и обработка списков
10> tl([1,2,3,4]).
[2,3,4]
11> lists:member(24,[1,24]).
True
12> lists:nth(2,[3,4,16,7,9]).
4
13> lists:length([l,2,3]).
** exception error: undefined function lists:length/1
14> length([l,2,3]).
3

28.

Создание и обработка списков
1> [monday, tuesday, Wednesday].
[monday,tuesday,Wednesday]
2>
2> [1|[2|[3|[]]]].
[1,2,3]
3> [a, mixed, "list", {with,4}, 'data types'].
[a,mixed,"list",{with,4},'data types']
4> [l,2,3]++[4,5,6].
[1,2,3,4,5,6]
5> [l,2,2,3,4,4]--[2,4].
[1,2,3,4]
6> "A long string I have split "
6> "across several lines".
"A long string I have split across several lines"

29.

Создание и обработка списков
7> [1,2,3]-- [1,2]-- [1,2]
[1,2,3]
8> ([1,2,3]--- [1,3])--- [1,2]
[]
English     Русский Rules