[mod.ai] Bug in Turbo Prolog

David_West%UB-MTS%UMich-MTS.MAILNET@MIT-MULTICS.ARPA (10/15/86)

 Most criticisms of Turbo Prolog have been only flames, but the
 following is, I think, an actual bug.  If member is defined by:
    member(H,[H|_]):-!.
    member(H,[_|T]):-member(H,T).
 the goal:
    member([1,X],[[3,4],[1,2]]).
 will succeed (binding X to 2) or FAIL if the domain of the
 lowest level list elements is declared as integer or reference
 integer, respectively.
   It might be argued that this choice (whether or not to specify
 reference) is the user's responsibility, as in Algol-like
 languages;  My view is that reference declarations are (like
 register declarations in C) "advice to the compiler", which
 should not alter the semantics of the program .  This seems
 reasonable because:
  1) the Turbo Prolog compiler will on its own initiative retype
     domains from value to reference, so it can't consider
     the distinction to affect the semantics; and
  2) the abovementioned goal fails ONLY if the cut is present
     in the first clause of member;  without this cut, Turbo
     Prolog (with or without reference specified) gives the same
     result as do other Prologs (for which, as expected, the
     presence or absence of the cut does not affect the result).