Está en la página 1de 57

Predicados, operadores lgicos,

Predicados, operadores lgicos,


variables locales y globales,
variables locales y globales,
Juegos inteligentes en LISP
Juegos inteligentes en LISP
Laboratorio IA
Semestre 201!1
Semestre 201!1
"olando A# $agui%a P&re'
Inteligencia Arti(icial 201!1
Predicados
Predicados

Predicado es una (c )ue devuelve * o +IL

*ipos,

Predicados para tipos de datos

Predicados de igualdad

Predicados para listas

Predicados num&ricos
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Predicados para tipos de datos
Predicados para tipos de datos

-omprueban si un ob.eto corresponde a un


determinado tipo de dato

/ormatos,

0atom ob.eto1 * si ob.eto es un 2tomo y +IL cc

0symbolp ob.eto1 * si ob.eto es un s3mbolo y


+IL cc

0listp ob.eto1 * si ob.eto es 1 lista y +IL cc

0numberp ob.eto1 * si ob.eto es un n4mero y


+IL cc

0stringp ob.eto1 * si ob.eto es 1 string y +IL cc

(loatp, vectorp,5#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

6J$S#

0symbolp 7lisp1 *

0set) universidades 70unmsm uni puc1


08+$S$ 8+I P8-1

0symbolp universidades1 +IL

0listp universidades1 *

0numberp 91 *

0(loatp 91 +IL

0(loatp 9#01 *
Predicados para tipos de datos
Predicados para tipos de datos
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Inteligencia Arti(icial 201!1
Predicados num&ricos
Predicados num&ricos

Se aplican slo para n4meros

* si predicado se cumple, +IL cc

/ormatos,

0'erop numero1 * si n4mero es 0, +IL cc

0evenp numero1 * si n4mero es par, +IL cc

0oddp numero1 * si n4mero es impar, +IL cc

0plusp numero1 * si n4mero es mayor ) 0,


+IL cc

0minusp numero1 * si n4mero es menor ) 0,


+IL cc, 5#
"olando A# $agui%a P&re'

6.emplos,

0minusp 0: 0 1#21 *

0'erop 0! ;11 +IL

0'erop 0! 11 *
Predicados num&ricos
Predicados num&ricos
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Predicados de igualdad
Predicados de igualdad

<eterminan si =ay igualdad entre los


argtos )ue recibe

/ormato,
0predicado arg1 arg21

*ipos,

6>8AL para comparaciones gen&ricas

? para n4meros

S*"I+@!6>8AL para strings

6>L, 6> 0ob.etos id&nticos1


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

6>8AL

/ormato, 0e)ual arg1 arg21

<evuelve * si arg1 y arg2 tienen el mismo


valor, y +IL caso contrario#

6J$S#

0e)ual 7lisp 7lisp11 *

0e)ual 7lisp 7lisa1 +IL

0e)ual 7a 0car 70a b c d111 *

0e)ual 9 9#01 +IL

0e)ual 0cons Aa A0b c d11 0cons Aa A0b c d111 *


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Predicados de igualdad
Predicados de igualdad
Predicados de igualdad
Predicados de igualdad

6>L

/ormato, 0e)l arg1 arg21

Similar a 6>8AL para nros 0veri(ica )ue sean


del mismo valor y tipo1 y para caracteres

Se usa en $6$B6", ASSC-

6.emplos,

0e)l 7a 0car 70a b c d111 *

0e)l 9 9#01 +IL

0e)ual 0cons Aa A0b c d11 0cons Aa A0b c d111 *

0e)l 0cons Aa A0b c d11 0cons Aa A0b c d111 +IL


