Преобразовать многомерный список цифр так, чтобы шли сначала положительные, а затем отрицательные элементы - Lisp

Узнай цену своей работы

Формулировка задачи:

Добрый день. Помогите пожалуйста сделать в Scheme: преобразовать многомерный список цифр таким образом чтобы шли сначала положительные, а затем отрицательные элементы.

Решение задачи: «Преобразовать многомерный список цифр так, чтобы шли сначала положительные, а затем отрицательные элементы»

textual
Листинг программы
  1. ;; racket-lang.org
  2. (define (zip l r)
  3.   (cond ((null? l) r)
  4.         ((null? r) l)
  5.         (else (cons (first l)
  6.                     (cons (first r)
  7.                           (zip (rest l) (rest r)))))))
  8.  
  9. (define (foo lst)
  10.   (let-values (((r l) (partition negative? lst)))
  11.     (zip l r)))
  12.  
  13. (foo '(1 2 3 0 -3 -6 1 -5 -3))
  14. ; '(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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы