Scheme - Lisp (229346)

Узнай цену своей работы

Формулировка задачи:

Определить, есть ли в списке два подряд идущих списка. посмотрите пожалуйста

Решение задачи: «Scheme»

textual
Листинг программы
  1. (define (task lst)
  2.   (define (check lst prev?)
  3.     (if (null? lst)
  4.         #f
  5.         (let ((curr? (list? (car lst))))
  6.           (or (and prev? curr?)
  7.               (check (cdr lst) curr?)))))
  8.   (check lst #f))
  9.  
  10. (define (test lst)
  11.   (display lst)
  12.   (display " => ")
  13.   (display (task lst))
  14.   (newline))
  15.  
  16. (for-each
  17.  test
  18.  '(()
  19.    (1)
  20.    (1 2)
  21.    ((1) 2)
  22.    (1 (2))
  23.    ((1) (2))
  24.    (1 (2) 3)
  25.    ((1) 2 (3))
  26.    (1 (2) (3))
  27.    ((1) (2) 3)))

Объяснение кода листинга программы

В коде представлена реализация проверки, является ли список lst палиндромом. Список начинается с определения функции check, которая принимает два аргумента: lst и prev. Если lst — null, то функция возвращает #f. В противном случае в переменную curr записывается значение первого элемента списка lst (car lst), а в переменную prev записывается результат вызова функции check для остатка списка (cdr lst) и значения curr. Функция task вызывает функцию check для списка lst и #f. Далее определена функция test, которая выводит список lst, затем выводит строку « => » и результат выполнения функции task для списка lst. В основной части кода вызывается функция for-each, которая перебирает все элементы списка, представленного в виде списка пар. Каждая пара представляет собой список, который необходимо проверить на палиндром. В качестве действия для каждой пары вызывается функция test. Список, представленный в фигурных скобках, содержит восемь пар, каждая из которых представляет собой список от одного до трёх элементов. После выполнения кода на экран будет выведено: () => #f (1) => #f (1 2) => #t ((1) 2) => #t (1 (2)) => #t ((1) (2)) => #t (1 (2) 3) => #t ((1) 2 (3)) => #t (1 (2) (3)) => #t

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут