Определить функцию высшего порядка - Lisp (229758)

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

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

Здравствуйте! Имеется функция рекурсивной сортировки списка:
Листинг программы
  1. (defun SORT (list)
  2. (if list
  3. ((lambda (elem result)
  4. (cond
  5. ((null result) (cons elem nil))
  6. ((= elem (car result)) result)
  7. ((> elem (car result)) (cons elem result))
  8. (T (cons (car result) (SORT (cons elem (cdr result)))))))
  9. (car list)
  10. (SORT (cdr list)))))
Ее нужно переделать с использованием функции высшего порядка (funcall).

Решение задачи: «Определить функцию высшего порядка»

textual
Листинг программы
  1. (defun f (elem lst)
  2.   (cond
  3.       ((null lst) (cons elem nil))
  4.       ((>= elem (car lst)) (cons elem lst))
  5.       (T (cons (car lst) (SORT (cons elem (cdr lst)) #'f)))))
  6.  
  7. (defun sort (lst f)
  8.   (if lst (funcall f (car lst) (sort (cdr lst) #'f)) nil))
  9.  
  10. (sort '(1 2 3 1 2 3) #'f)
  11.  
  12. ==> (3 3 2 2 1 1)

Объяснение кода листинга программы

В этом коде определены две функции: f и sort.

  1. f - это функция высшего порядка, которая принимает два аргумента: elem и lst.
  2. Если lst равно nil, то возвращается cons с elem в качестве первого элемента и nil в качестве второго.
  3. Если elem больше или равно первому элементу lst, то возвращается cons с elem в качестве первого элемента и lst в качестве второго.
  4. В противном случае, возвращается cons с первым элементом lst и отсортированным списком остальных элементов, используя рекурсивно f в качестве функции сравнения. Функция sort принимает два аргумента: lst и функцию f.
  5. Если lst не равно nil, то вызывается f с первым элементом lst и отсортированным списком остальных элементов, используя рекурсивно sort в качестве функции.
  6. В противном случае, возвращается nil. В конце кода вызывается функция sort с аргументом '(1 2 3 1 2 3)' и #'f в качестве аргументов, что вызывает сортировку списка [1 2 3 1 2 3] с использованием функции f в качестве функции сравнения. Возвращается отсортированный список [3 3 2 2 1 1].

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


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

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

13   голосов , оценка 4.077 из 5

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

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

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