Преобразовать многомерный список цифр так, чтобы шли сначала положительные, а затем отрицательные элементы - 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.

  1. Функция zip принимает два списка, и если один из них пустой, возвращает второй. Если оба списка пустые, возвращает пустой список. Если оба не пустые, то возвращает список, в котором первый элемент — первый элемент первого списка, второй элемент — первый элемент второго списка, и так далее.
  2. Функция foo принимает список lst и возвращает список, в котором сначала идут положительные элементы, а затем отрицательные. Для этого сначала список lst делится на две части с помощью partition: первая часть — положительные числа, вторая — отрицательные. Затем функция zip применяется к этим двум спискам, чтобы объединить их в один список, в котором сначала идут положительные, а затем отрицательные элементы.
  3. В конце кода вызывается функция foo с аргументом (1 2 3 0 -3 -6 1 -5 -3). Результатом будет (1 -3 2 -6 3 -5 0 -3 1).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы