Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 10.09.2016
Сообщений: 24
1
Scheme

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

05.10.2016, 18:57. Показов 978. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Определить, есть ли в списке два подряд идущих списка. посмотрите пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2016, 18:57
Ответы с готовыми решениями:

Определить, есть ли в списке два подряд идущих пустых списка
Определить, есть ли в списке два подряд идущих пустых списка. Использование встроенных функций...

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

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

Определить, есть ли в списке два подряд идущих пустых списка
Определить, есть ли в списке два подряд идущих пустых списка. Использование встроенных функций...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
05.10.2016, 19:53 2
Лучший ответ Сообщение было отмечено nika-violet как решение

Решение

Лисп:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(defun task (lst)
  (cond ((null (cdr lst)) nil)
        (t (or (and (listp (car lst)) (listp (cadr lst))) (task (cdr lst))))))
 
==> TASK
 
(task '(1 2 3))
 
==> NIL
 
(task '(1 (2) 3))
 
==> NIL
 
(task '(1 (2) (3)))
 
==> T
Добавлено через 11 минут
Схема:

Lisp
1
2
3
4
5
(define task (lambda (lst)
  (cond ((null? (cdr lst)) '())
        ((or (and (list? (car lst)) (list? (cadr lst))) (task (cdr lst)))))))
 
(display (task '(1 2 (3) (4) 5)))
Добавлено через 27 секунд
http://ideone.com/BTfzag
2
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
05.10.2016, 21:16 3
Лучший ответ Сообщение было отмечено nika-violet как решение

Решение

Цитата Сообщение от Catstail Посмотреть сообщение
Схема:
В схеме '() — не эквивалентно #f (false) и будет воспринято как true при проверке в if или cond

И лучше не писать (define <symbol> (lambda <args*> <body*>)) вместо (define (<symbol> <args*>) <body*>), по крайней мере в одной строке, это нарушает правила pretty-print.

Добавлено через 4 минуты
И в последнем случае cond нужно использовать else, иначе результат может быть неопределённым (Racket, например, вернёт объект #<void> вместо #f)

Добавлено через 6 минут
А, да, и при пустом списке будет ошибка, т.к. в отличие от CL (cdr '()) вернёт ошибку, а не NIL

Добавлено через 14 минут
Итого:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(define (task lst)
  (define (check lst prev?)
    (if (null? lst)
        #f
        (let ((curr? (list? (car lst))))
          (or (and prev? curr?)
              (check (cdr lst) curr?)))))
  (check lst #f))
 
(define (test lst)
  (display lst)
  (display " => ")
  (display (task lst))
  (newline))
 
(for-each
 test
 '(()
   (1)
   (1 2)
   ((1) 2)
   (1 (2))
   ((1) (2))
   (1 (2) 3)
   ((1) 2 (3))
   (1 (2) (3))
   ((1) (2) 3)))
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
06.10.2016, 10:41 4
korvin_, спасибо! Так и Схему выучу...
0
06.10.2016, 10:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2016, 10:41
Помогаю со студенческими работами здесь

Определить, есть ли в последовательности два идущих подряд нулевых члена
помогите плиз Задача 2 Даны натуральное n и целые числа c1, c2, … , cn. Имеются ли в...

Определение, имеются ли в числовом списке два подряд идущих нулевых элемента
Определение, имеются ли в числовом списке два подряд идущих нулевых элемента

Предикат, заменяющий в исходном списке два подряд идущих одинаковых элемента одним
Доброго времени суток, получил вот такое простое задание, но не получается его сделать. Подскажите...

Два подряд идущих элемента списка
Помогите написать предикат, которой для заданного числа и заданного числового списка проверяет,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru