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

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

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

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

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

textual
Листинг программы
(defun f (elem lst)
  (cond
      ((null lst) (cons elem nil))
      ((>= elem (car lst)) (cons elem lst))
      (T (cons (car lst) (SORT (cons elem (cdr lst)) #'f)))))
 
(defun sort (lst f)
  (if lst (funcall f (car lst) (sort (cdr lst) #'f)) nil))
 
(sort '(1 2 3 1 2 3) #'f)
 
==> (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
Похожие ответы