Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Задача с функционалами


Автор: annafiotika 5.12.2011, 20:01
Помогите пожалуйста решить зачачу!!!

На основе использования функционалов разместить точечные пары списка в порядке возростания CAR и CDR частей.
Например : ((1.11)(2.10)(3.2)) -> ((3.2)(1.11)(2.10)).

сессия на носу! программа очень нужна!

Автор: newbee 5.12.2011, 21:05
Я бы помогла, но не поняла зависимости перехода одного списка в другой.

Автор: annafiotika 5.12.2011, 21:14
Допустим это изначальный список ((1.11)(2.10)(3.2)), далее нужно умножить каждую точечную пару и в порядке возрастания написать список. То есть, 
1*11=11
2*10=20
3*2=6
Результирующий список ((3.2)(1.11)(2.10))

Буду очень благодарна, если поможешь!!!

Автор: newbee 5.12.2011, 21:27
Компилятора под рукой нет, но по идее так (я не знаю какой у тебя диалект лиспа и функция сортировки может называться по-другому):

Код

(sort '((1 . 11) (2 . 10) (3 . 2))
 (lambda (a b)
  (< (* (car a) (cdr a)) (* (car b) (cdr b)))))

Автор: annafiotika 5.12.2011, 21:31
Спасибо, но не то. Нужно с помощью функционалов это реализовать. (((

Автор: newbee 5.12.2011, 21:35
А что такое функционал?

Добавлено через 41 секунду
Я просто далека от студенческой терминологии...

Автор: annafiotika 5.12.2011, 21:44
аппликативные функционали - apply , funcall.
отображающие функционалы - mapcar, maplist, mapcan.

Автор: newbee 5.12.2011, 21:49
Если я правильно поняла терминологию, то функционал - это просто функция высшего порядка, так их обычно называют. Sort - одна из них. Просто на map-функциях сортировку не сделать, по-моему.

Автор: annafiotika 5.12.2011, 22:06
Студент я никудышний! Спасибо большущее))

Автор: Catstail 31.1.2013, 17:50
Вспомогательная функция

 
Код


(defun pmin (lst &optional (r (car lst)))
  (cond ((null lst) r)
        ((< (caar lst) (car r)) (pmin (cdr lst) (car lst)))
        (t (pmin (cdr lst) r))))

==> pmin



Решение задачи:

Код


(defun solve (lst)
   (vsort-p (mapcar #'(lambda (x) (list (* (car x) (cdr x)) x)) lst )))

==> solve

(solve '((1 . 11) (2 . 3) (3 . 5) (1 . 0) (6 . 1) (7 . 2)))

==> ((1 . 0) (2 . 3) (6 . 1) (1 . 11) (7 . 2) (3 . 5))


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)