| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > LISP > реализация функции elem |
| Автор: Orcin 12.4.2005, 13:31 |
| Я вот только начал изучать Лисп, и не могу написать одну функцию, назовем ее elem - (elem N L) выбирает на верхнем уровне списка L |N|-тый элемент, отсчитанный от начала списка, если N>0, или от конца списка, если N<0, например: (elem 2 ‘(a (12) b (3))) => (12) (elem -2 ‘(a (12) b (3)) => b вот. запутался на такой простой реализации! подскажите, плиз, как тут быть? и еще у меня 1 вопрос - если я запутался на таком простом задании, то, может, Лисп не для меня?? заранее благодарю, господа! |
| Автор: Hidrag 13.4.2005, 11:39 |
| Можно так: (defun plus (n l) (if (= n 1) (first l) (plus (- n 1) (rest l)))) (defun minus (n l) (if (= n -1) (last l) (nth (+ (length l) n) l))) (defun elem (n l) (if (> n 0) (plus n l) (if (< n 0) (minus n l)))) Как бы разбил твою функцию на три функции, можно это все в одну функцию слить, но это муторно, много проверок и условностей... как например тут не отработана проверка на n=0. А насчет второго вопроса... а для кого этот Лисп вообще? |
| Автор: svg 13.4.2005, 19:41 | ||||
что-то типа такого:
Это с непривычки, пройдет. А вообще-то для изучения легче Scheme,а вот для работы лучше CommonLisp. |
| Автор: Lisper 16.4.2005, 00:23 |
| >А насчет второго вопроса... а для кого этот Лисп вообще? мое мнение он нужен для >преподов в ВУЗах, чтобы нас студентов им мучить )))) и для общего программерского >развития, а так, практической ценности я в нем не вижу... Действительно только людей отвращают от на самом деле весьма практически полезного языка. Хотя некоторым должно с ходу начинать нравиться. Вы случайно программы не блокноте пишите ? Рекомендую пользоваться редактором с подсветкой синтаксиса. Например из простых Corman Lisp (http://www.cormanlisp.com) это может, там и подсказка по функциям стандарта имеется. Странно, Лисп таки преподают, но видать на столько скучно и бездарно, что студенты вешаются. Взяли бы за основу какую-нибудь книгу типа Practical Common Lisp или Anso Common Lisp Грэхэма, дело пошло бы веселее. Кстати, когда подобные задачи дают на Си, иногда они бывают довольно пакостные, никто не говорит, что Си якобы практической ценности не имеет, и чем Лисп перед всеми так провинился ? |
| Автор: Hidrag 16.4.2005, 12:37 |
| Да ничем, на самом деле довольно интересный язык ...для тренировки мозгов, преподавать да, преподают у нас в ВУЗе, преподают ужасно, типа делается вот так и так.. а вот вам и задачи, думайте! |
| Автор: antisergey 21.5.2005, 21:17 |
| ( defun elem ( lambda (n l) ( cond ((>= n 0) (nth n l)) (t (nth (- n) (reverse l))) ) ) ) Если n>=0, то n-ый car от списка (n=0 - исходный список), если n<0, то (-n)-ый car от реверсированного списка (я писал в среде FORIS). |
| Автор: Cr@$h 24.8.2006, 21:55 | ||
|
| Автор: Goganchic 11.4.2007, 22:52 |
| Вообще, Lisp считается более естественным языком, но я в этом сильно сомневаюсь ;) |
| Автор: _sg 24.4.2014, 21:18 | ||
как вариант:
|