See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Prolog - Wikipedia

Prolog

Na Galipedia, a wikipedia en galego.

Prolog é unha linguaxe de programación lóxica. O nome de Prolog provén de programation logique ("programación lóxica" en francés). Foi creada por Alain Colmerauer e Robert Kowalski sobre o 1972 e é unha alternatica ó Lisp deseñado nos EEUU. Foi un intento de criar unha linguaxe de programación que usase expresións lóxicas na vez de instrucións especificas do computador. En certa maneira, Prolog é un subconxunto de Planner. As ideas de Planner foron máis tarde completamente desenvolvidas na Scientific Community Metaphor.

Prolog é usada en moitos programas de intelixencia artificial e cómputo de linguaxes (especialmente a natural, para a cal foi deseñada). A súa sintaxe e semántica consideránse moi simples e claras, xa que o obxectivo orixinal era fornecer unha ferramenta para lingüistas sen coñecimentos en informática.

Os programas de Prolog están constituidos por clausulas de Horn que constitúen regras do tipo modus ponens, e dicir "Se é verdade o antecedente entón e verdade o consecuente". Os conceptos fundamentais que implementa Prolog son a unificación, a recursividade pola cola (tail recursion) e a volta atrás (backtracking).


Índice

[editar] Tipos de datos

Prolog non emprega tipos de datos da mesmo xeito que o fan a maioría das linguaxes. É preferible falar de elementos lóxicos de Prolog na vez de tipos de datos.

[editar] Atomos

Son constantes de texto. Un átomo é unha secuencia de letras, números e o caracter '_', que comeza cunha letra minúscula. Usualmente, para representar un átomo non alfanúmerico, escríbese entre apóstrofes (p. ex. 'átomo con espazos').

[editar] Números

A maioría das implementacións de Prolog non distinguen entre enteiros e números reais.

[editar] Variables

As variables se denotan por unha cadea de letras, números e o carácter ('_'), e comeza cunha letra maiúscula. En Prolog unha variable non é un contedor ao que se lle poda asignar un valor coma na programación imperativa.

[editar] Termos

Os termos son a única maneira na que Prolog pode representar datos complexos. Un termo consiste nunha cabeza chamada funtor (que debe ser un átomo) e parámetros (sen restricción de tipos) listados entre parénteses e separados por comas. O número de parametros chámase aridade do termo. Un termo e identificado pola sua cabeza e a aridade, usualmente escrito funtor/aridade.

[editar] Listas

Unha lista non é un tipo de datos autónomo, está definido recursivamente (usando o termo '.'/2):

  1. atom [] é a lista valeira
  2. se T e unha lista e H é un elemento, entón o termo '.'(H, T) é unha lista.

O primeiro elemento, chamado cabeza, é H, que está seguido dos contidos do resto da lista, designado T ou cola. A lista [1,2,3] estaría representada internamente como '.'(1, '.'(2, '.'(3, []))). Un atallo sintáctico e [H | T], que e moi usado para construir regras. A lista enteira pode ser procesada procesando o primeiro elemento, e logo o resto da lista de maneira recursiva.

Por conveniencia de programación, as listas poden ser construidas e desconstruidas de moitos xeitos:

  • Enumeración de elementos: [abc, 1, f(x), Y, g(A,rst)]
  • Precedido dun elemento: [abc | L1]
  • Precedido de múltiplos elementos: [abc, 1, f(x) | L2]
  • Termo: '.'(abc, '.'(1, '.'(f(x), '.'(Y, '.'(g(A,rst), [])))))

[editar] Cadeas (Strings)

As cadeas se escriben usualmente como unha secuencia de caracteres entre comiñas. Normalmente se representan internamente como unha lista de códigos ASCII.

[editar] Exemplo de Código Prolog

%%
%% declaracións
%%

paide('xoan', 'maria'). % Xoán é pai de María
paide('pablo', 'xoan'). % Pablo é pai de Juan
paide('pablo', 'marcela').
paide('carlos', 'debora').

% A é fillo de B se B é pai de A
fillode(A,B) :- paide(B,A).

% A es avó de B se A é pai de C y C é pai de B
avode(A,B) :- 
   paide(A,C), 
   paide(C,B).

% A e B son irmáns se o pai de A e tamén o pai de B e se A e B non son o mesmo
irmande(A,B) :- 
   paide(C,A) , 
   paide(C,B), 
   A \== B.        

% A e B son familiares se A é pai de B ou A é fillo de B ou A é irmán de B
familiarde(A,B) :- 
   paide(A,B).

familiarde(A,B) :-
   fillo(A,B). 

familiarde(A,B) :- 
   irmande(A,B).

%%
%% consultas
%%

% Xoán e irmán de Marcela?
?- irmande('xoan', 'marcela').
yes

%Carlos é irmán de Xoán?
?- irmande('carlos', 'xoan').
no

% Pablo é avó de María?
?- avode('pablo', 'maria').
yes

% María é avó de Pablo?
?- avode('maria', 'pablo').
no

[editar] Ligazóns relacionadas


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -