Автор | Сообщение |
Jack
17 сообщений |
#5159 2011-12-02 19:08 GMT+3 часа(ов) |
Всем доброго времени суток!
Прошу Вашей помощи в решении задачи... Так как, признаюсь честно, сам я не могу никак разобраться с этой задачей, и не смог нигде найти помощи, обращаюсь к Вам уважаемые знатоки ЛИСПа ![]() Задачи звучит так: Найти количество положительных и отрицательных элементов и нулей, в списке, который может состоять из атомов и подсписков. Например: ( 1 (-4 0 5) 3 0 (-1 4)) Положительные: 4 Отрицательные: 2 Нули: 2 Это то, как я вижу задачу... Но я не могу придумать как реализовать данную задачу... Надеюсь на Вашу отзывчивость и помощь! Заранее благодарю! |
|
VH
289 сообщений |
#5160 2011-12-02 20:44 GMT+3 часа(ов) |
(defun F (L) |
|
Jack
17 сообщений |
#5161 2011-12-02 20:58 GMT+3 часа(ов) |
Спасибо за отзывчивость!
![]() Но, может я что то неправильно делаю... он у меня отказывается работать ![]() П.С. Не знаю, важно это или нет... я использую программу LispWorks Personal Edition 6.0.1 ![]() И ещё небольшой вопросик... можно ли это всё реализовать отдельными функциями? ![]() Например: 1 Функция находит все положительные элементы и считает их 2 Функция находит все отрицательные элементы и считает их 3 Функция находит все нули и считает их 4 Функция объединяет в список результат выполнения трех предыдущих функций... Простите, забыл упомянуть это раньше ![]() отредактировал(а) Jack: 2011-12-02 21:05 GMT+3 часа(ов) |
|
VH
289 сообщений |
#5162 2011-12-02 21:26 GMT+3 часа(ов) |
«...отказывается работать...» - какие симптомы?
|
|
Jack
17 сообщений |
#5163 2011-12-02 21:31 GMT+3 часа(ов) |
Цитата Error: Illegal argument in functor position: 1 in (1 2 3 (1 2) -1 0). 1 (continue) Evaluate 1 and ignore the rest. 2 (abort) Return to level 0. 3 Return to top loop level 0. Type :b for backtrace or :c <option number> to proceed. Type :bug-form "<subject>" for a bug report template or :? for other options. Извините если это звучит глупо... Но не могли бы Вы ещё обьяснить как правильно нужно запускать... ![]() Я откомпилировал, всё хорошо... но вот как я запускаю, как Вы видите, ничего не происходит) |
|
VH
289 сообщений |
#5164 2011-12-02 21:38 GMT+3 часа(ов) |
(F '(1 (-4 0 5) 3 0 (-1 4))) возвращает (2 2 4)
(F '(1 2 3 (1 2) -1 0)) возвращает (1 1 5) |
|
Jack
17 сообщений |
#5165 2011-12-02 21:46 GMT+3 часа(ов) |
Цитата Да так всё работает!! Огромное вам спасибо! А можно ли это реализовать в функциях как я описал выше ![]() |
|
VH
289 сообщений |
#5166 2011-12-02 22:07 GMT+3 часа(ов) |
Можно, но скучно
(defun F (L) |
|
Jack
17 сообщений |
#5167 2011-12-02 22:19 GMT+3 часа(ов) |
Супер! Большое Вам человеческое спасибо!
![]() Я не покажусь слишком наглым если попрошу Вас помочь мне ешё и со второй частью этого задания? ![]() Задание остается тем же... меняется только список который мы вводим... теперь он должен выглядеть примерно так ( (a11 a12 ... a1n) (a21 a22 ... a2m) ... (ak1 ak2 ... akp)), где aij это атомы.... то есть в данном случае без подсписков ![]() |
|
VH
289 сообщений |
#5168 2011-12-02 22:30 GMT+3 часа(ов) |
С моей точки зрения, в списке ((a11 a12 ... a1n) (a21 a22 ... a2m) ... (ak1 ak2 ... akp)) элементы (a11 a12 ... a1n), (a21 a22 ... a2m) ... (ak1 ak2 ... akp) и есть именно подсписки.
Оба варианта пригодны для такого списка (как и для любого другого). |
|
Jack
17 сообщений |
#5169 2011-12-02 22:40 GMT+3 часа(ов) |
Тогда я то ли что то неправильно объяснил... То ли Вы меня не правильно поняли...
В общем, лучше я вам покажу задание целиком, звучит оно следующим образом: Дан список: ![]() Задание: Найти количество отрицательных, положительных и нулевых элементов (aij - атомы) Вот, как то так ![]() Я и сам не до конца понимаю что имеется ввиду... Извините что Вас нагружаю. ![]() |
|
Jack
17 сообщений |
#5170 2011-12-02 23:08 GMT+3 часа(ов) |
и ещё такой вопрос... мне если честно уже даже стыдно спрашивать.. просто нам необходимо сделать работу по определенному образцу, поэтому я собственно и спрашивал как сделать через отдельные функции.. примерно так:
(defun Positive(number) что мне нужно изменить в функциях NegativeSumm, PositiveSumm, NullSumm, чтобы он считал не сумму, а количество? ![]() |
|
VH
289 сообщений |
#5171 2011-12-02 23:11 GMT+3 часа(ов) |
Количества отрицательных, положительных и нулевых элементов функция (F) <в обоих вариантах> находит.
Величины b и c - это суммы элементов "по строкам" и "по столбцам"? |
|
Jack
17 сообщений |
#5172 2011-12-02 23:24 GMT+3 часа(ов) |
Цитата Если честно я не уверен, потому что постановка задачи не совсем понятна для меня... но исходя из логики - да, это суммы элементов по строкам и столбцам... Но это ещё необходимо уточнить... я не могу сказать уверенно... я надеюсь в ближайшее время уточню.. Судя по всему просто либо я недопонял задачу либо, преподаватель просто не ясно обьяснил ![]() Если эти величины b и c, не используются в задаче, то получается что вторая задача ничем не отличается от первой, как вы уже сказали... ![]() Но пока, что вы можете сказать по первой задаче? что я выше написал? как можно преобразовать? ![]() просто у нас действительно придираются к таким вещам ![]() И ещё раз СПАСИБО Вам за Вашу отзывчивость! ![]() |
|
VH
289 сообщений |
#5173 2011-12-02 23:31 GMT+3 часа(ов) |
Ето Бейсик какой-то.
(defun Positive (number) (defun Positive (number) и остальные аналогично Для ознакомления с настоящей красотой LISPа - безымянная рекурсивная функция (из SICP) в данном случае для вычисления факториала: ((lambda (n) |
|
Jack
17 сообщений |
#5174 2011-12-02 23:54 GMT+3 часа(ов) |
Вот так над нами издеваются...
![]() Мало того что задачи ставят невнятно, так ещё и реализовывать заставляют так, что запутаться как пить дать... Вот собственно и опять я немного в недоумении... Но, да ладно... буду разбираться ![]() ![]() Что то я никак не пойму, что Вы в последнем сообшении написали, и как это применить к моей задаче..? ![]() отредактировал(а) Jack: 2011-12-02 23:59 GMT+3 часа(ов) |
|
VH
289 сообщений |
#5175 2011-12-03 00:06 GMT+3 часа(ов) |
Вы спросили, что нужно изменить. Как изменить функции (Positive) и остальные такие же, и показано выше.
|
|
Jack
17 сообщений |
#5176 2011-12-03 00:17 GMT+3 часа(ов) |
Прошу прощения за мою глупость, это значит я что то не правильно делаю... компилируется он хорошо, но вот когда пытаюсь запустить, выдает ошибку снова... можете проверить пожалуйста?
(defun Positive (number) CL-USER 13 > (POSITIVENEGATIVE '(1 2 3 -1 -2 0)) Error: In > of ((1 2 3 -1 -2 0) 0) arguments should be of type REAL. 1 (continue) Return a value to use. 2 Supply a new first argument. 3 (abort) Return to level 0. 4 Return to top loop level 0. Type :b for backtrace or :c <option number> to proceed. Type :bug-form "<subject>" for a bug report template or :? for other options. что это значит и как это исправить? метод научного тыка не помог... пробовал ![]() Или нужно как то иначе прописать эту последнюю функцию?) |
|
VH
289 сообщений |
#5177 2011-12-03 00:29 GMT+3 часа(ов) |
В сообщении #5173 два ВАРИАНТА функции (Positive).
В определении Вашей функции (PositiveNegative) следует выполнять вызовы функций (PositiveSumm) и (NegativeSumm). |
|
Jack
17 сообщений |
#5178 2011-12-03 00:40 GMT+3 часа(ов) |
Цитата Да, Вы правы... это моя ошибка по не внимательности, или по не знанию... ![]() Огромное Вам человеческое СПАСИБО за помощь! ![]() По поводу второй части задания, я к Вам обращусь попозже, если Вы не против конечно? ![]() |
|
Jack
17 сообщений |
#5188 2011-12-03 16:38 GMT+3 часа(ов) |
И снова Доброе Утро!
![]() Я уточнил у преподавателя суть второго задания... Смысл второй задачи такой: Найти количество положительных, отрицательных и нулевых элементов в каждой строке и столбце. Реализовать это необходимо при помощи двух функций: 1. Считает по строкам, и выдает ответ в виде списка состоящего из подсписков 2. Считает по столбцам, и выдает ответ в виде списка состоящего из подсписков. В результате у нас должно получиться два списка (b и c). Пример: (( 1 2 -1 0 3) (-1 0 -3 2) ( 2 1 0 -1) (0 -1 2)) В данном случае: По строкам: b1=(3 1 1), b2=(1 1 2), b3=(2 1 1), b4=(1 1 1), общий ответ список ((3 1 1) (1 1 2) (2 1 1) (1 1 1)) По столбцам: c1=(2 1 1), c2=(2 1 1), c3=(1 1 2), c4=(1 1 1), c5=(1 0 0), общий ответ список ((2 1 1) (2 1 1) (1 1 2) (1 1 1) (1 0 0)) В конечном результате, должно получится два списка как показано выше... ((3 1 1) (1 1 2) (2 1 1) (1 1 1)) ((2 1 1) (2 1 1) (1 1 2) (1 1 1) (1 0 0)) З.Ы. Первое число - кол-во положительных элементов, второе число - кол-во нулевых элементов, третье число - кол-во отрицательных элементов. Надеюсь я правильно понял задачу, и корректно её преподнес ![]() Спасибо за Вашу отзывчивость и помощь! ![]() |
|
VH
289 сообщений |
#5197 2011-12-04 00:10 GMT+3 часа(ов) |
Количества элементов "по столбцам":
(defun F (L) (defun F0 (L) |
|
VH
289 сообщений |
#5201 2011-12-04 02:12 GMT+3 часа(ов) |
Количества элементов "по строкам":
(defun F (L) |
|
Jack
17 сообщений |
#5224 2011-12-04 18:11 GMT+3 часа(ов) |
Добрый день!
![]() У меня снова возникла проблема с этим заданием... скажите я что то не так делаю? CL-USER 17 > (F0 '((1 2 3) (0 1 0) (-1 -1 0))) Error: In MINUSP of ((1 2 3)) arguments should be of type REAL. И вопрос... можно ли каким то более простым языком написать эти функции? используя скажем, только какие то базовые знания? Подскажите пожалуйста что не так... и ещё раз спасибо за помощь! ![]() |
|
VH
289 сообщений |
#5225 2011-12-04 18:50 GMT+3 часа(ов) |
Давайте определимся: мы решаем задание номер 2 - то есть подсчитываем количества положительных, нулевых и отрицательных элементов "по строкам" и "по столбцам" данного списка-«матрицы».
Так как элементами исходного(данного) списка являются списки из чисел <или атомов других типов - но БЕЗ подсписков>, то функция подсчета, которая называется теперь (F0), упрощена - и аргументом её вызова должен быть список БЕЗ подсписков. То есть вызывать ее должна либо функция (F) из сообщения #5197, приготовившая очередной "столбец" исходного списка, либо функция (F) из сообщения #5201 ("строки" в исходном списке и «готовить» не надо). «...более простым языком написать...» - мы снова <и в который уже раз> должны учитывать "уровень некомпетенции" препода? А что Вас пугает в этих определениях функций? |
|
Jack
17 сообщений |
#5226 2011-12-04 19:22 GMT+3 часа(ов) |
Извините меня за мою глупость или непонимание...
Мне кажется что мы с Вами просто не допоняли друг друга, или я просто не понимаю как правильно вызывать эти функции... Давайте разберемся... Задача состоит в следующем: У нас дан список-"матрица", состоящий из n-ного количества подсписков (как на картинке в сообщении выше), которые в свою очередь могут состоять только из атомов!. Нам необходимо посчитать кол-во положительных, отрицательных и нулевых элементов, в каждой строке "матрицы" (получается в каждом подсписке), и в каждом столбце "матрицы". В результате у нас должно получится два списка: 1. Список для строк - состоящий из подсписков (каждый подсписок соответствует одной строке) 2. Список для столбцов - состоящий также, из подсписков (каждый подсписок соответствует одному столбцу) На примере это выглядит примерно следующим образом: (( 1 2 -1 0 3) (-1 0 -3 2) ( 2 1 0 -1) (0 -1 2)) В данном случае: По строкам: b1=(3 1 1), b2=(1 1 2), b3=(2 1 1), b4=(1 1 1), общий ответ список ((3 1 1) (1 1 2) (2 1 1) (1 1 1)) По столбцам: c1=(2 1 1), c2=(2 1 1), c3=(1 1 2), c4=(1 1 1), c5=(1 0 0), общий ответ список ((2 1 1) (2 1 1) (1 1 2) (1 1 1) (1 0 0)) В конечном результате, должно получится два списка как показано выше... ((3 1 1) (1 1 2) (2 1 1) (1 1 1)) ((2 1 1) (2 1 1) (1 1 2) (1 1 1) (1 0 0)) Или я просто не правильно понял как нужно вызывать эту функцию, и это привело к недопониманию между нами... Потому как, если допустим я ввожу (F0 '(1 2 3 0 1 0 0 -1 -1)) Он считает полностью всё... и выдает следующий результат (4 3 2) Простите меня за нервотрепку, просто мне действительно необходимо разобраться, что к чему и как... ![]() И да, вы правы, скорее всего не стоит ничего "упрощать" (что в конечном итоге может все наоборот усложнить)... ![]() |
|
VH
289 сообщений |
#5229 2011-12-04 20:10 GMT+3 часа(ов) |
Вы наш диалог считаете «нервотрепкой»?
Мое стремление во всех определениях именованных функций использовать имя F (или F_с_номером) именно для того, чтобы Вы могли свободно переименовывать их по своему желанию (и канечна для борьбы с преподавательским розыском в Интернете), в данном случае внесло некоторую неразбериху. Функция подсчета количеств в одноуровневом списке: (defun ONELEVELCOUNT (L) Функция подсчета количеств в моногоуровневом списке "по столбцам": (defun COLUMNCOUNT (L) Функция подсчета количеств в моногоуровневом списке "по строкам": (defun ROWCOUNT (L) |
|
Jack
17 сообщений |
#5236 2011-12-04 22:57 GMT+3 часа(ов) |
Да, действительно, теперь всё встало на свои места
![]() Я наверное просто запутался в трех деревьях как говорится.... ![]() Спасибо Вам огромное за Вашу отзывчивость и помощь! Вы мне действительно безумно помогли... буквально жизнь спасли! ![]() З.Ы. О нервотрепке я говорил к тому, что меня бы на Вашем месте наверно уже достало бы вдалбливать кому то, что и как работает и что по чем... ![]() ![]() Если бы я мог Вас как то отблагодарить? ![]() З.Ы.Ы. Хоть у меня ещё есть и третье задание, но с ним я уже постыжусь к Вам обращаться, Вы на меня итак слишком много времени потратили. на мой взгляд ![]() Премного благодарен за помощь и понимание! ![]() |
|
Jack
17 сообщений |
#5349 2011-12-17 00:45 GMT+3 часа(ов) |
Доброго времени суток!
Помогите пожалуйста снова с задачей... ![]() Задача состоит в следующем: "Из списка, состоящего из атомов и подсписков, удалить все повторяющиеся элементы, оставив при этом только последние из них." Пример: (1 2 (6 5) 2 3 (5 4)) Ожидаемый ответ: (1 (6) 2 3 (5 4)) Буду очень благодарен, если у Вас была бы возможность помочь мне и с данной задачей тоже ![]() Заранее благодарю! ![]() P.S. есть некоторые наработки, но в общем, хотелось бы посмотреть решение опытного человека ![]() отредактировал(а) Jack: 2011-12-17 00:55 GMT+3 часа(ов) |
|
megamanx
307 сообщений |
#5352 2011-12-17 02:07 GMT+3 часа(ов) |
(defun foo(L) отредактировал(а) megamanx: 2011-12-17 16:42 GMT+3 часа(ов) |
|
I wish I'd made you angry earlier
|