Inteligencia Arti(icial 201!1 Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

Deri(ican 0des1igualdad entre n4meros

<evuelve * si se veri(ica, y +IL cc

?, E , F, E? , F?

6J$S#

0? G G1 *

0H? ; I1 *

0E 9 G#01 *

0F? J 1 *

0F? J J1 *
Predicados para comparar nros
Predicados para comparar nros
Inteligencia Arti(icial 201!1
"olando A# $agui%a P&re'
Predicados para listas
Predicados para listas

*ipos,

+8LL

$6$B6"

+8LL

/ormato, 0null lista1

<evuelve * si la lista es lista vac3a y +IL cc

0set) lista A0m .11 0$ J1


0null lista1 +IL

0null 01 +IL

0null nil1 *
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

$6$B6"

/ormato,
0member elemento lista1

-omprueba si elemento pertenece a la lista#

<evuelve la lista a partir de elemento, +IL cc

6J$S#

0member 7a 70d ( g a = K1 0a = K1

0member 7buscado A0el 0buscado1 mas buscado de la


lista11 0buscado de la lista1

0member 7a'ul 70ro.o a'ul verde amarillo11 0a'ul


verde amarillo1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Predicados para listas
Predicados para listas

$6$B6"

Si se especi(ica par2metro EclaveF ,test


cambia criterio de comparacin

/ormato,
0member elemento lista ,test predicado1

6J$S#

0member La'ulM 70Lro.oM La'ulM LverdeM LamarilloM11


+IL

0member La'ulM 0Lro.oM La'ulM LverdeM LamarilloM1 ,test


NOstring!e)ual1 0La'ulM LverdeM LamarilloM1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Predicados para listas
Predicados para listas

6J6"-I-ICS

0member 70buscado1 A0el 0buscado1 mas buscado de


la lista11

0member 70buscado1 A0el 0buscado1 mas buscado de


la lista1 ,test NAe)ual1

0member 2#0 70I 2 911

0member 2#0 70I 2 91 ,test NAe)ual1

0member 2#0 70I 2 91 ,test NA?1

0set) B- A0blo)ue1 blo)ue 2 blo)ue9 blo)ue11


0or 0member Ablo)ue2 B-1 0member Ablo)ue9 B-11

Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'


+IL
+IL
02 91
Predicados para listas
Predicados para listas
+IL
00B8S-A<C1 $AS
B8S-A<C <6 LA LIS*A1
0BLC>862 BLC>869 BLC>861
Cperadores lgicos

not

