ВУЗ:
Составители:
Рубрика:
41
12. Немного о совыражениях – coexpression
В отличие от генераторов, рассмотренных ранее,
coexpression генерирует новое значение, если это возможно, при
каждом новом обращении к нему. Правда, так называемые «реге-
нерационные» совыражения могут генерировать от начала, но это
достигается за счет создания нового совыражения.
Coexpression нужно создать при помощи оператора create, а
затем активировать при помощи @, чтобы получить результат:
procedure main()
s:="qwertyuiop"
x:=create(!s)
writes(" ",*x)
writes(" ",@x)
writes(" ",*x)
writes(" ",@x)
writes(" ",*x)
end
Выход: 0 q 1 w 2
В данном случае *x – дает число сгенерированных значений.
Пример.
Пронумеруем строки входного файла, перезаписывая их в
выходной файл outf.txt:
procedure main(args)
f:=open(args[1])
outf:=open("outf.txt","wt")
x1:=create(seq())
while Sf:=!f do write(outf,@x1," ",Sf)
end
Совыражения могут передаваться в процедуры в качестве
параметров:
...............
proc1(create !s)
..............
procedure proc1(C)
42
return(@C)
end
Вызов proc{e1,e2,...,eN} эквивалентен proc([e1,e2,...,eN]), где
все ei – совыражения.
Для того чтобы понять, как работают «совыражения» в ре-
жиме псевдопараллельного выполнения, приведем два примера, не
пожалев места на странице.
.........................
S1:="0123456789"
S2:="abcdefghik"
a:=create !S1
b:=create !S2
while sim1:=@a do
{
writes(" ",sim1)
while sim2:=@b do writes(" ",sim2)
write()
}
.........................
Выход:
0 a b c d e f g h i k
1
2
3
4
5
6
7
8
9
Совыражение b мы разрядили в один прием, и далее печа-
таются только значения совыражения a.
А теперь заменим второе while на every:
.........................
while sim1:=@a do
12. Немного о совыражениях – coexpression return(@C)
end
В отличие от генераторов, рассмотренных ранее,
coexpression генерирует новое значение, если это возможно, при Вызов proc{e1,e2,...,eN} эквивалентен proc([e1,e2,...,eN]), где
каждом новом обращении к нему. Правда, так называемые «реге- все ei – совыражения.
нерационные» совыражения могут генерировать от начала, но это
достигается за счет создания нового совыражения. Для того чтобы понять, как работают «совыражения» в ре-
Coexpression нужно создать при помощи оператора create, а жиме псевдопараллельного выполнения, приведем два примера, не
затем активировать при помощи @, чтобы получить результат: пожалев места на странице.
procedure main() .........................
s:="qwertyuiop" S1:="0123456789"
x:=create(!s) S2:="abcdefghik"
writes(" ",*x) a:=create !S1
writes(" ",@x) b:=create !S2
writes(" ",*x) while sim1:=@a do
writes(" ",@x) {
writes(" ",*x) writes(" ",sim1)
end while sim2:=@b do writes(" ",sim2)
Выход: 0 q 1 w 2 write()
В данном случае *x – дает число сгенерированных значений. }
.........................
Пример. Выход:
Пронумеруем строки входного файла, перезаписывая их в 0abcdefghik
выходной файл outf.txt: 1
procedure main(args) 2
f:=open(args[1]) 3
outf:=open("outf.txt","wt") 4
x1:=create(seq()) 5
while Sf:=!f do write(outf,@x1," ",Sf) 6
end 7
8
Совыражения могут передаваться в процедуры в качестве 9
параметров: Совыражение b мы разрядили в один прием, и далее печа-
............... таются только значения совыражения a.
proc1(create !s) А теперь заменим второе while на every:
.............. .........................
procedure proc1(C) while sim1:=@a do
41 42
Страницы
- « первая
- ‹ предыдущая
- …
- 19
- 20
- 21
- 22
- 23
- …
- следующая ›
- последняя »
