Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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 соответственно(разница только в читабельности).

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