/ormato, 0not (orm1

<evuelve * si el valor de (orm es +IL, +IL en cc#

and

/ormato, 0and (orm1 (orm25(orm+1

6val4a las ePpresiones de i') a derec=a y apenas encuentra


una ePpresin con evaluacin +IL devuelve &ste valor# Si
todas las ePpresiones (uesen *, entonces entrega el
resultado de la 4ltima ePpresin#

or

/ormato, 0or (orm1 (orm25(orm+1

6val4a las ePpresiones de i') a derec=a y apenas encuentre


una ePpresin cuya evaluacin sea di(erente de +IL acaba el
procesamiento y entrega dic=a ePpresin# Si todas las
ePpresiones (uesen +IL, entrega &ste como resultado#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

6.ms,

0not t1 +IL

0not nil1 *

0and 1 2 91 9

0and 1 nil 91 +IL

0or nil 2 91 2

0or t nil1 *

0or 1 nil 91 1

0or nil 0F 9 1 0H? I I11 +IL


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Cperadores lgicos
Cperadores lgicos
Dariables locales
Dariables locales

L6*

/ormato,
0let 00var1 valor11 0var2 valor2150var+ valor+11
cuerpo1

6l primer argumento es una lista de pares variable!


valor# Se crean + variables locales

Se eval4an las ePpresiones del cuerpo

6J$S#

0let 00P 211 0s)rt P11 1#1219;

0let 00L A0blo)ue1 blo)ue2111


0list 0nt= 1 L1 Aes Amas Agrande A)ue 0nt= 0 L111
0BLC>862 6S $AS @"A+<6 >86 BLC>8611

Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Introduccin al Juego del $ic=i
Introduccin al Juego del $ic=i

Se pretende implementar el .uego inteligente


=umano!m2)uina denominado 9 en raya
0$ic=i, *ic *ac *oe1

Para cada .ugada del =umano la m2)uina


deber2 escoger la me.or .ugada seg4n su
conveniencia

Se aplicar2 alg4n algoritmo adecuado para


determinar la .ugada de la m2)uina
"olando A# $agui%a P&re'
Inteligencia Arti(icial 201!1

Plata(orma b2sica de .uego,

Inter(a' de .uego

Inicio de una partida 0estado inicial1

6(ectuar .ugadas 0c.to de operadores1

Deri(icar si un movimiento es v2lido

Deri(icar condicin de parada 0test de parada1

6strategia de la m2)uina

6strategia aleatoria

6strategia Primero el $e.or

6strategia $ini$aP

6strategia $ini$aP con poda al(a!beta


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

-ondiciones de parada

8no de los .ugadores complet una l3nea

+o =ay casilleros para e(ectuar movimientos

8no de los .ugadores blo)uea al otro


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del *ic tac toe
Juego del *ic tac toe

Inter(a' para el .uego, tablero con casilleros


enumerados
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

"epresentacin del tablero, lista (ormada


por s3mbolo tablero seguida de J nros

0 signi(ica posicin vac3a

1 signi(ica )ue =ay un C

10 signi(ica )ue =ay un Q

/uncin crear-tablero crea un nuevo tablero


0de(un crear!tablero 01
0list Otablero 0 0 0 0 0 0 0 0 011

-on 0nt= pos tablero1 se accede a las posiciones de


tablero
I Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Impresin de tablero mediante las (unciones


convertir-a-letras, imprimir-fila e imprimir-
tablero

convertir-a-letras convierte un 0 a un
espacio vac3o, un 1 a un C y un 10 a un Q
0de(un convertir!a!letras 0v1
0cond 00e)ual v 11 RCR1
00e)ual v 101 RQR1
0t R R1
1
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

imprimir-fila llama a convertir-a-letras para


imprimir una (ila del tablero

*oma como par2metros tres nros 00 1 101#


6s llamada luego por imprimir-tablero.
0de(un imprimir!(ila 0P y '1
0(ormat t RST SA U SA U SAR
0convertir!a!letras P1
0convertir!a!letras y1
0converti!a!letras '11
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

imprimir-tablero

Llama a imprimir-fila con par2metros 0nt= i


tablero1 donde i es la posicin en el tablero
0de(un imprimir!tablero 0tablero1
0(ormat t RSVR1
0imprimir!(ila 0nt= 1 tablero1 0nt= 2 tablero1 0nt= 9 tablero11
0(ormat t RST !!!!!!!!!!!R1
0imprimir!(ila 0nt= tablero1 0nt= ; tablero1 0nt= W tablero11
0(ormat t RST !!!!!!!!!!!R1
0imprimir!(ila 0nt= G tablero1 0nt= I tablero1 0nt= J tablero11
0(ormat t RSVR11
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

S3mbolo a usar por cada .ugador

$2)uina usar2 XQY, Zumano XCY


0set( [pc[ 10 [oponente[ 11 1

$ovimientos del .uego


0de(un e(ectuar!movimiento 0.ugador pos tablero1
0set( 0nt= pos tablero1 .ugador1
tablero
1

8sada por ambos .ugadores

Crdena mostrar tablero


Juego del $ic=i
Juego del $ic=i
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

An2lisis de la con(iguracin del tablero


<eterminando las posiciones ganadoras

Zay I maneras de completar una l3nea, a cHu la


llamaremos XtripletaY

Se almacenar2n en variable [tripletas[


0set( [tripletas[ O001 2 91 0 ; W1 0G I J1
01 G1 02 ; I1 09 W J1
01 ; J1 09 ; G11
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

<e(inimos suma!de tripleta )ue suma los


n4meros contenidos en las posiciones del
tablero especi(icadas por una tripleta
0de(un suma!de!tripleta 0tablero tripleta1
0: 0nt= 0car tripleta1 tablero1
0nt= 0cadr tripleta1 tablero1
0nt= 0caddr tripleta1 tablero11
1

*oma par2metros, un tablero y una tripleta

-on 0nt= elemento tripleta1 obtiene cH n4mero


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Para anali'ar en su totalidad el tablero se


deben anali'ar todas las sumas
0de(un calcula!sumas 0tablero1
0mapcar NA0lambda 0tripleta1 0suma!de!tripleta
tablero tripleta11 [tripletas[1
1

<evuelve lista con las oc=o sumas

/c de(inida con lambda es aplicada a las tripletas


contenidas en [tripletas[#
F 0calcula!sumas b1 01 10 0 0 10 1 10 111
#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Son (unciones cuyo argumento es tambi&n


una (uncin, la cual es aplicada a los
elementos de una lista

$AP-A"

/ormato, 0$AP-A" /- LIS*A1

6J$#
F 0de(un cuadrado 0n1 0[ n n11 -8A<"A<C
F 0cuadrado G1 J
F 0cuadrado A01 2 9 ;11 6rror, In [ o( 001 2 9 ;1 01 2 9
;1 arguments s=ould be o( type +8$B6"#
F 0mapcar NAcuadrado A01 2 9 ;11 01 J 1W 2;1
/uncin de (unciones
/uncin de (unciones
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

-ondiciones de parada

8no de los .ugadores complet una l3nea

+o =ay casilleros para e(ectuar movimientos

8no de los .ugadores blo)uea al otro

Predicado para veri(icar si =ay casilleros


vac3os en tablero
0de(un tablero!total!p 0tablero1
0not 0member 0 tablero11
1

#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Predicado )ue veri(ica si =ay un ganador


0de(un ganador!p 0tablero1
0let 00sumas 0calcula!sumas tablero111
0or 0member 0[ 9 [pc[1 sumas1 0member 0[ 9
[oponente[1 sumas111
1

-rea variable sumas asign2ndole lista con oc=o nros

6n su cuerpo veri(ica si en sumas =ay un elemento


de valor 90 o de 9 0uno de los .ugadores complet
una l3nea1#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Deri(ica si movimiento es v2lido


0de(un validar!movimiento 0tablero1
0(ormat t RST*u movimiento, R1
0let 00pos 0read111
0cond 00not 0and 0integerp pos1 0E? 1 pos J1110(ormat t
RST6ntrada invalida#R1 0validar!movimiento tablero11
00not 0'erop 0nt= pos tablero111 0(ormat t RST6se
espacio ya esta ocupado#R1 0validar!movimiento tablero11
0t pos1
1
1
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

-onsiste en resolver un problema


descomponi&ndolo en uno m2s pe)ue%o

-uando llega a ser su(icientemente pe)ue%o


tiene una solucin trivial

Cperacin en )ue una (uncin se invoca a s3


misma =asta cumplir una condicin de
parada

LISP tiene gran (acilidad para programar


recursivamente
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
"ecursin
"ecursin

6J$#
<e(inir un procedimiento recursivo para
determinar el (actorial de um n4mero
0de(un (act 0n1
0cond 00? n 01 11
0t 0[ n 0(act 0! n 11111
1
1
(act
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
"ecursin
"ecursin

6J$#
Al llamar la (uncin,
-L!8S6" 1J F 0(act ;1 120
-L!8S6" 21 F 0(act 101 9W2II00
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
"ecursin
"ecursin

Iniciar un .uego
0de(un iniciar!.uego 0 1
0i( 0y!or!n!p R\Le gustaria comen'ar el .uego] R1
0movimiento!oponente 0crear!tablero11
0movimiento!pc 0crear!tablero111
1

/c sin par2metros

Si usuario acepta, llama a movimiento!oponente con


argto 0crear!tablero1, cc llama a movimiento!pc con
mismo argto
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

$ovimiento del .ugador =umano


0de(un movimiento!oponente 0tablero1
0let[ 00pos 0validar!movimiento tablero11
0nuevo!tablero 0e(ectuar!movimiento [oponente[
pos tablero111
0imprimir!tablero nuevo!tablero1
0cond 00ganador!p nuevo!tablero1 0(ormat t RST8d# gano^R11
00tablero!total!p nuevo!tablero1 0(ormat t
RST6mpate#R11
0t 0movimiento!pc nuevo!tablero11
11
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i
Dariables locales
Dariables locales

L6*[

/ormato, 0let[ 00var1 valor115#0var+ valor+11


cuerpo1

6l primer argumento es una lista de pares variable!


valor# Se crean + variables locales

Se eval4an las ePpresiones del cuerpo

Se di(erencia del L6* en )ue crea las variables


en (orma secuencial
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

Jugadas de la m2)uina
Se obtienen mediante alguna estrategia,

Aleatoria 0nivel b2sico1

Primero el $e.or 0nivel intermedio1

8sa (uncin de evaluacin

$ini$aP 0nivel ePperto1

8sa (uncin de evaluacin

Aplicar algoritmo

Sin poda al(a!beta

-on poda al(a!beta


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

$ovimiento del .ugador computadora


0de(un movimiento!pc 0tablero1
0let[ 00me.or!movimiento 0escoger!estrategia!pc tablero11
0pos 0(irst me.or!movimiento11
0estrategia 0second me.or!movimiento11
0nuevo!tablero 0e(ectuar!movimiento [pc[ pos tablero111
0(ormat t RST$i movimiento, SSR pos1
0(ormat t RST$i estrategia, SASVR estrategia1
0imprimir!tablero nuevo!tablero1
0cond 00ganador!p nuevo!tablero1 0(ormat t RST_o gano^R11
00tablero!total!p nuevo!tablero10(ormat t RSTJuego
empatado#R11
0t 0movimiento!oponente nuevo!tablero1111
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Implementando la primera estrategia

Inicialmente estrategia aleatoria


0de(un escoger!estrategia!pc 0tablero1
0estrategia!aleatoria tablero1
1

6strategia aleatoria
0de(un estrategia!aleatoria 0tablero1
0list 0seleccion!aleatoria!casillero!vacio tablero1
Rmovimiento aleatorioR1
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

6strategia aleatoria escoge al a'ar un


movimiento v2lido para la m2)uina
0de(un seleccion!aleatoria!casillero!vacio 0tablero1
0let 00pos 0: 1 0random J1111
0i( 0'erop 0nt= pos tablero11 pos 0seleccin!
aleatoria!casillero!vacio tablero11
11

Asigna a pos un entero entre 0 y n!1

Si posicin asociada a ese nro es cero, devuelve


el movimiento` cc se llama recursivamente para
intentar otro n4mero

Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

$odi(icando el procedimiento )ue


selecciona la estrategia de la computadora

Inicialmente estrategia aleatoria


0de(un escoger!estrategia!pc 0tablero1
0estrategia!aleatoria tablero11

6strategia Primero el $e.or


0de(un escoger!estrategia!pc 0tablero1
0estrategia!primero!el!me.or tablero1
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Primero el $e.or para las .ugadas de la


computadora

Implementada con (uncin seleccion!primero!el!


me.or

6s llamada en estrategia!primero!el!me.or la
cual a su ve' llama a escoger!estrategia!pc
0de(un estrategia!primero!el!me.or 0tablero1
0list 0seleccion!primero!el!me.or tablero [pc[1
Rmovimiento primero el me.or#R1
1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

@eneracin de movimientos plausibles


0de(un gen!mov 0tablero .ugador1
0mapcan
NA0lambda 0m1
0i( 0? 0 0nt= m tablero11
0list 0e(ectuar!movimiento .ugador m tablero11
nil11
A01 2 9 ; W G I J1111

8sada por ambos .ugadores

<evuelve una lista de movimientos )ue podr3a


reali'ar Jugador en Posicin 0posiciones sucesoras
de pos1
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

/uncin de evaluacin propuesta


f(p) = abiertasX - abiertasO
abiertasQ?+a (ilas, cols y diags aun libres para $AQ 0)ue
contienen Q y )ue $AQ pueda completar1
abiertasC?+a (ilas, cols y diags aun libres para $I+
Si p es una posicin ganadora para $AQ entonces,
(0p1 ?
Si p es una posicin ganadora para $I+ entonces,
(0p1 ? !
Juego del $ic=i
Juego del $ic=i

/uncin de evaluacin
0de(un (uncion!eval 0tablero1
0cond 00ganador!pc tablero1 10001
00ganador!oponente tablero1 !10001
0t 0lineas!abiertas tablero11
1
1

"etorna 1000 si es una victoria de [P-[` !1000 si es


victoria de CPC+6+*6

Si no corresponde a una posicin ganadora para


alguno de los .ugadores, llama a lineas!abiertas
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

/uncin lineas!abiertas
0de(un lineas!abiertas 0pos1
0let 00sumas 0calcula!sumas pos11
0abiertasQ 01
0abiertasC 011
0dolist 0s sumas1
0cond 00e)ual 0 s1 0set( abiertasQ 0: abiertasQ 111
0set( abiertasC 0: abiertasC 1111
00e)ual 1 s1 0set( abiertasC 0: abiertasC 1111
00e)ual 2 s1 0set( abiertasC 0: abiertasC 1111
00e)ual 10 s1 0set( abiertasQ 0: abiertasQ 1111
00e)ual 20 s10set( abiertasQ 0: abiertasQ 111111
0set( res 0! abiertasQ abiertasC111
1
"olando A# $agui%a P&re'
Juego del *ic tac toe
Juego del *ic tac toe
Inteligencia Arti(icial 201!1
Iteraciones
Iteraciones

<CLIS*

/ormato, 0dolist 0var lista1


cuerpo1

"eali'a tantas iteraciones como elementos tenga la


lista#

6n cH iteracin a var se le asigna como valor el


elemento cuya posicin se corresponde con dic=a
iteracin

6J$#

0dolist 0P 70a b c 11 0print P11 A


B
-
+IL
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

Para las posiciones )ue no corresponden a


la victoria de uno de los .ugadores,

6n el -C+< veri(ica los valores de cada


elemento de S8$AS

S8$AS contiene una lista con los valores de la


suma de los elementos de las I tripletas

Si es 0, suma 1 a abiertasQ y a abiertasC

Si es 1, suma 1 a abiertasC

Si es 2, suma 1 a abiertasC

Si es 10, suma 1 a abiertasQ

Si es 20, suma 1 a abiertasQ

Cbtiene 0abiertasQ abiertasC1


#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Predicado )ue veri(ica si ganador es P-


0de(un ganador!pc 0tablero1
0let 00sumas 0calcula!sumas tablero111
0member 0[ 9 [pc[1 sumas1
1
1

"ecibe como par2metro un tablero

-rea variable sumas asign2ndole lista con oc=o nros

6n su cuerpo veri(ica si en sumas =ay un elemento de


valor 90 0si .ugador [pc[ complet una l3nea1#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Predicado )ue veri(ica si ganador es


oponente
0de(un ganador!pc 0tablero1
0let 00sumas 0calcula!sumas tablero111
0member 0[ 9 [oponente[1 sumas1
1
1

"ecibe como par2metro un tablero

-rea variable sumas asign2ndole lista con oc=o nros

6n su cuerpo veri(ica si en sumas =ay un elemento de


valor 9 0si .ugador [oponente[ complet una l3nea1#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

Cbtencin de lista de sucesores con


respectivo valor de evaluacin
0de(un sucesores!con!evaluacion 0tablero sucesores1
0mapcar NA0lambda 0n1 0list n 0(uncion!eval n111
sucesores1
1

"ecibe como par2metros un tablero y una lista


sucesores la cual va a contener tableros v2lidos

/c de(inida con lambda es aplicada a listas


contenidas en sucesores#
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

6strategia Primero el $e.or


0de(un seleccion!primero!el!me.or 0tablero .ugador1
0let[ 00sucesores 0gen!mov tablero .ugador11
0sucesores!peso 0sucesores!con!evaluacion
tablero sucesores111
0sort sucesores!peso NA0lambda 0P y1
0F? 0second P1 0second y1111
0do 00i 1 0: i 1111
00H? 0nt= i tablero1 0nt= i 0caar sucesores!
peso111 i1111
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Juego del $ic=i
Juego del $ic=i

<C

/ormato, 0do 00var1 valor1 bactuali'acion1c1


0var2 valor2 bactuali'acion 2c15##
0var+ valor+ bactuali'acion+c11
0Econdicion!paradaF accion1
accion2 5accion+1
cuerpo1

Igual )ue L6* permite crear + variables locales

A cH variable se le asigna su valor inicial y,


opcionalmente, su respectiva actuali'acin

Se eval4a la condicin de parada y lo ) devuelve si


es *# -- se eval4an las ePpresiones del cuerpo
Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'
Iteraciones
Iteraciones
"e(erencias
"e(erencias

Apuntes de clases de Inteligencia Arti(icial


de ciclos anteriores# "olando $agui%a#

$anual de LISP# Jos& A# Alonso Jim&ne'#


Inteligencia Arti(icial 201!1 "olando A# $agui%a P&re'

También podría gustarte