0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 7
|
||||||||||||||||
1 | ||||||||||||||||
Сократить s-выражение(точечная пара)16.12.2017, 21:17. Показов 1475. Ответов 9
Метки нет (Все метки)
Задание выглядит так:
Сократить следующие S-выражения:
1.Цепочки . Nil просто удаляем; 2. Цепочки . ( удаляем вместе с соответствующей закрывающей скобкой Но у меня получилось реализовать только удаление NIL. Вот код:
Заранее спасибо за ответы.
0
|
16.12.2017, 21:17 | |
Ответы с готовыми решениями:
9
Точечная пара Произведение целых чисел из списка(точечная пара) Сократить выражение Сократить выражение |
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
16.12.2017, 21:56 | 2 |
Я бы, может, подсказал бы, но здесь
не понял ничего. Какие цепочки? Какие скобки?
0
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 7
|
|
16.12.2017, 22:19 [ТС] | 3 |
На самом деле я не уверена на счет правильности алгоритма, но я предполагаю, что это должно выглядеть примерно так:
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
17.12.2017, 00:18 | 4 |
А, что-то понял. Некоторая проблема в том, что в лисповом ридере это уже сделано и работает из коробки. Поэтому если вы передадите вашей (или любой другой) функции аргумент
(a . (b . nil)) , а в другой раз — (a b) , она не заметит разницы. Не понимаю поэтому, на каком уровне вам надо работать. Может, на уровне потоков?Добавлено через 15 минут То есть я, в частности, хочу сказать, что если вы в репле напишете '(a . (b . (c . nil))), то в ответ он напишет вам, по всей вероятности, (A B C) — тот же список, другая форма записи.
2
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 7
|
||||||
17.12.2017, 00:43 [ТС] | 5 | |||||
Т.е. получается я неправильно понимаю суть задания и ничего сокращать не надо.
И если просто так сделать Lisp просто сам все сократит что-ли?
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
||||||
17.12.2017, 01:01 | 6 | |||||
Не знаю. Формально, атомы тоже являются s-выражениями. То есть не надо делать ровным счётом ничего.
Вот, я запускаю лисп, ввожу ваш список, и что вижу:
А лисповые функции работают с лисповыми объектами. Поэтому получается, что если вы хотите, чтобы ваша функция работала с формой записи, как с объектом, вам надо давать ей не распаршенный ридером список, а что-то сырое. Например, поток ввода. Или там, какой-нибудь лексер будет разбивать поток ввода на токены, и ваша функция будет принимать эти токены. Но по вашей формулировке догадаться невозможно. Добавлено через 4 минуты Меня вдруг осенило. А может, предполагается, что вы не функцию будете писать, а сами вручную сделаете? Типа проверки, что вы поняли, как читает лисп, и что можете работать компьютером. Тогда забейте в лисп и перепишите ответы.
1
|
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 7
|
|
17.12.2017, 01:18 [ТС] | 7 |
Спасибо за столь подробное объяснение.
Да это вариант вводить в ручную, но не знаю в какой форме это сдавать. Так может сделать функцию с проверкой на атом и на список?
0
|
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
|
|
17.12.2017, 01:29 | 8 |
Я говорю — не вводить вручную, а считать вручную. Берёте лист бумаги, пишете: задание 1: такое-то. Решение. ... Ответ: ... . Но это только предположение, я же не ясновидец.
Атомы и списки — тоже уже лисповые объекты, а не формы записи.
0
|
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
|
|||||||||||||||||||||
17.12.2017, 08:53 | 9 | ||||||||||||||||||||
1
|
Модератор
|
||||||
17.12.2017, 11:42 | 10 | |||||
Сообщение было отмечено _sg как решение
Решение
Вот как это нужно понимать:
3
|
17.12.2017, 11:42 | |
17.12.2017, 11:42 | |
Помогаю со студенческими работами здесь
10
Сократить выражение Сократить выражение Сократить логическое выражение Как сократить такое выражение? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |