ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »