2010-10-05 6 views
10

Gibt es eine Möglichkeit, den Typ eines Elements in einer Liste in Prolog zu bestimmen? Ich weiß, dass Variablen nicht explizit in Prolog eingegeben werden, aber ich muss überprüfen, ob ein Element eine Zahl, ein bestimmtes Zeichen usw. ist. Wie kann dies erreicht werden?Überprüfung des Prologtyps

+0

Für komplexere Typen als Primitive können Sie den SWI_PROLOG-Datensatz-Handling-Mechanismus (http://tinyurl.com/2gy53rr) aufrufen. Auf diese Weise können Sie zusammengesetzte Typen mit benannten Accessor-Feldern ausdrücken. Bei einer Datensatzspezifikation werden automatisch alle Typüberprüfungsprädikate für Sie generiert. Sehr hilfreich! – sharky

Antwort

11

Prolog definiert eine Gruppe von Einbau-Prädikate für Typ Prüfzwecke: var/1, atom/1, integer/1, float/1, atomic/1, compound/1, nonvar/1, number/1, die alle Sie haben eine selbsterklärende Bedeutung, wenn Sie die Datentypen der Sprache kennen. Für bestimmte Zeichen können Sie die Vereinheitlichung mit diesem Zeichen nutzen, nachdem Sie überprüft haben, dass das Element keine freie Variable ist (andernfalls ist die Vereinheitlichung immer erfolgreich).

4

Sie könnten diesen Code versuchen:

isList([_|_]). 
isList([]). 

Hoffe, es hilft.

+4

Beantwortet die Frage nicht. – Junuxx

+1

... und 'isList ([a | b])' ist erfolgreich, aber keine Liste. – false

+3

Ich weiß, es hat nichts mit der Frage zu tun, aber was er meinte, ich denke, war 'isList ([_ | Tail]: - isList (Tail) .' statt der ersten Zeile – Yolgie

0

Liste zu überprüfen, könnten Sie versuchen:

listing(is_list/1, list_functor/1). 

is_list(X) :- 
    functor(X, F, _), 
    list_functor(F). 

list_functor('.'). 
list_functor('[]'). 
2

Um zu überprüfen, ob eine Variable auf eine Liste gebunden ist, können Sie is_list/1 verwenden.