Редактирование: МФСП, 04 семинар (от 22 сентября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
- | + | Спи ски | |
- | + | Спискм в RSL нз. упорядч. типизир. нбр эл-тов, эл-иы могут пвторяться. Списк в угловых скбкх, прядок вжен, все элементы дного типа | |
<1, 3, 1, 5, 4> | <1, 3, 1, 5, 4> | ||
<false, true> | <false, true> | ||
- | Для | + | Для спискв, кк и для всех типов в rsl пр. две перации: =, ≠ |
- | Для | + | Для список опр. дв типа: T-list, T-inflist (по ANSI); T*, T^ω |
Определён пустой список: <> | Определён пустой список: <> | ||
Строка 14: | Строка 14: | ||
пр. синтаксис <v1..vn> | пр. синтаксис <v1..vn> | ||
- | Опр. | + | Опр. синтксис: <expr|limit> |
Пример: | Пример: | ||
- | <2 | + | <2*n|n in <0..3>> |
- | + | Список может быть опр. для лдюбго ип, не олько бзового: мнжества, списка... | |
- | + | ||
- | + | Для того, чтобы добрться д эл-та, исп. перация 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^ω | + | hd: T^ω стрелочк с влной T |
hd<> = chaos | hd<> = chaos | ||
- | Tail: | + | Tail: Хвст |
- | tl: T^ω | + | tl: T^ω стрпелчк с волной T^ω |
tl<> = chaos | tl<> = chaos | ||
Len: длина списка | Len: длина списка | ||
- | len:T^ω | + | len:T^ω стрелочк с влной Nat |
- | len<n|n & | + | len<n|n ˙ is_prime> == chaos |
- | + | elems: Элементы | |
- | elems: T^ω | + | elems: T^ω стрелочк с волнлй T-infset |
- | + | ||
- | + | inds: Индексы | |
- | inds: T^ω | + | inds: T^ω стрелочк с волнлй Nat-infset |
- | + | ||
- | + | Задача: пр. функцию length, которя выч. длину списка | |
- | Задача: пр. функцию length, которя | + | |
'''value''' | '''value''' | ||
- | length: T | + | length: T* → Nat |
- | length(l) | + | length(l) == if l ≠ <> then 1 + length(tl l) else 0 end |
- | length2: T | + | length2: T* → Nat |
- | length2(l) | + | length2(l) == card inds l |
- | ==Case== | ||
Конструкция case: | Конструкция case: | ||
'''case''' ''cond'' '''of''' | '''case''' ''cond'' '''of''' | ||
Строка 78: | Строка 66: | ||
'''end''' | '''end''' | ||
- | + | Как это исп. для работы со спискми (на том же примере): | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | Как это | + | |
'''value''' | '''value''' | ||
- | length: T | + | length: T* → Nat |
- | length(l) | + | length(l) == |
'''case''' l '''of''' | '''case''' l '''of''' | ||
<> → 0 | <> → 0 | ||
Строка 106: | Строка 75: | ||
'''end''' | '''end''' | ||
- | + | Задач. Опр. функцию Pascal, гненер. тр. Пскаля д урвня n вкл. Результат --- список списков. Например: | |
<<1>, | <<1>, | ||
<1,1>, | <1,1>, | ||
Строка 114: | Строка 83: | ||
'''type''' | '''type''' | ||
- | T1={i | i:Nat & | + | T1={i | i:Nat ˙ i ≥ 1} |
'''value''' | '''value''' | ||
- | pascal:T1 → (T1 | + | pascal:T1 → (T1*)* |
- | pascal(i) | + | pascal(i) == if i=1 then <<1>> else pascal(i-1)^<<1>^<pascal(i-1)(i-1)(j)+pascal(i-1)(i-1)(j-)|j:T1 ˙ j in <2..i-1>>^<1>> |
- | Задача. Реализовать функцию rev, | + | Задача. Реализовать функцию rev, кторая взвр. реверсивную версию списка. |
'''value''' | '''value''' | ||
- | rev:T | + | rev:T* → T* |
- | rev(l) | + | rev(l) == if l = <> then <> else rev(tl l)^ hd l end |
Нерекурсивно, с пробеганием индекса | Нерекурсивно, с пробеганием индекса | ||
'''value''' | '''value''' | ||
- | rev:T | + | rev:T* → T* |
- | rev(l) | + | rev(l) == <l(len(l)+1-n)|n in <1..len(n)>> |
Даны следующие типы: | Даны следующие типы: | ||
'''type''' | '''type''' | ||
- | Page=Line | + | Page=Line*, |
- | Line=Word | + | Line=Word*, |
Word | Word | ||
- | (стандартный тип text в rsl | + | (стандартный тип text в rsl н смом деле text=char*) |
- | Для | + | Для тких типов тр. опр. функцию is_on, проверяющую, встречется ли данне слово на странице |
'''value''' | '''value''' | ||
is_on: Word × Page → Bool | is_on: Word × Page → Bool | ||
- | is_on(w,p) | + | is_on(w,p) == if p=<> then False else w ∈ elems hd p ∨ is_on(w, tl p) end |
- | + | ||
is_on: Word × Page → Bool | is_on: Word × Page → Bool | ||
- | is_on(w,p) | + | is_on(w,p) == ∃ i : Nat ˙ (i ∈ {1..len(p)}) ∧ (w ∈ elems p(i)) |
- | Определить number_of, | + | Определить number_of, пдсчитывающую количество вхождений слоов в страницу |
'''value''' | '''value''' | ||
number_of: Word × Page → Nat | number_of: Word × Page → Nat | ||
number_of(w,p) → if p=<> then 0 else number_of_line(w,l) + number_of(w, tl p) | number_of(w,p) → if p=<> then 0 else number_of_line(w,l) + number_of(w, tl p) | ||
- | + | ||
number_of_line: Word × Line → Nat | number_of_line: Word × Line → Nat | ||
number_o_line(w,l) → if l=<> then 0 else (if w=hd l then 1 else 0) + number_of_line(w, tl l) | number_o_line(w,l) → if l=<> then 0 else (if w=hd l then 1 else 0) + number_of_line(w, tl l) | ||
Строка 160: | Строка 129: | ||
number_of: Word × Page → Nat | number_of: Word × Page → Nat | ||
- | number_of(w,p) → | + | number_of(w,p) → {(i,j)|(i:Nat˙j:Nat; ˙ p(i)(j)=w ∧ i∈ p ∧ ∈p(i)} |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | <math>rng:(T[A] \overset{m}{\rightarrow} T[r] ) \rightarrow T[r]-infset</math> | ||
{{МФСП}} | {{МФСП}} | ||
{{Lection-stub}} | {{Lection-stub}} |