>>772
単に部分的に抽象化しただけだと、


駒場東大前から下北沢までの距離(_距離) :-
    ある2つの駅間の距離(駒場東大前, 下北沢, _距離).

ある2つの駅間の距離(_到達駅, _到達駅, 0) :- !.
ある2つの駅間の距離(_駅_1,_到達駅, _距離) :-
    井の頭線の駅間距離(_駅_1, _駅_2, _駅間距離),
    ある2つの駅間の距離(_駅_2, _到達駅, _距離_2),
    _距離 is _距離_2 + _駅間距離.

となって、 ある2つの駅間の距離/3 という抽象定義の中に具体的な副目標、
井の頭線の駅間距離/3 が現れて設計は破綻する。それで>>779に示したように、
引数側に _路線 を設けて、井の頭線を移動する必要が生じる。
ここら当たりは、抽象プログラミングの弱点であって、常にこのような見直し
を怠ることができない。一方、具象的なプログラミングに於いてはこのような
設計変更は良かれ悪しかれ、ほとんど起こらない。