singlepost

Помогите решить легкую задачу по LISP << На главную или назад  

Язык LISP.
Нужно проверить является ли один список фрагментом другого списка.

пожалуйста если кто знает могли бы показать пример как это делать, буду очень признателен. спасибо

17 ответов в теме “Помогите решить легкую задачу по LISP”

  1. 17
    Алексей Злобин ответил:

    length – дорогое удовольствие (:

  2. 16
    Владимир Крылов ответил:

    oh shi. ща поправлю

  3. 15
    Arutyun Mokoyan ответил:

    я вроде переправил под Scheme вроде так?
    (define (sps2 p1 p2)
    (if (= (length p1) 0) 1
    (if (> (length p1) (length p2)) 0
    (if (= (car p1) (car p2))
    (sps2 (cdr p1) (cdr p2)) 0))))

    (define (sps p1 p2)
    (if (> (length p1) (length p2)) 0
    (if (= (sps2 p1 p2) 1) 1
    (sps p1 (cdr p2)))))

  4. 14
    Алексей Злобин ответил:

    > (search '(1 2) '(1 3 4 1 4 2 3 5))
    true
    - не тру :)

  5. 13
    Владимир Крылов ответил:

    вот
    (define (search sub list)
    (if (null? list)
    #f
    (if (equal? (car sub) (car list))
    (if (null? (cdr sub))
    #t
    (search (cdr sub) (cdr list)))
    (search sub (cdr list)))))

    зы а как ты форматирование сохранил? а то пробелы контакт пожирает

  6. 12
    Владимир Крылов ответил:

    > (search '(1 2) '(1 3 4))
    #f
    > (search '(1 2) '(1 3 4 1 2 3 5))
    #t

  7. 11
    Владимир Крылов ответил:

    в схеме define. и let и setq там вроде нет… Common lisp и Scheme – два разных языка с лиспоподобным синтаксисом. эта программа на языке коммон лисп

  8. 10
    Arutyun Mokoyan ответил:

    могли бы подкорректировать в моем коде под Scheme?

  9. 9
    Arutyun Mokoyan ответил:

    я запускаю в Scheme

  10. 8
    Владимир Крылов ответил:

    всё работает. запускал в clisp. только скобку в конце одну забыл
    вызов:
    [5]> (sublistp '(1 2 3) '(1 2 3 1 2))
    T
    [6]> (sublistp '(1 2 3) '(1 2 4 1 2))
    NIL

  11. 7
    Николай Сарры ответил:

    Проверь скобки. Лисп к ним очень чувствителен. Посмотри чтобы они закрывались там где надо.

  12. 6
    Arutyun Mokoyan ответил:

    Не знаю можно или нельзя. С Лиспом пока еще на Вы

  13. 5
    Arutyun Mokoyan ответил:

    Вот я что-то написал но задача не запускается выскакивают какие-то ошибки могли бы посмотреть что не так:
    (defun sublistp (xs ys &key (test 'eql))
      (let ((list xs))
        (block foo
          (dolist (y ys)
            (cond ((null list)
                   (return-from foo t))
                  ((funcall test (first list) y)
                   (setq list (cdr list)))
                  (t (setq list xs))))))

  14. 4
    Денис Доманский ответил:

    А что, в LISPe нельзя просмотреть исходный код стандартной функции?

  15. 3
    Вася Пупкинъ ответил:

    есть стандартная функция которое это делает
    мвахаха)

  16. 2
    Arutyun Mokoyan ответил:

    ну я знаю про стандартную функцию. дело в том что мне надо это сделать без ее использования.

  17. 1
    Игорь Шумейко ответил:

    RTFM!!!

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.