J'ai cette portion de code comme cas de base dans un prédicat récursif.Pourquoi prolog ne reconnaît pas les arguments dans une requête?
riduci_lista_valori([[V, N]],m_var,Lr):-
member(V, m_var),
Lr =[N].
Le problème est que quand je joue ma requête, il ne correctement unifie pas les arguments du prédicat avec ses paramètres. Vu le code, ma requête est: riduci_lista_valori([[a, 5]], [c,e], F).
Et je m'attends à ce que Prolog retourne F = [5]
Débogage du code semble qu'il ne reconnaît pas correctement les arguments car il ne s'unifie pas comme: V = a
, N = 5
m_var = [c,e]
mais il donne: 1 = [[a, 5]]
et 2 = [c, e]
.
Alors que si je vous invite: [[V, N]] = [[a,5]].
il fait la bonne unification: V = a
, N = 5
.
Qu'est-ce que je fais mal? Je vous remercie!
Merci pour votre réponse, j'ai appris quelque chose de nouveau à propos de débullage déclaratif. Mais votre dernière ligne a sauvé ma nuit :) –
s (X), quelle idée géniale! –
Pourriez-vous inclure une référence qui explique \ expand 'debugging déclaratif' en ce qui concerne Prolog; en particulier l'utilisation de 'op (920, fy, *).' C'est une bonne technique que je voudrais intégrer dans ma boîte à outils Prolog. Si vous souhaitez que ce soit une question distincte, il suffit de demander. Peut-être que cela devrait être un tag avec des références comme [tag: failure-slice] –