Below we have pictured how communication with an object takes place. \setlength{\unitlength}{0.01cm} \nop{ ) } \hspace{1cm} \begin{tabular}[t]{|p{ 3.2cm}|p{ 3.2cm}|p{ 3.2cm}|} \hline \begin{picture}(374,240)(0,0) \put(110,160){\makebox(0,0)[r]{ c!m(t) } } \put(220,160){\makebox(0,0)[l]{ m(t) } } \put(110,160){\circle{10}} \put(220,160){\circle*{10}} \put(110, 170){\line(0,6){ 40}} \multiput( 120,160)(10,0){ 11}{\line(6,0){5}} \end{picture} & \begin{picture}(374,240)(0,0) \put(110,160){\makebox(0,0)[r]{ c!m(t) } } \put(110,60){\makebox(0,0)[r]{ } } \put(220,160){\makebox(0,0)[l]{ m(t) } } \put(110,60){\circle{10}} \put(110,160){\circle{10}} \put(220,160){\circle*{10}} \put(110, 170){\line(0,6){ 40}} \multiput(220, 70)(0, 20){ 5}{\line(0,6){10}} \multiput( 120,160)(10,0){ 11}{\line(6,0){5}} \end{picture} & \begin{picture}(374,240)(0,0) \put(110,160){\makebox(0,0)[r]{ c!m(t) } } \put(110,60){\makebox(0,0)[r]{ } } \put(220,60){\makebox(0,0)[l]{ %h_1,... } } \put(220,160){\makebox(0,0)[l]{ m(t) } } \put(110,60){\circle{10}} \put(110,160){\circle{10}} \put(220,60){\circle{10}} \put(220,160){\circle*{10}} \put(110, 170){\line(0,6){ 40}} \put(110, 50){\line(0,-6){20}} \multiput(220, 70)(0, 20){ 5}{\line(0,6){10}} \multiput( 120,60)(10,0){ 11}{\line(6,0){5}} \put( 130,60){\vector(-4,0){ 20}} \multiput( 120,160)(10,0){ 11}{\line(6,0){5}} \end{picture} \\ \hline \end{tabular} Assume that we have an object c. The goal c!m(t) asks the object c to evaluate m(t), where m is a predicate name and t represents the arguments of the call. \id{ We use a predicate name m since, adopting standard terminology, we will speak of the methods of an object, which in our case are ordinary clauses. } While the goal m(t) is being evaluated, the caller waits for an answer. Backtracking over the results, indicated by %h_1,..., may take place as long as there are alternative solutions. Backtracking is initiated by the object that called for the method.