Dieser Hinweis ist aus der Übung im WS 1994/95 oder aus einer noch älteren Übung oder war nie Teil einer Übung und ist daher möglicherweise für spätere Übungen nicht gültig!
Das vordefiniere Prädikat name/2 und warum Sie dieses Prädikat nicht verwenden sollen. Das Prädikat name/2 ist ein BIP (engl. ISO-Jargon für Built-In Procedure/Predicate), das noch sehr viele Prologsysteme unterstützen und auch leider sehr viele Lehrbücher noch erwähnen). Es ist ein gutes Beispiel für ein vordefiniertes Prädikat, das eine sehr schlecht gewählte Semantik besitzt. Wieso die Semantik von name/2 nicht klar ist: :- name(abc,Chars), Chars = "abc". % ok :- name(Atom,"abc"), Atom = abc. % ok :- name(atom,"abc"). % ok :- name(13, Chars), Chars = "13". % ok :- name(N, "13"), N = 13. % ok :- name(13, "13"). % ok So weit, so gut. Problematisch wird die Definition erst, wenn Atome vorkommen, die aus Zeichen einer Zahl bestehen. :- name('13', Chars), Chars = "13". % ? Wenn '13' -> "13", so sollte doch auch die umgekehrte Richtung gelten! Aber: :- name(N, "13"), dif(N,'13'). % !!! Anders ausgedrückt: bizarr(A) :- atom(A), name(A,Chars), name(Ax,Chars), dif(A,Ax), fehler('Wieso ist das zurückkonvertierte Atom nicht gleich dem ursprünglichen?'). Aus diesem Grunde gibt es in neueren (naja, auch schon seit vielleicht 10 Jahren...) Prologsystemen zwei getrennte Prädikate, die auch im Skriptum besprochen werden. Seitdem ist atom_chars/2 eindeutig definiert, nur number_chars macht genaugenommen noch immer Probleme: :- number_chars(N,"01"), number_chars(N,Chars). Zurück: \hinweis{init}