op .longest(a, b); return if #a > #b then a else b end; end .longest; procedure lcs(a, b); if exists empty in {a, b} | #empty = 0 then return empty; elseif a(1) = b(1) then return a(1) + lcs(a(2..), b(2..)); else return lcs(a(2..), b) .longest lcs(a, b(2..)); end; end lcs;