Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Lisp > Вопрос по Lisp |
Автор: Odin-online 22.09.09, 13:03 |
Пытались мы реализовать общими усилиями задание по Лиспу, навыков нет особо( Задание: Дан список элементов. Найти все позиции элемента в списке, допустим элемент "а", список (а b a c a). Наш пример, не работающий))): (defun start(lst el) (find lst el 0 nil) ) (defun find(lst el index reslst) (cond ((null lst) ((reverse reslst))) ((eql(nth index lst) el) (find lst el (add index 1) (cons index reslst))) (T(find lst el (add index 1) reslst)) ) ) Помогите пожалуйсто довести до ума, чтото трудно с этим лиспом... Заранее спасибо. |
Автор: Pourtous 22.09.09, 20:03 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 1 (defun list_count (N L CurPos) 2 (if (null L) 3 nil 4 (if (= N (first L)) 5 (cons CurPos (list_count N (rest L) (+ CurPos 1))) 6 (list_count N (rest L) (+ CurPos 1)) 7 8 ) 9 ) 10 ) |
Автор: Odin-online 22.09.09, 21:15 |
огромное спасибо) последний вопрос, как правильно теперь это запустить? (defun (a v a c d) a) ? |
Автор: Pourtous 22.09.09, 21:34 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> detrit% clisp [1]> (load "list.lisp") ;; Loading file list.lisp ... ;; Loaded file list.lisp T [2]> (list_count 3 '(1 3 5 3 4) 0) (1 3) [3]> http://www.cs.sfu.ca/CC/310/pwfong/Lisp/1/tutorial1.html |
Автор: Odin-online 23.09.09, 04:25 |
ммм... я вот не знаю сколько версий лиспа есть, у нас приложение mulisp.com называется и вся папка с файлами на 1мб) там ещё не видел такого запуска) |
Автор: Pourtous 23.09.09, 09:13 |
Омг. Это обычный Common Lisp. Вот тут методичка к мюлиспу. На первый взгляд сильно отличатся не должно. Запустить в командной строке <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> MuLisp87.com Common.lsp Он покажет приглашение к вводу команды. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> $ Потом загрузить файл с определением функции, у меня он назывался list.lisp <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> (load "list.lisp") Cнова дождаться приглашения к вводу и вызвать функцию <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> (list_count 3 '(1 3 5 3 4) 0) Единственное что, возможно он будет ругаться на first и rest, тогда замените их на car и cdr соответственно(разница только в читабельности). |