% Figure 23.8 An object-oriented program about a robot world. % A robot world: table, blocks and camera object( camera, [ look( a, 1, 1), % Find XY-coord. of a visible block look( d, 3, 2), xy_coord( 2, 2), % xy-coordinates of camera z_coord( 20)]). % z-coordinate of camera object( block( Block), [ ( xy_coord( X, Y) :- send( camera, look( Block, X, Y))), ( xy_coord( X, Y) :- send( Block, under( Block1)), send( Block1, xy_coord( X, Y))), ( z_coord( 0) :- send( Block, on( table))), ( z_coord( Z) :- send( Block, on( Block1)), send( Block1, z_coord( Z1)), Z is Z1 + 1)]). object( physical_object( Name), [ (coord( X, Y, Z) :- send( Name, xy_coord( X, Y)), send( Name, z_coord( Z)))]). object( a, [ on(b)]). object( b, [ under(a), on(c)]). object( c, [ under(b), on(table)]). object( d, [ on(table)]). isa( a, block( a)). isa( b, block( b)). isa( c, block( c)). isa( d, block( d)). isa( block( Name), physical_object( Name)). isa( camera, physical_object( camera)).