2012-10-27 7 views
1

Je suis un débutant total Prolog J'ai ce code (je suis désolé si ce ne est pas très sympathique à lire)Listes Prolog avec des listes à l'intérieur

AdjOfAll(State,[FreeSpace],[Result]):- 
    Adj(State,FreeSpace,Result). 
AdjOfAll(State,[Space|NextSpace],[X|Xs]):- 
    AdjOfAll(State,NextSpace,Xs), 
    Adj(State,Space,X). 

mon problème est que revient Adj [ (element_1), ... , (element_n) ]

Mon objectif avec AdjOfAll était d'obtenir,

[ (element_1), ..., (element_n), (element_1_from 2nd adj), ... ] 

mais je reçois

[ [ (element_1), ... ,(element_n)] , [ (element_1_from 2nd adj) ], ... ] 

J'espère que son comprendre ce que je veux dire, désolé pour le mauvais anglais

Répondre

1

voir si peut vous aider à flatten/2 pour obtenir la sortie droite. Placez-le après l'appel de niveau supérieur à AdjOfAll/3.

... 
AdjOfAll(State, NextSpace, ResultNested), 
flatten(ResultNested, Result), 
... 

BTW êtes-vous sûr que vos prédicats sont nommés correctement? Habituellement, ils sont minuscules.

+0

merci travaux aplatis. d'ailleurs c'était ma mauvaise traduction pour être plus facile à lire mais oui dans l'original c'est adjOfAll :) – Opetion