Crazy python
Jul. 20th, 2022 07:16 pmФункция выглядит как вычислимая примитивно-рекурсивная, но на самом деле невычислимая общерекурсивная!
Доказательство
def foo(i):
if i < 0 or i > 10:
return i
try:
print(f"{i} - 1")
return foo(i-1)
finally:
print(f"{i} + 1")
return foo(i+1)
print(foo(5))
На самом деле эта функция - чистое UB в питоне. После долгих лет рассказа о том, что в питоне нет UB.
Вот более интересный генератор последовательностей на той же базе.
def foo(i):
if i < 0 or i > 10:
return i
print(i, end='', sep='')
try:
return foo(i-1)
finally:
return foo(i+1)
print(foo(5))
Чем не генератор случайных чисел?
no subject
Date: 2022-07-20 04:52 pm (UTC)What's ub?
(no subject)
From:no subject
Date: 2022-07-20 05:22 pm (UTC)Чё это UB? Language Reference § 8.4 The
trystatement:Банальная нетерминированная взаимная рекурсия между foo(1) и foo(0), с коротким заходом в foo(-1) на каждом круге.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2022-07-20 05:46 pm (UTC)Так, а вот продолжать рекурсию при получении
KeyboardInterrupt— это подстава.(no subject)
From:(no subject)
From: