Редактирование: МФСП, 04 семинар (от 22 сентября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 1: Строка 1:
=Списки=
=Списки=
-
Списки в RSL — упорядоченный типизированный набор элементов, элементы могут повторяться. Список в угловых скобках, порядок важен, все элементы одного типа
+
Спискм в RSL нз. упорядч. типизир. набор эл-тов, эл-иы могут пвторяться. Списк в угловых скбкх, прядок вжен, все элементы дного типа
<1, 3, 1, 5, 4>
<1, 3, 1, 5, 4>
<false, true>
<false, true>
-
Для списков, как и для всех типов в rsl определены две операции: =, &ne;
+
Для спискв, кк и для всех типов в rsl пр. две перации: =, &ne;
-
Для списков определено два типа: T-list(для конечных), T-inflist(для бесконечных) (по ANSI); T&times;, T^&omega;
+
Для список опр. дв типа: T-list(для конечных), T-inflist(для бесконечных) (по ANSI); T&times;, T^&omega;
Определён пустой список: <>
Определён пустой список: <>
Строка 14: Строка 14:
пр. синтаксис <v1..vn>
пр. синтаксис <v1..vn>
-
Опр. синтаксис: <expr|limit>
+
Опр. синтксис: <expr|limit>
Пример:
Пример:
<2&times;n|n in <0..3>>
<2&times;n|n in <0..3>>
 +
<3..7> == < 3,4,5,6,7>
 +
<7..3 > == <>
-
<3..7> &equiv; < 3,4,5,6,7>
+
Список может быть опр. для лдюбго ип, не олько бзового: мнжества, списка...
-
<7..3 > &equiv; <>
+
-
Список может быть определён для любого типа, не только базового: множества, списка...
+
Для того, чтобы добрться д эл-та, исп. перация index, "()", в которой ук. номер эл-та:
-
 
+
-
==Индексация==
+
-
 
+
-
Для того, чтобы добраться до элемента, используется операция index, "()", в которой указан номер элемента:
+
<1,4,5,6>(2) = 4
<1,4,5,6>(2) = 4
<2,5,3>,<3,1>>(2) = <3,1>
<2,5,3>,<3,1>>(2) = <3,1>
<2,5,3>,<3,1>>(2)(2) = 1
<2,5,3>,<3,1>>(2)(2) = 1
- 
-
Если по не существующему номеру, то возвращает chaos.
 
Операции со списками:
Операции со списками:
-
===Конкатенация===
+
Конктенция:
-
Конкатенацию можно применять только к конечным спискам, второй элемент может быть и конечным, и бесконечным. Результат соответствующего типа
+
Конк. мжно применять только к кнеч. спискм, второй эл-т мжет быть и конеч, и беск. Рез-т соотв. типа
l1^l2
l1^l2
-
^:T-list x T-inflist -> T-inflist
 
Head: Первый элемент
Head: Первый элемент
-
hd: T^&omega; <math>\tilde\rightarrow</math> T
+
hd: T^&omega; стрелочк с влной T
hd<> = chaos
hd<> = chaos
-
Tail: Хвост
+
Tail: Хвст
-
tl: T^&omega; <math>\tilde\rightarrow</math> T^&omega;
+
tl: T^&omega; стрпелчк с волной T^&omega;
tl<> = chaos
tl<> = chaos
Len: длина списка
Len: длина списка
-
len:T^&omega; <math>\tilde\rightarrow</math> Nat
+
len:T^&omega; стрелочк с влной Nat
len<n|n &bull; is_prime> &equiv; chaos
len<n|n &bull; is_prime> &equiv; chaos
-
===elems: Элементы===
+
elems: Элементы
-
elems: T^&omega; <math>\tilde\rightarrow</math> T-infset
+
elems: T^&omega; стрелочк с волнлй T-infset
-
Возвращает множество элементов списка
+
-
===inds: Индексы===
+
inds: Индексы
-
inds: T^&omega; <math>\tilde\rightarrow</math> Nat-infset
+
inds: T^&omega; стрелочк с волнлй Nat-infset
-
inds FL={1..len FL}
+
-
==Задача==
+
Задача: пр. функцию length, которя выч. длину списка
-
Задача: пр. функцию length, которя вычисляет длину списка
+
'''value'''
'''value'''
length: T&times; &rarr; Nat
length: T&times; &rarr; Nat
Строка 69: Строка 60:
length2(l) &equiv; card inds l
length2(l) &equiv; card inds l
-
==Case==
 
Конструкция case:
Конструкция case:
'''case''' ''cond'' '''of'''
'''case''' ''cond'' '''of'''
Строка 78: Строка 68:
'''end'''
'''end'''
-
===Список чисел Фибоначчи===
+
Как это исп. для работы со спискми (на том же примере):
-
type Nat1= {n:Nat &circle; n > 0 }
+
-
value Fib:Nat1->Nat1
+
-
Fib(n) &equiv;
+
-
case n of
+
-
1->1
+
-
2->2
+
-
_->Fib(n-2)+Fib(n-1)
+
-
end
+
-
 
+
-
=== ===
+
-
'''value''' rev:int-list&times; &rarr; T&times;
+
-
rev(l) &equiv;
+
-
case L of
+
-
<> -> <>
+
-
<_i>^L2 -> rev(L2)^<_i>
+
-
end
+
-
 
+
-
 
+
-
Как это используется для работы со списками (на том же примере):
+
'''value'''
'''value'''
length: T&times; &rarr; Nat
length: T&times; &rarr; Nat
Строка 106: Строка 77:
'''end'''
'''end'''
-
Задача. Определить функцию Pascal, генерирующую треугольник Паскаля до уровня n включительно. Результат --- список списков. Например:
+
Задач. Опр. функцию Pascal, гненер. тр. Пскаля д урвня n вкл. Результат --- список списков. Например:
<<1>,
<<1>,
<1,1>,
<1,1>,
Строка 120: Строка 91:
pascal(i) &equiv; if i=1 then <<1>> else pascal(i-1)^<<1>^<pascal(i-1)(i-1)(j)+pascal(i-1)(i-1)(j-)|j:T1 &bull; j in <2..i-1>>^<1>>
pascal(i) &equiv; if i=1 then <<1>> else pascal(i-1)^<<1>^<pascal(i-1)(i-1)(j)+pascal(i-1)(i-1)(j-)|j:T1 &bull; j in <2..i-1>>^<1>>
-
Задача. Реализовать функцию rev, которая возвращает реверсивную версию списка.
+
Задача. Реализовать функцию rev, кторая взвр. реверсивную версию списка.
'''value'''
'''value'''
Строка 138: Строка 109:
Word
Word
-
(стандартный тип text в rsl на самом деле text=char&times;)
+
(стандартный тип text в rsl н смом деле text=char&times;)
-
Для таких типов требуется определить функцию is_on, проверяющую, встречается ли данне слово на странице
+
Для тких типов тр. опр. функцию is_on, проверяющую, встречется ли данне слово на странице
'''value'''
'''value'''
Строка 149: Строка 120:
is_on(w,p) &equiv; &exist; i : Nat &bull; (i &isin; {1..len(p)}) &and; (w &isin; elems p(i))
is_on(w,p) &equiv; &exist; i : Nat &bull; (i &isin; {1..len(p)}) &and; (w &isin; elems p(i))
-
Определить number_of, подсчитывающую количество вхождений слов в страницу
+
Определить number_of, пдсчитывающую количество вхождений слоов в страницу
'''value'''
'''value'''
Строка 160: Строка 131:
number_of: Word &times; Page &rarr; Nat
number_of: Word &times; Page &rarr; Nat
-
number_of(w,p) &rarr; card {(i,j)|(i:Nat&bull;j:Nat; &bull; p(i)(j)=w &and; i&isin; p &and; &isin;p(i)}
+
number_of(w,p) &rarr; {(i,j)|(i:Nat&bull;j:Nat; &bull; p(i)(j)=w &and; i&isin; p &and; &isin;p(i)}
-
 
+
-
=== еще задачки ===
+
-
является упорядоченным?
+
-
value isStore: Int-list &right; bool
+
-
isStore(l)= &forall; i:int &bull; i >= 1; &and; i < len(l) => l(i+1) > l(i)
+
-
 
+
-
==== длина списка ====
+
-
value len2: Elem-list-> Nat
+
-
len2(E) &equal; ( if (E=<>) then 0 else 1+len2(tl E ) end )
+
-
 
+
-
len3(E) - card inds E
+
-
==== удаляем заданный элем-т из списка ====
+
-
value del: E-list &times; E &rarr; E-list
+
-
del(l, x): &equal; < E(i) | i in <1..len L > &bull; L(i) != x >
+
-
 
+
-
==== подсчет ====
+
-
value numOf: E-list &times; E -> Int
+
-
NumberOf(L,x) = if ( LL=<> ) then 0 else
+
-
if( hd(L) = x ) then NumberOf( tl L, x ) +1 else NumberOf( tl L, x)
+
-
 
+
-
==отображения==
+
-
<math>[3 \rightarrow , 5 \rightarrow false](1) = chaos</math>
+
-
 
+
-
операция взятия домена
+
-
 
+
-
<math>dom:(T[d] \overset{m}{\rightarrow} T[r] ) \rightarrow T[d]-infset</math>
+
-
<math>rng:(T[A] \overset{m}{\rightarrow} T[r] ) \rightarrow T[r]-infset</math>
 
{{МФСП}}
{{МФСП}}
{{Lection-stub}}
{{Lection-stub}}

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы