54
правки
Изменения
м
'''then return''' 1
'''then return''' 1
'''then return 1'''
'''then return 1'''
'''then return 1'''
'''then return''' 1
'''then return''' 1
Нет описания правки
'''forall''' <tex>x_i :</tex> разбиение <tex>x</tex>
'''if''' <tex>(p_1(x_1) == 1) \land (p_1(x_2) == 1) \land \ ... \ \land (p_1(x_n) == 1)</tex>
'''return''' 0
'''forall''' <tex>x_1, x_2 :</tex> разбиение <tex>x</tex>
'''if''' <tex>(p_1(x_1) == 1 \land p_2(x_2) == 1)</tex>
'''return''' 0
<tex>p(x)</tex>
'''if''' <tex> (p_1(x) == 1) \lor (p_2(x) == 1) </tex>
Перечислитель же для этого языка будет по очереди на один шаг запускать перечислители для <tex>L_1</tex> и <tex>L_2</tex> и выдавать по очереди слова из <tex>L_1</tex> и <tex>L_2</tex> соответственно.
<tex>p(x)</tex>
'''if''' <tex> (p_1(x) == 1) \land (p_2(x) == 1) </tex>
* Для языка <tex> L_1 \times L_2 :</tex>
<tex>p(\langle x, y \rangle)</tex>
'''if''' <tex> (p_1(x) == 1) \land (p_2(y) == 1) </tex>
* Для языка <tex> L_1^* :</tex>
'''forall''' <tex>x_i :</tex> разбиение <tex>x</tex>
'''if''' <tex>(p_1(x_1) == 1) \land (p_1(x_2) == 1) \land \ ... \ \land (p_1(x_n) == 1)</tex>
Перечислитель же строится следующим образом: запускаем перечислитель для <tex> L_1 </tex> в цикле по тайм-лимиту и запоминаем выданные им слова. При выдаче каждого нового слова перебираем все возможные перестановки уже выданных слов и выдаем их.
* Для языка <tex> L_1 L_2 : </tex>
'''forall''' <tex>x_1, x_2 :</tex> разбиение <tex>x</tex>
'''if''' <tex>(p_1(x_1) == 1 \land p_2(x_2) == 1)</tex>
Перечислитель же для <tex> L_1 L_2 </tex> строим следующим образом: запускаем одновременно перечислители для <tex> L_1 </tex> и <tex> L_2 </tex>, запоминая все выданные слова. При выдаче новых слов перебираем все возможные пары из запомненных слов и выдаем их конкатенацию.
}}