Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Lisp] Помогите решить задачки


Автор: Android3 22.5.2008, 23:47
Здравствуйте!!! помогите пожалуйста решить 2 задачи в LISP

1) Определить функцию, возвращающую наименьший элемент числового чписка, содержащего не более трех элементов

2)Определить функцию, возвращающую  первое отрицательное число списка (не более чем их трех элементов), или сообщение об отсутствии таких чисел. 

smile 

Автор: Goganchic 23.5.2008, 11:37
Сразу скажу, я в лиспе не спец, знаю только основы, но решить такие задачи которые ты предложил могу по-моему даже я smile
Решение первой задачи:
Код

(defun min-el (l)
 "Return minimal element of list"
 (if (= (length l) 1) (car l)
  (if (< (car l) (cadr l))
       (min-el (append (list (car l)) (cddr l)))
       (min-el (append (list (cadr l)) (cddr l))))))

(print (min-el (reverse '(1 2 3 4 5 6))))

Внизу строчка с "print" для тестирования. В списке передаваемом ф-ии min-el должны быть только числа, иначе будет плохо, длина списка может быть какой угодно (т.е. и больше трех)

Решение второй задачи:
Код

(defun first-neg (l)
 "Return first negative element"
 (if (= 0 (length l))
  nil
  (if (< (car l) 0)
   (car l)
   (first-neg (cdr l)))))

(print (first-neg '(1 2 3 4 -5 3 2 1)))


Внизу строчка "print" тоже для тестирования. В списке, передаваемом ф-ии first-neg должны быть только числа. Длина списка, как и в предыдущей задаче может иметь любой размер. Если в списке не найдено отрицательных элементов, то будет возвращено значение nil.
P.s. все это дело реализовано на диалекте Common Lisp.

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