die Prolog Notation von Präfix/Suffix ist eine ziemlich einfache: Es setzt ziemlich viel Arbeit an append. Für diejenigen, die es nicht wissen:Erhalten Sie "echte" Präfixe/Suffixe/Infixe in Prolog
prefix(P,L):-append(P,_,L).
suffix(S,L):-append(_,S,L).
Nun bedeutet dies, dass das Ergebnis für prefix(X,[a,b,c,d]).
sein wird: X=[];X=[a];X=[a,b];X=[a,b,c];X=[a,b,c,d]
Hier mein Problem dabei ist: Ich habe einen „echten“ Präfix will. Daher darf ein Präfix nicht leer sein, noch darf der darauf folgende Teil leer sein. So das Ergebnis der Abfrage prefix(X,[a,b,c,d]).
sollte
X=[a];X=[a,b];X=[a,b,c]
sein und das ist es.
Leider ist die wirkliche beaty von der Standard-Einbau Präfix Prädikat ist, dass es die Beendigung des append verwenden kann, das ist append([],Y,Y).
So ist es recht einfach ist, zu wissen, wann man aufhören, die Liste zerpflücken eines nach der anderen bis die Liste leer ist.
Mein Abschluss bedeutet: Stoppen Sie, wenn in Ihrer Liste genau ein Element übrig ist. Wie mache ich das?
Mein naives Ergebnis wäre:
prefix(P,L):-
length(P,1),append(P,E,L),E/=[].
Dies obwohl falsch anfühlt. Ich bin bei der Arbeit, also habe ich nicht überprüft, ob das tatsächlich funktioniert, aber es sollte:
Gibt es einen bequemeren Weg, dies zu tun? Das gleiche gilt für Suffix, das wird noch schwieriger, da Sie keine Möglichkeit haben, den Tail so spezifisch wie den Head zu adressieren, ich denke, ich würde einfach das Ganze umkehren und dann das Präfix darauf setzen.
Infix wird nur eine Kombination von zwei sein.
Ich hoffe es ist klar, was ich meine. Danke für deinen Beitrag! tl; dr: Wie schreibe ich ein Prädikatenpräfix/2, das nur echte Präfixe filtert, also darf das Präfix selbst nicht leer sein, noch darf die Liste, auf die es folgt, leer sein.
keine Notwendigkeit für 'H' und' T' – false
Danke für Ihre Antwort. Ich kann kaum meine Augen offen halten, ich werde bald wieder antworten. Ich muss mich für einen Moment ausruhen - nur um sicherzustellen, dass du dich nicht vergessen fühlst :) – InDaPond