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

Рекурсия: проверить, что все левые скобки в s-выражении, представляющем список х, являются крайними левыми

11.01.2013, 07:44. Показов 1104. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить функцию (все левые х), проверяющий, что все левые скобки в s-выражении, представляющем список х, являются крайними левыми скобками.
>(все левые '((((3 4) 5) 6 7) 1))
Т
>(все левые '((((3 4) 5) (6 7) 1)
NIL

Помогите пожалуйсто!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2013, 07:44
Ответы с готовыми решениями:

Рекурсия: проверить, все ли элементы последовательности являются двузначными
Написать процедуру (функцию) без использования операторов цикла и перехода. (паскаль) Целые числа вводятся с клавиатуры (непустая...

Проверить, правильно ли расставлены скобки в выражении
Задача: "Строка содержит арифметическое выражение, в котором используются круглые скобки, в том числе и вложенные. Проверить, правильно ли...

Проверить, правильно ли в арифметическом выражении расставлены скобки.
Строка содержит арифметическое выражение, в котором используются круглые скобки, в том числе вложенные. Проверить, правильно ли в нем...

14
VH
431 / 259 / 23
Регистрация: 23.11.2010
Сообщений: 278
11.01.2013, 10:25
Lisp
1
2
3
4
5
6
(defun F (L)
 (if (null L) T
  (and
   (if (atom (car L)) T
    (F (car L)))
   (null (member nil (mapcar 'atom (cdr L)))))))
У Вас во втором вызове функции несоответствие количества левых и правых скобок.
В LISPе в имени функции не может быть пробела.
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
11.01.2013, 12:46
Lisp
1
2
3
4
5
6
7
8
9
10
(defun |parens left| (w)
  (if w
      (and (or (atom (car w)) (|parens left| (car w)))
               (every #'atom (cdr w)))
      t))
 
> (|parens left| '((((3 4) 5) 6 7) 1))
T
> (|parens left| '((((3 4) 5) (6 7) 1)))
NIL
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 20
11.01.2013, 14:25  [ТС]
Простите, не правильно переписала! Должно быть:
> (все левые '((((3 4) 5) 6 7) 1))
T
> (все левые '(((3 4) 5) (6 7) 1))
NIL

Спасибо за решение!
Не могли бы вы написать попроще (желательно без and) ??
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
11.01.2013, 14:38
Lisp
1
2
3
4
5
6
7
8
9
(defun parens-left (w)
  (cond ((null w) t)
        ((every #'atom (cdr w)) (or (atom (car w)) (parens-left (car w))))
        (t nil)))
 
> (parens-left '((((3 4) 5) 6 7) 1))
T
> (parens-left '(((3 4) 5) (6 7) 1))
NIL
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
11.01.2013, 17:08
А так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun chk-lp (lst)
  (cond ((and (listp (car lst)) (atomlist (cdr lst))) (chk-lp (car lst)))
        ((atomlist lst) t)
        (t nil)))
 
==> chk-lp
 
(chk-lp '((((3 4) 5) 6 7) 1))
 
==> T
 
(chk-lp '((((3 4) 5) (6 7) 1)))
 
==> NIL
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
11.01.2013, 17:44
просила без and
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
11.01.2013, 17:52
Тогда, может, так:

Lisp
1
2
3
4
5
(defun chk-lp (lst)
  (cond ((listp (car lst))
         (cond ((atomlist (cdr lst)) (chk-lp (car lst)))))
        ((atomlist lst) t)
        (t nil)))
С And-ом, понятное дело, задача становится тривиальной...
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
11.01.2013, 18:02
c and - декларативнее

Добавлено через 8 минут
Цитата Сообщение от Catstail Посмотреть сообщение
С And-ом, понятное дело, задача становится тривиальной...
для меня нет, кто знает - возможно, что без VH я бы не решил
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun parens-left (w)
  (when w (and (or (atom (car w)) (parens-left (car w)))
               (every #'atom (cdr w)))))
 
> (parens-left '((((3 4) 5) 6 7) 1))
T
> (parens-left '(((3 4) 5) (6 7) 1))
NIL
если бы не пустой список:
> (parens-left '())
NIL
1
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 20
13.01.2013, 10:35  [ТС]
Можно написать чарез две функции, чтобы через одну функцию вызывалась другая?
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
13.01.2013, 10:37
зачем?
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 20
15.01.2013, 11:02  [ТС]
Напишите пожалуйсто через две функции. Чтобы через одну вызвалась другая!
Очень надо.
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
15.01.2013, 11:48
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun atoms (w)
  (every #'atom w))
 
(defun parens-left (w)
  (cond ((null w) t)
        ((atoms (cdr w)) (or (atom (car w)) (parens-left (car w))))
        (t nil)))
 
> (parens-left '((((3 4) 5) 6 7) 1))
T
> (parens-left '(((3 4) 5) (6 7) 1))
NIL
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 20
15.01.2013, 13:30  [ТС]
Напишите пожалуйста без every и atomlist. У меня никак не получается переделать..=(
0
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
15.01.2013, 14:40
какой atomlist? вариант без every:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun atoms (w)
  (cond ((null w) t)
        ((atom (car w)) (atoms (cdr w)))
        (t niL)))
 
(defun parens-left (w)
  (cond ((null w) t)
        ((atoms (cdr w)) (or (atom (car w)) (parens-left (car w))))
        (t nil)))
 
> (parens-left '((((3 4) 5) 6 7) 1))
T
> (parens-left '(((3 4) 5) (6 7) 1))
NIL
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2013, 14:40
Помогаю со студенческими работами здесь

Проверить правильно ли расставлены скобки в арифметическом выражении
Строка содержит арифметическое выражение, в котором используются круглые скобки, в том числе вложенные. Проверить, правильно ли в нем...

Как проверить, что все элементы массива являются null
$arr = ; if(is_null($arr)){ echo 1; }else{ echo 2; } выводит 2.

Функция round. Что означает маленькая восьмерочка после скобки в выражении
Задание под буквой г (если получится отобразить рисунок) задание выглядит так: round((3,77673)вот сдесь маленькая восьмерочка...

Рекурсия: проверить, соответствует ли введенная последовательность символов понятию скобки
Доброго времени суток. Мне необходимо написать рекурсивную функцию для решения задачи: Помогите пожалуйста в решении данной...

Проверить, что все элементы в массиве являются true или false
Здравствуйте, наткнулся на такую задачку и теперь мучаюсь, не могу решить. Подскажите, как создать метод, который проверяет массив...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru