For the most part I always thought that while there might be some truth it is mostly a conceit and favoritism for one's favorite language. Well now is that part where I swallow my pride and say that just isn't true.(Not really surprising most of my ideas eventually turn out wrong. :))
So as mentioned before I am hoping to play with the class at ai-class.com, Well I ordered the book and I was cruising through some of the code examples(python, I am sure lisp is more enlightening but my mind is not ready to be blown that much, plus I don't have too much time to pick up another language just right now) and I saw the neatest bit of code.
It was in some of the chapter 2 examples http://aima-python.googlecode.com/svn/trunk/agents.py
I shrunk down the code and modified to look and play with the feature that I thought was cool. Now keep in mind you crazy pythonistas I am not a long term python user so this is probably run of the mill to you. any way
class Agent ():
def __init__(self):
self.alive = True
self.bump = False
def make_agent_program (self):
print ('Unmodified agent')
def can_grab (self, obj):
"""Returns True if this agent can grab this object.
Override for appropriate subclasses of Agent and Object."""
return False
def TraceAgent(agent):
"""Wrap the agent's program to print its input and output. This will let
you see what the agent is doing in the environment."""
old_program = agent.make_agent_program
def make_agent_program():
print ('modifiesds' )
old_program()
agent.make_agent_program = make_agent_program
return agent
funk = Agent()
funk.make_agent_program() # prints 'Unmodified agent'
TraceAgent(funk)
funk.make_agent_program() # prints 'modifiesds\n' + 'Unmodified agent'
Ok so it is kinda like a decorator pattern or something similar but you did it without modifying the original at all!!! I mean I have done a couple of similar things in c++ but you either have to do it with inheritance(and create the object as the child object to begin with) or add a visitor method or something to make it extensible. It is much more painful than doing this. All I can say is download python fire it up and type "import antigravity". Python will even let you fly!!! ;)
No comments:
Post a Comment