SQL и полнота по Тьюрингу
От: Tonal- Россия www.promsoft.ru
Дата: 15.07.08 18:47
Оценка: 18 (3)
До меня тут доехало, что с введением CTE (common table expressions) язык SQL стал тьюринг-полным.
Вот несколько примеров:
--Генератор последовательности целых чисел:
with recursive
  gen (n) as (
    select 1 from RDB$DATABASE
    union all
    select gen.n + 1 from gen
  )
select n from gen

--Генератор последовательности Фибоначчи:
with recursive
  gen (n, fib1, fib2) as (
    select 1, 1, 1 from RDB$DATABASE
    union all
    select gen.n + 1, gen.fib1 + gen.fib2, gen.fib1 from gen where n < :p
  )
select n, fib2 as fib from gen

--Факториал:
with recursive
  gen (n, fact) as (
    select 1, 1 from RDB$DATABASE
    union all
    select gen.n + 1, gen.fact * (gen.n + 1) from gen where n < :p
  )
select n, fact from gen
where n = :p


P.S. В примерах используется диалект Firebird 2.1
... << RSDN@Home 1.2.0 alpha 4 rev. 1065>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.