Преобразовать многомерный список цифр так, чтобы шли сначала положительные, а затем отрицательные элементы - Lisp
Формулировка задачи:
Добрый день. Помогите пожалуйста сделать в Scheme: преобразовать многомерный список цифр таким образом чтобы шли сначала положительные, а затем отрицательные элементы.
Решение задачи: «Преобразовать многомерный список цифр так, чтобы шли сначала положительные, а затем отрицательные элементы»
textual
Листинг программы
;; racket-lang.org (define (zip l r) (cond ((null? l) r) ((null? r) l) (else (cons (first l) (cons (first r) (zip (rest l) (rest r))))))) (define (foo lst) (let-values (((r l) (partition negative? lst))) (zip l r))) (foo '(1 2 3 0 -3 -6 1 -5 -3)) ; '(1 -3 2 -6 3 -5 0 -3 1)
Объяснение кода листинга программы
В данном коде используется язык программирования Racket.
- Функция
zip
принимает два списка, и если один из них пустой, возвращает второй. Если оба списка пустые, возвращает пустой список. Если оба не пустые, то возвращает список, в котором первый элемент — первый элемент первого списка, второй элемент — первый элемент второго списка, и так далее. - Функция
foo
принимает списокlst
и возвращает список, в котором сначала идут положительные элементы, а затем отрицательные. Для этого сначала списокlst
делится на две части с помощьюpartition
: первая часть — положительные числа, вторая — отрицательные. Затем функцияzip
применяется к этим двум спискам, чтобы объединить их в один список, в котором сначала идут положительные, а затем отрицательные элементы. - В конце кода вызывается функция
foo
с аргументом(1 2 3 0 -3 -6 1 -5 -3)
. Результатом будет(1 -3 2 -6 3 -5 0 -3 1)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д