Size: a a a

2020 March 18

AK

Alexander Krivitskiy in rust_offtopic
polunin.ai
[1,2,3,4] => [4,3,2,1]
Аж интересно стало. Вот на псевдокоде
assert_eq([], reverse([]))
assert_eq([1], reverse([1]))
assert_eq([2,1], reverse([1,2]))
assert_eq([3,2,1], reverse([1,2,3]))
assert_eq([1,2,3,1], reverse([1,3,2,1]))

Дальше по индукции должно работать. А ну ломайте
источник

AZ

Alex Zhukovsky in rust_offtopic
у тебя нет никакой индукции в тестах, а конкретные assert_eq пройтти можно бесконечным числом функций
источник

AK

Alexander Krivitskiy in rust_offtopic
Alex Zhukovsky
у тебя нет никакой индукции в тестах, а конкретные assert_eq пройтти можно бесконечным числом функций
Я предполагаю, что если эти ассерты пройдут, то на списки длины > 4 функция так же отработает верно.
источник

AZ

Alex Zhukovsky in rust_offtopic
Alexander Krivitskiy
Я предполагаю, что если эти ассерты пройдут, то на списки длины > 4 функция так же отработает верно.
ну вот неправильно такое предполагать
источник

p

polunin.ai in rust_offtopic
Alexander Krivitskiy
Аж интересно стало. Вот на псевдокоде
assert_eq([], reverse([]))
assert_eq([1], reverse([1]))
assert_eq([2,1], reverse([1,2]))
assert_eq([3,2,1], reverse([1,2,3]))
assert_eq([1,2,3,1], reverse([1,3,2,1]))

Дальше по индукции должно работать. А ну ломайте
fn reverse(vec: Vec<i32>) -> Vec<i32> {
   if vec.len() >= 5 {
       panic!("");
   }
   vec.into_iter().rev().collect()
}
источник

AZ

Alex Zhukovsky in rust_offtopic
polunin.ai
fn reverse(vec: Vec<i32>) -> Vec<i32> {
   if vec.len() >= 5 {
       panic!("");
   }
   vec.into_iter().rev().collect()
}
заранее скажу "но ведь так никто не напишет!" - да, никто так не напишет
источник

AZ

Alex Zhukovsky in rust_offtopic
но в реальной жизни подобное и происходит очень часто
источник

AZ

Alex Zhukovsky in rust_offtopic
если функция чуть сложнее
источник

AZ

Alex Zhukovsky in rust_offtopic
о
источник

AZ

Alex Zhukovsky in rust_offtopic
я кажись придумал
источник

DS

Doge Shibu in rust_offtopic
Alex Zhukovsky
заранее скажу "но ведь так никто не напишет!" - да, никто так не напишет
Да пишут так, вон, посмотри кучу джава либ, где внутри валидация на эксепшенах
источник

DS

Doge Shibu in rust_offtopic
Вот прям точно так же
источник

DS

Doge Shibu in rust_offtopic
Всё компилится, а потом из глубин стек трейса либы приходит: ай-ай-ай, я такое не поддерживаю
источник

DS

Doge Shibu in rust_offtopic
(Причем без checked исключений, потому что их в джаве никто не любит)
источник

AK

Alexander Krivitskiy in rust_offtopic
Alex Zhukovsky
заранее скажу "но ведь так никто не напишет!" - да, никто так не напишет
Ок. А как тогда в хаскелле reverse реализовать? Там ведь то что функция кидает error в сигнатуре не указывается.
источник

AZ

Alex Zhukovsky in rust_offtopic
Alexander Krivitskiy
Ок. А как тогда в хаскелле reverse реализовать? Там ведь то что функция кидает error в сигнатуре не указывается.
источник

AZ

Alex Zhukovsky in rust_offtopic
не в хаскелле, а в идрисе, но можно
источник

AZ

Alex Zhukovsky in rust_offtopic
foldlRhs : (f : b -> a -> b) ->
          (init : b) ->
          (x : a) ->
          (xs : List a) ->
          foldl f init (xs ++ [x]) = f (foldl f init xs) x
foldlRhs f init x [] = Refl
foldlRhs f init x (y :: xs) = foldlRhs f (f init y) x xs

revCorrect : (xs : List a) ->
            (f : b -> a -> b) ->
            (init : b) ->
            foldl f init (revDumb xs) = foldr (flip f) init xs
revCorrect [] f init = Refl
revCorrect (x :: xs) f init = let rec = revCorrect xs f init in
                             rewrite sym rec in foldlRhs f init x (revDumb xs)
источник

AZ

Alex Zhukovsky in rust_offtopic
вот если тлдр
источник

AZ

Alex Zhukovsky in rust_offtopic
тут в 2раза больше кода, чем одна только функция разворота
источник