2016-11-27 3 views
0

Wenn ich diese:Überprüfung Funktors in einer Liste

?:check_dv([v(1,x),v(2,y)], X). 

Wie kann ich überprüfen, was das zweite Argument ist zum Beispiel in dem v(1,x) (in diesem Fall x)? Wenn ich den Kopf der Liste habe: [Head | Tail], mit Head = [v(1,x)], wie kann ich es überprüfen?

Antwort

1

Wenn Sie wissen, dass alle Elemente der Form v(_,_) sind, dann können Sie einfach Vereinigung:

Head = v(_, x) 

Dies gelingt iffHead dieser Form ist und funktioniert einwandfrei in alle Richtungen.

Wenn die Elemente der Liste nicht so homogen sind, können Sie   arg/3 verwenden:

arg(2, Head, x) 

Beachten Sie, dass dies nur funktioniert, wenn Head ausreichend ist instanziiert, und allein aus diesem Grund bereits weniger   bevorzugt:

 
?- arg(2, v(a,x), x). 
true. 

?- arg(2, Head, x). 
ERROR: arg/3: Arguments are not sufficiently instantiated 
+0

Tha Nks, hab es! Die gleiche Idee kam mir 5 Minuten später. : D – Daesos

+0

Ich nehme an, du meinst 5 Minuten nach dem Lesen ;-) – mat

+0

Nein, ernsthaft. Ich brauchte einfach eine Pause vom Programmieren. : D – Daesos

Verwandte Themen