{"id":434,"date":"2018-12-27T20:45:11","date_gmt":"2018-12-28T02:45:11","guid":{"rendered":"http:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=434"},"modified":"2021-07-11T16:30:33","modified_gmt":"2021-07-11T21:30:33","slug":"listas","status":"publish","type":"page","link":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=434","title":{"rendered":"Listas"},"content":{"rendered":"<h1><strong>LISTAS<\/strong><\/h1>\n<p>Las listas son uno de los aspectos m\u00e1s importantes de PROLOG, ya que de esta manera se trabaja con estructuras de datos organizadas y netamente recursivas. La recursividad (<a href=\"http:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=185\">http:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=185<\/a>) es una de las grandes fortalezas de PROLOG, por lo que por medio de las listas se pueden explotar las caracter\u00edsticas inherentes del lenguaje.<\/p>\n<p>Una lista es una representaci\u00f3n de un conjunto de elementos. Dentro de PROLOG se pueden generar listas de diferentes tipos tales como una lista de valores num\u00e9ricos [1, 2, 3\u2026], listas de valores alfab\u00e9ticos [a, b, c,\u2026], o listas de valores alfanum\u00e9ricos [a, b, 1, 2, c, 3,\u2026]. Como ya se ha observado una lista se representa como un conjunto de elementos encerrados entre corchetes:<\/p>\n<pre class=\"lang:default decode:true \">[elemento1, elemento2, elemento3,\u2026.]<\/pre>\n<p>Pero tambi\u00e9n tenemos la lista vac\u00eda\u00a0 [ ]. As\u00ed como la generaci\u00f3n de listas de listas<\/p>\n<pre class=\"lang:default decode:true \">[[1, 2, 3..], [a, b, c, \u2026], [\u2026.],\u2026..].<\/pre>\n<p>PROLOG, identifica de manera autom\u00e1tica este tipo de elementos como predicados de 2 secciones, tal como se ve a continuaci\u00f3n:<\/p>\n<p style=\"text-align: center;\"><strong>[Cabeza | Cola]<\/strong><\/p>\n<p>PROLOG separa las listas en <em>Cabeza<\/em> y en <em>Cola<\/em>, la cabeza representa el primer elemento de una lista, y la cola todos los elementos restantes de la misma.<\/p>\n<p><strong>Ejemplo 1. <\/strong>Identifica la cabeza y a cola de la siguiente lista [1, 2, 3, 4, 5, 6].<\/p>\n<p>Como se mencion\u00f3, PROLOG separa por defecto en estos dos elementos, entre el primer componente de la lista y el resto de ellos, por lo tanto tenemos que:<\/p>\n<p style=\"text-align: center;\"><strong>Cabeza=1<\/strong><\/p>\n<p style=\"text-align: center;\"><strong>Cola= [2, 3, 4, 5, 6]<\/strong><\/p>\n<p><strong>Ejemplo 2.<\/strong> Realizar un programa recursivo que encuentre el m\u00e1ximo valor de una lista de valores.<\/p>\n<p>Este ejercicio se puede resolver por medio del siguiente c\u00f3digo<\/p>\n<pre class=\"lang:default decode:true \">m\u00e1ximo_valor([X],X).\r\nm\u00e1ximo_valor([X|Xs],V) :- maximo_valor(Xs,Y), V is max(X,Y).<\/pre>\n<p>Donde se tiene que la funci\u00f3n <em>m\u00e1ximo_valor<\/em>, se llama a si misma en una interacci\u00f3n recursiva. Tenemos que <em>max(X,Y)<\/em>, es una funci\u00f3n definida que devuelve el valor m\u00e1ximo entre dos valores.<\/p>\n<h2><strong>Algunas funciones para trabajar con listas<\/strong><\/h2>\n<h2 style=\"text-align: center;\"><strong>append<\/strong><\/h2>\n<p>Existen funciones definidas que ayudaran a trabajar con listas, por ejemplo <em>append<\/em>, la cual concatena dos listas y devuelve una tercer lista concatenada, por ejemplo:<\/p>\n<pre class=\"lang:default decode:true \">append([1, 2, 3], [a, b , c], X).<\/pre>\n<p>X dar\u00e1 como resultado <em>[1, 2, 3, a, b, c]<\/em>.<\/p>\n<p>Tambi\u00e9n se tiene el comando <em>append([[\u2026], [\u2026],\u2026..,[\u2026]], X)<\/em>, que realizara la concatenaci\u00f3n de todas las listas que conforman una lista de listas.<\/p>\n<h2 style=\"text-align: center;\"><strong>member<\/strong><\/h2>\n<p><em>member,<\/em> por otro lado, nos dir\u00e1 si un elemento es miembro o no de una lista. Por ejemplo, la siguiente funci\u00f3n, dar\u00e1 como resultado False<\/p>\n<pre class=\"lang:default decode:true \">member(1,[5, 6, 7, 8, 2, 3]).<\/pre>\n<p>Pero la siguiente funci\u00f3n, dar\u00e1 como resultado <em>True<\/em>.<\/p>\n<pre class=\"lang:default decode:true \">member(1,[5, 6, 7, 1, 8, 2, 3]).<\/pre>\n<h2 style=\"text-align: center;\"><strong>prefix<\/strong><\/h2>\n<p>Este comando sirve para identifica si el primer argumento dentro de <em>prefix<\/em> es una sub cadena del segundo argumento, por ejemplo, si nosotros realizamos la siguiente consulta<\/p>\n<pre class=\"lang:default decode:true \">?- prefix([1,2], [1,2,3,4,5]).<\/pre>\n<p>La respuesta ser\u00e1 <em>true<\/em>. Pero si realizamos la siguiente consulta,<\/p>\n<pre class=\"lang:default decode:true \">?- prefix([1,3], [1,2,3,4,5]).<\/pre>\n<p>La respuesta ser\u00e1 <em>false<\/em>.<\/p>\n<h2 style=\"text-align: center;\"><strong>select<\/strong><\/h2>\n<p>Tenemos la siguiente consulta s<em>elect(Elimina, Lista1, Lista2)<\/em>. En este caso, este comando dar\u00e1 <em>True<\/em> si al quitar el elemento <em>Elimina<\/em> de la<em> Lista1<\/em>, da como resultado la L<em>ista2<\/em>, de otra forma, ser\u00e1 <em>false<\/em>. Por ejemplo, la siguiente consulta dar\u00e1 como resultado true<\/p>\n<pre class=\"lang:default decode:true\">?- select(1, [2,3,1,4], [2,3,4]).<\/pre>\n<p>Pero la siguiente consulta, da como resultado false.<\/p>\n<pre class=\"lang:default decode:true \">?- select(2, [2,3,1,4], [2,3,4]).<\/pre>\n<h2 style=\"text-align: center;\"><strong>reverse<\/strong><\/h2>\n<p>Este comando da como resultado <em>true<\/em>, si la lista 2 es el inverso de la lista 1, dentro del siguiente esquema <em>reverse(Lista1, Lista2)<\/em>. Por ejemplo, tenemos que si consultamos la siguiente l\u00ednea, el resultado ser\u00e1<em> true<\/em>,<\/p>\n<pre class=\"lang:default decode:true \">.?- reverse([1,2,3], [3,2,1]).<\/pre>\n<p>Pero si consultamos la siguiente l\u00ednea, el resultado ser\u00e1 <em>false<\/em><\/p>\n<pre class=\"lang:default decode:true \">? - reverse([3,2,1], [3,2,1]).<\/pre>\n<h2 style=\"text-align: center;\"><strong>permutation<\/strong><\/h2>\n<p>Este comando nos devuelve un <em>true<\/em> si la lista 2 es una permutaci\u00f3n de la lista 1, y un <em>false<\/em> si no lo es. Por ejemplo:<\/p>\n<p style=\"text-align: center;\"><strong>?- permutation([1,2,3,4], [2,3,1,4]).<\/strong><\/p>\n<p style=\"text-align: center;\"><strong>true ;<\/strong><\/p>\n<p style=\"text-align: center;\"><strong>?- permutation([1,2,3,4], [2,3,1,5]).<\/strong><\/p>\n<p style=\"text-align: center;\"><strong>false.<\/strong><\/p>\n<p style=\"text-align: left;\">Sin embargo, tambi\u00e9n nos pude devolver todas las listas que sean permutaciones de la lista 1, tal como se puede ver en el siguiente ejemplo.<\/p>\n<p style=\"text-align: center;\">?- permutation([1,2,3,4], A).<\/p>\n<p style=\"text-align: center;\">A = [1, 2, 3, 4] ;<\/p>\n<p style=\"text-align: center;\">A = [1, 2, 4, 3] ;<\/p>\n<p style=\"text-align: center;\">A = [1, 3, 2, 4] ;<\/p>\n<p style=\"text-align: center;\">A = [1, 3, 4, 2] ;<\/p>\n<p style=\"text-align: center;\">A = [1, 4, 2, 3] ;<\/p>\n<p style=\"text-align: center;\">A = [1, 4, 3, 2] ;<\/p>\n<p style=\"text-align: center;\">A = [2, 1, 3, 4] ;<\/p>\n<p style=\"text-align: center;\">A = [2, 1, 4, 3] ;<\/p>\n<p style=\"text-align: center;\">A = [2, 3, 1, 4] ;<\/p>\n<p style=\"text-align: center;\">A = [2, 3, 4, 1] ;<\/p>\n<p style=\"text-align: center;\">A = [2, 4, 1, 3] ;<\/p>\n<p style=\"text-align: center;\">A = [2, 4, 3, 1] ;<\/p>\n<p style=\"text-align: center;\">A = [3, 1, 2, 4] ;<\/p>\n<p style=\"text-align: center;\">A = [3, 1, 4, 2] ;<\/p>\n<p style=\"text-align: center;\">A = [3, 2, 1, 4] ;<\/p>\n<p style=\"text-align: center;\">A = [3, 2, 4, 1] ;<\/p>\n<p style=\"text-align: center;\">A = [3, 4, 1, 2] ;<\/p>\n<p style=\"text-align: center;\">A = [3, 4, 2, 1] ;<\/p>\n<p style=\"text-align: center;\">A = [4, 1, 2, 3] ;<\/p>\n<p style=\"text-align: center;\">A = [4, 1, 3, 2] ;<\/p>\n<p style=\"text-align: center;\">A = [4, 2, 1, 3] ;<\/p>\n<p style=\"text-align: center;\">A = [4, 2, 3, 1] ;<\/p>\n<p style=\"text-align: center;\">A = [4, 3, 1, 2] ;<\/p>\n<p style=\"text-align: center;\">A = [4, 3, 2, 1] ;<\/p>\n<p style=\"text-align: center;\">false.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>LISTAS Las listas son uno de los aspectos m\u00e1s importantes de PROLOG, ya que de esta manera se trabaja con estructuras de datos organizadas y netamente recursivas. La recursividad (http:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=185) es una de las grandes fortalezas de PROLOG, por lo que por medio de las listas se pueden explotar las caracter\u00edsticas inherentes del lenguaje. Una &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/virtual.cuautitlan.unam.mx\/intar\/?page_id=434\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> &#8220;Listas&#8221;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-434","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages\/434"}],"collection":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=434"}],"version-history":[{"count":4,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages\/434\/revisions"}],"predecessor-version":[{"id":961,"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=\/wp\/v2\/pages\/434\/revisions\/961"}],"wp:attachment":[{"href":"https:\/\/virtual.cuautitlan.unam.mx\/intar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}