2009-03-04 4 views
4

Quelle est la meilleure façon de convertir une liste Prolog en un terme Prolog (ce n'est pas une liste), en termes d'efficacité de , et d'utiliser le plus possible les prédicats intégrés existants ?Conversion d'une liste en un terme dans Prolog

Les exemples d'interface et d'utilisation sont les suivants.

%% 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. la liste donnée (qui est en fait un terme imbriqué) est aplatie en un terme avec le nom donné. Je ne dis pas que c'est logique de le faire. (Mais si vous pensez qu'il fait, s'il vous plaît fournir un usecase dans votre réponse.)

+0

Quelle devrait être la réponse pour 'list_to_term ([X , Xs], '.', Terme) '? Vous exigez que ce ne soit pas une liste ... :-) – false

+0

Merci d'avoir signalé cela. ;) Maintenant que j'ai lu cette question après 3 ans, cela n'a pas vraiment de sens pour moi. Je le supprimerais complètement si je le pouvais. – Kaarel

+0

C'est une question du point de vue d'un débutant. Voici l'endroit pour cela. – false

Répondre

8

Vous devez utiliser l'opérateur =.., comme ceci:

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

Vous voulez dire: Term = .. [Functor | Liste]? – Kaarel

+0

@Kaarel: Oh, ouais. J'ai mal interprété votre exemple. Vous avez raison: pour obtenir les résultats que vous voulez, vous devez utiliser [Functor | Liste]. – Pesto