2013-04-24 2 views
-1

Я пытаюсь сделать score function используя lisp. Идея состоит в том, что у меня есть список в качестве входных данных. Этот список должен быть отсортирован, и каждое значение должно получить отметку (самая жаркая из них имеет наивысшую отметку) Я пробовал что-то вроде обычной сортировки, но мне нужно использовать лямбда-оператораLisp сортировка и оценка

Но мой шепот довольно плохой.

В качестве примера, чтобы было ясно: ((O1 10 15 20) (о2 5 14 20) (O3 7 8 8) выход> ((o1 1 1 1) (о2 3 2 1) (O3 2 3 3))

он сортирует firest значение из o1 с первым из o2 и первый из а3 и ранжирует их

ответ

0

Я на самом деле не могу понять ваш вопрос, но если вопрос:.. «Помощь меня сортировать список в общем lisp "тогда:

1)` (setq o1 (20 30 15)) является допустимым выражением lisp и (20 30 15) является списком, но он не цитируется, поэтому интерпретатор попытается оценить выражение. И правило оценки - «Первый элемент в выражении - это функция», поэтому интерпретатор попытается оценить функцию с именем «20» и провалится. Вы должны написать следующее:

(setq o1 '(20 30 15)) 

1') Обычно лучше использовать setf вместо setq (особенно, если вы не хотите, чтобы знать разницу). А также лучше определить переменную, прежде чем устанавливать для нее значение. Так что лучше, чтобы написать что-то вроде этого:

(defparameter o1 '()) ;creating o1 with empty list 
(setf o1 '(20 30 15)) 

1 «») Вы должны назвать вам переменные и функции с понятными именами. И если это глобальная переменная, отметьте ее звездочками. Например

(defparameter *students-scores* '()) 
(setf *students-scores* '(20 30 15)) 

2) В общей LISP list является встроенной функцией, которая создает список из его аргументов. Даже если вы находитесь в своем собственном пакете во время выполнения этого кода (пакет по умолчанию заблокирован, поэтому вы не сможете переопределить функцию list), довольно странно переопределить такую ​​функцию, как list, поэтому выберите другой имя для вашей функции

(defun sort-integer-list (lst) 
    (sort lst #'<)) 

3) У вас есть круглые скобки в вашем коде.

+0

Большое спасибо за ваше время и объяснив мне. Я не понимаю, как я могу отсортировать первый элемент первого подписок с первым из второго подписок. (i отредактировал первый пост) –

+0

@StereoView Извините, но я все еще не понимаю, чего вы хотите.) Пожалуйста, объясните вопрос в более удобочитаемой форме. P.S. Я не знаю слова «самое жаркое», и словарь ничего мне не дал. – JustAnotherCurious

Смежные вопросы