На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Вопрос по Lisp
      Пытались мы реализовать общими усилиями задание по Лиспу, навыков нет особо(

      Задание: Дан список элементов. Найти все позиции элемента в списке, допустим элемент "а", список (а 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))
      )
      )


      Помогите пожалуйсто довести до ума, чтото трудно с этим лиспом... Заранее спасибо.
      Сообщение отредактировано: Odin-online -
        ExpandedWrap disabled
                 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  )
          огромное спасибо)

          последний вопрос, как правильно теперь это запустить?

          (defun (a v a c d) a)

          ?
            ExpandedWrap disabled
              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
            Сообщение отредактировано: Pourtous -
              ммм... я вот не знаю сколько версий лиспа есть, у нас приложение mulisp.com называется и вся папка с файлами на 1мб) там ещё не видел такого запуска)
                Омг.
                Это обычный Common Lisp.
                Вот тут методичка к мюлиспу. На первый взгляд сильно отличатся не должно.
                Запустить в командной строке

                ExpandedWrap disabled
                  MuLisp87.com Common.lsp

                Он покажет приглашение к вводу команды.
                ExpandedWrap disabled
                  $

                Потом загрузить файл с определением функции, у меня он назывался list.lisp
                ExpandedWrap disabled
                   (load "list.lisp")

                Cнова дождаться приглашения к вводу и вызвать функцию
                ExpandedWrap disabled
                  (list_count 3 '(1 3 5 3 4) 0)


                Единственное что, возможно он будет ругаться на first и rest, тогда замените их на car и cdr соответственно(разница только в читабельности).
                Сообщение отредактировано: Pourtous -
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0325 ]   [ 16 queries used ]   [ Generated: 25.04.24, 11:12 GMT ]