2016-12-04 1 views
0

Très nouveau pour prolog. J'essaye de créer une règle récursive simple pour trouver le nème élément sur la liste. Par exemple, si j'ai une liste des chaînes ou des nombres que je veux être en mesure d'utiliser la requêteComment trouver le nième élément de liste et avoir la réponse dans R PROLOG

?- findme([dog, cat , bird], 1, R). 
R = dog 
?- findme([9,8,7,6,5], 3,R). 
R= 7 
?- findme([mouse,cheese,cat,milk], 5, R). 
R = false 

Je souhaite pas d'utiliser le Nth0 builtin, ni avoir R tel que R est n-1

Répondre

0

Voici mon implémentation:

find([],N,false):-N>0.  
find([H|_],1,H). 
find([_|T],N,R) :- N1 is N-1, find(T,N1,R). 

Quelques exemples:

?- find([dog, cat , bird], 1, R). 
R = dog ; 
false. 

?- find([mouse,cheese,cat,milk], 5, R). 
R = false. 

?- find([9,8,7,6,5], 3,R). 
R = 7 ; 
false. 
+0

Heureux qui a aidé !!! – coder

+0

Je suppose qu'au lieu d'utiliser 'find ([], 1, false) .', vous devriez utiliser' find ([], N, false) .' car si vous lancez 'find ([], 3, R). '- cela ne retournera pas R = false. Corrigez-moi si je me trompe. –

+0

Ouais c'est sûr que c'est ce que j'avais fait en premier lieu mais j'ai testé avec find ([], 1, false). et a travaillé ainsi laissé comme ça. Merci beaucoup!!! – coder

0

Ce qui suit donne la sortie attendue.

find([],N) :- write("There is no such element in the list"), nl.  
find([Element|List],1) :- write("The element is ", Element), nl. 
find([Element|List],N) :- N1 = N-1, find(List,N1). 

Sortie:

find([1,2,3,4],3) 
The element is 3 
Yes 

find([1,2,3,4],0) 
There is no such element in the list 
Yes 

find([1,2,3,4],5) 
There is no such element in the list 
Yes 

find([1,2,4,3],4) 
The element is 3 
Yes 

Mise à jour

find([],N,false) :- N>0. 
find([Element|List],1,Element). 
find([Element|List],N,R) :- N1 = N-1, find(List,N1,R). 
+0

J'avais regardé cet exemple. Cependant cela n'imprime pas le R. Par exemple je lance element_at ([9,8,7,5,5], 3, R) il me donne juste faux –

+0

mais vous avez mentionné dans votre message que 'findme ([9,8 , 7,6,5], 3, R). »Vous donne' R = 7'. alors quel est le problème? En fait, je ne peux pas exécuter le code et vérifier maintenant dans mon ordinateur portable. –

+0

En fait @Wasi je voudrais créer une règle qui me donnera R = 7. J'ai essayé quelque chose de similaire à votre édition. Me donne toujours faux. Si je change les choses, il imprime le résultat pour la valeur n -1. Par exemple findme ([9, 8. 7, 5, 5], 3, R) j'obtiendrai R = 8. Pas ce que je cherche. Je veux R = 7. –