2009-03-04 15 views
4

Was ist die beste Möglichkeit zum Umwandeln einer Prolog-Liste in einen Prolog Begriff (das ist keine Liste), in Bezug auf Effizienz und die Verwendung von vorhandenen integrierten Prädikaten so viel wie möglich ?Konvertieren einer Liste in einen Begriff in Prolog

Die Schnittstelle und Verwendungsbeispiele wären die folgenden.

%% list_to_term(+List:list, +Functor:atom, -Term:term) 
% 
% Usage: 
% 
% ?- list_to_term([], myfunctor, Term). 
% Term = myfunctor. 
% 
% ?- list_to_term([a, b, [c], D, 2], myfunctor, Term). 
% Term = myfunctor(a, b, [c], D, 2). 

I.e. Die angegebene Liste (die eigentlich ein verschachtelter Begriff ist) wird in ein Begriff mit dem angegebenen Namen abgeflacht.

Ich sage nicht, dass es sinnvoll ist, dies zu tun. (Aber wenn Sie denken, dass es funktioniert, geben Sie bitte eine usecase in Ihrer Antwort.)

+0

Was die Antwort für 'list_to_term sein sollte ([X , Xs], '.', Term) '? Du verlangst, dass es keine Liste sein sollte ... :-) – false

+0

Danke, dass du das herausgibst. ;) Nun, da ich diese Frage nach 3 Jahren gelesen habe, macht es für mich keinen Sinn, wie es ist. Ich würde es komplett löschen, wenn ich könnte. – Kaarel

+0

Es ist eine Frage aus der Sicht eines Anfängers. Hier ist der Ort dafür. – false

Antwort

8

Sie müssen den =.. Operator verwenden, etwa so:

list_to_term(List, Functor, Term) :- 
    Term =.. [Functor | List]. 
+0

Sie meinen: Term = .. [Functor | Liste]? – Kaarel

+0

@Kaarel: Oh ja. Ich habe dein Beispiel falsch gelesen. Sie haben Recht: Um die gewünschten Ergebnisse zu erhalten, müssen Sie [Functor | Liste]. – Pesto

Verwandte Themen