Добрый день, уважаемые участники группы. Подскажите, человеку, осваивающему, ООП и SmallTalk, решить задачку, описанную ниже Как я понимаю здесь рекурсия. Как будет выглядеть метод для решения вышеуказанной задачи.С уважением, Владимир Новиков -- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
Сначала надо переписать итеративно, задача прекрасно "раскручивается" задом наперёд. Потом всё станет ясно. Дмитрий 16 марта 2015 г., 12:34 пользователь Vladimir Novikov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
Через TDD :) Не помню, как функция назывется, поэтому просто func. Создаем класс FuncTest: TestCase subclass: #FuncTests instanceVariableNames: '' classVariableNames: '' category: 'Temp' В нем метод testOne: FuncTests >> testOne self assert: 1 func = 1 sqrt. Запускаем, получаем DNU, из отладчика создаем метод func в Integer: Integer >> func ^ 1 Можно ничего не писать (вернет self, который и есть 1), но лучше явно. FuncTests >> testTwo self assert: 2 func = (1 + 1 sqrt) sqrt. Реализация: Integer >> func ^ self = 1 ifTrue: [ 1. ] ifFalse: [ (1 + 1 sqrt) sqrt. ]. Тест работает. Рефакторим. 1 sqrt — дублирует 1 func: Integer >> func ^ self = 1 ifTrue: [ 1. ] ifFalse: [ (1 + 1 func) sqrt. ]. Пока дублирования больше не наблюдается. FuncTests >> testThree self assert: 3 func = (1 + (1 + 1 sqrt) sqrt) sqrt. Реализация… Лень добавлять еще один if, поэтому догадываемся, что можно использовать предыдущее значение: Integer >> func ^ self = 1 ifTrue: [ 1. ] ifFalse: [ (1 + (self - 1) func) sqrt. ]. Вроде, и все… -- Best regards, Dennis Schetinin 16 марта 2015 г., 15:46 пользователь Dmitry Matveev <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
In reply to this post by Vladimir Novikov
Спасибо большое, за доходчивое объяснение.
-- Будем двигаться дальше! понедельник, 16 марта 2015 г., 14:37:26 UTC+5 пользователь Vladimir Novikov написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
Рекурсивные функции возможно реализовать без рекурсии. Конечно такая реализация не настолько наглядна как рекурсия, и все же. Добавляем методNumber>>rSqr 17 марта 2015 г., 10:14 пользователь Vladimir Novikov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
проверяем, для этого в workspace вводим 3 rSqr.выделяем выделенный текст и исполняем (ctrl + p) или правая кнопка мыши -> контекстное меню -> printIt 1.5537739740300374 17 марта 2015 г., 11:38 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
Раз пошла такая пьянка: (2 to: self) inject: 1 into: [ :previous :unused | (1 + previous) sqrt. ]. ;) -- Best regards, Dennis Schetinin 17 марта 2015 г., 9:43 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
In reply to this post by Nikolay Kleptsov
А чтобы ненужных переменных не было: | result | result := 1. self - 1 timesRepeat: [ result := (1 + result) sqrt. ]. ^ result. -- Best regards, Dennis Schetinin 17 марта 2015 г., 9:43 пользователь Nikolay Kleptsov <[hidden email]> написал:
-- http://groups.google.ru/group/sugr --- Вы получили это сообщение, поскольку подписаны на группу "Russian Smalltalk User Group". Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес [hidden email]. Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout. |
Free forum by Nabble | Edit this page |