Toon posts:

[Prolog] [Xs | Xz], Xz is altijd atoom?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik was wat aan het klooien in Prolog, want heb er zo dadelijk examen over ;)

Stel je hebt volgende functie:
code:
1
test([Head | _], Head).


Waarom, als je nu bijvoorbeeld test([a,b,c,d], T) aanroept, krijg je alleen a terug? De head van een list kan alles zijn, dus hij kan toch evengoed [a], [a,b], [a,b,c], [a,b,c,d] teruggeven? In al deze gevallen is de tail (respectievelijk [b,c,d], [c,d], [d], []) een list, dus ze zijn allemaal mogelijk?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Probeer eens test([ [a,b,c], [d,e,f], [g,h,i] ] , T), dan zal je [a,b,c] als Head krijgen. De head is gewoon altijd het eerste element van de lijst, wat dat ook moge zijn.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Ja, dat snap ik, maar het kon toch evengoed [[a,b,c],[d,e,f]] geweest zijn, want dat past perfect in de definitie van de opbouw van een list, zeg maar?

Alls ik alle gevallen wil, moet ik dus een eigen prefix() functie gaan schrijven, wat ik niet verwacht had.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Nee, want de Head is gedefinieerd als het eerste element van de lijst, de Tail is de rest. Als dat al niet vast stond, was Prolog volkomen nutteloos geworden :+

edit:

Nou ja, lijsten in Prolog dus, hoe wil je ooit door een lijst itereren als je niet het eerste element kan pakken?

[ Voor 30% gewijzigd door Gerco op 30-06-2003 08:23 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Ik zie het al, ik zie het gewoon verkeerd :)

In de cursus staat 'the head can be anything' (dus ook een list), maar niet dat de head van [a,b,c] dan ook [a,b] kan zijn, hoewel [a,b] 'anything' is.

Achteraf bekeken domme vraag :)

thanks gerco