Я удалил set smartindent
из ~/.vimrc
, но он все еще не отключил smartindent. Когда я открыл файл .py и запустил :set smartindent?
, он отобразил smartindent
.
Оказывается, что далее в ~/.vimrc
была следующая строка:
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
^^^^^^^^^^^
Once Я удалил «smartindent» из этой строки, после чего smartindent был окончательно отключен, и мои комментарии снова были отложены.
Для полноты картины, версия, которая работает как с пустыми, так и с бесконечными списками.
rotate :: Int -> [a] -> [a]
rotate _ [] = []
rotate n xs = zipWith const (drop n (cycle xs)) xs
Затем
Prelude> rotate 2 [1..5]
[3,4,5,1,2]
Простое решение с использованием функции cycle
, которая создает бесконечное повторение списка ввода:
rotate :: Int -> [a] -> [a]
rotate n xs = take (length xs) (drop n (cycle xs))
, затем
> rotate 2 ["#","@","#","#"]
["#","#","#","@"].
Зачем усложнять?
rotate n xs = bs ++ as where (as, bs) = splitAt n xs
Я очень новичок в Haskell, поэтому ответ М.Гвинн был легок для понимания. В сочетании с комментарием , предлагающим альтернативный синтаксис , я попытался заставить его работать в обоих направлениях.
rotate :: Int -> [a] -> [a]
rotate n xs = take lxs . drop (n `mod` lxs) . cycle $ xs where lxs = length xs
Таким образом, rotate (-1) [1,2,3,4]
дает вам тот же результат, что и rotate 3 [1,2,3,4]
.
Я подумал, что должен был добавить это, потому что drop
ping меньше 0 элементов ничего не делает, поэтому мой предпочтительный ответ дает «неправильные» (по крайней мере, сбивающие с толку) результаты с отрицательными значениями для параметра n
.
Интересной частью этого решения является то, что оно сочетает в себе «полноту» для отрицательных вращений с обработкой пустых списков. Благодаря лени Хаскелла, он также дает правильные результаты для rotate 0 []
.
Попытка новичка:
myRotate :: Int -> [String] -> [String]
myRotate 0 xs = xs
myRotate n xs = myRotate (n-1) (last xs : init xs)
Не очень быстро для больших списков, но достаточно:
rotate :: Int -> [a] -> [a]
rotate n xs = iterate rot xs !! n
where
rot xs = last xs : init xs
Например:
> rotate 2 ["#","@","#","#"]
["#","#","#","@"]
rotate :: Int -> [a] -> [a]
rotate n xs = drop k xs ++ take k xs
where k = length xs - n
Эта функция поворачивается на n мест вправо.