В началото на годината, аз и няколко приятели се организирахме в SICP Study Group. Макар повечето материал досега да е основен, научих любопитни неща. Искам да разпиша едно от тях – data-directed programming.
Това е интересна идея, която продължава тази тема. Понятието „data-directed programming“ идва от SICP. Наподобява multi-dispatch (или visitor design pattern). Примерите в книгата са на Scheme, но аз ще се опитам да ги преведа на Python. Това няма да бъде най-идиоматичният Python, но пък ще бъде добра илюстрация. Направил съм , така че да може да го разгледате спокойно.
Ще покажа няколко синтетични примера, които едва ли ще направя в практиката (например класове Integer
и Rational
). Все пак, идеите имат приложение. Първото, което ми хрумва, е работа с абстрактни синтактични дървета. Далеч не е единственото.
Проблемът
Проблемът е следният: имаме няколко типа (Circle
, Square
) които могат да работят с генерични операции (area
, perimeter
). Въпросът е как бихме могли да организираме типовете и операциите и какви биха били последствията от всеки различен начин на представяне, който изберем. Друг възможен пример е система с четири вида числа – цели, рационални, реални и комплексни, които трябва да поддържат аритметичните операции – събиране, умножение и т.н.
Ще ползвам първия пример – типове Circle
и Square
с операции area
и perimeter
. Това е изключително опростен пример, но ще свърши работа. Имайте предвид, че принципите, които предстои да илюстрирам, важат и за операции с повече от един аргумент (например събиране на две числа).
Continue reading →