-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
1
Puzzle
s,JuegosMatemático
syProgramació
nFuncio
nal
BlasRuiz
Dpto.deLenguajesyCiencia
sdela
Computació
n.Universid
addeMálaga.
ww
w.lcc.u
ma.e
s\∼
bla
s
Lamatem
áticarecreativa
(MatR
ec)(recreation
almathem
a-tics)
esuna
disciplinaque
incluyejuegos
matem
áticos :
lógicos,puzzles,
acertijos,problem
asde
ingenio,...
ElJou
rnal
ofRecreation
alMathem
aticses
lapublicación
más
seriasobre
estadisciplina.
( http://www.ashbacher.com
/jrecmath.stm
)
Tradicionalm
entelaM
atR
echa
sidoutilizada
paramotivar:
Xla
lógica,aritm
ética,geom
etŕıa...elem
entales.Hoy
añadimos
alalista
anterior:laenseñanza
dela
programación.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
2
Objetiv
os
1.Motivar
losprincipios
delaProgram
aciónFuncional(P
rogFun)
v́ıaejem
ploslúdicos
extráıdosde
laM
atR
ec.
2.Ilustrar
lascaracteŕısticas
esencialesde
unlenguaje
funcionalmoderno
comoHaskell:
•tipifi
caciónfuerte
•defi
nicionescon
patrones•estructuras
dedatos
...•¡program
aselegantes!
3.Justifi
carlas
construccionesesenciales
delaProgFun:
•com
posición
defunciones
•listas
por
comprensión
...
Prin
cipio
Elección
deproblem
asintroductorios
(puzzles)que
sean
•elem
entales•no
triviales•resolubles
usandolo
esencialde
laProgFun
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
3
Matem
áticoscon
aportaciones
importantes
enM
atR
ec:
Martin
Gardner
(1914-).Autor
de100
libros;célebre
por
sucolum
naMathem
aticalGam
esen
Scie
ntifi
cAmerica
n.
Inspiración
¡ajá!(1978)
(Lab
or,1981)
Douglas
Hofstadter
(1945-).Sulibro
más
conocidoes
Gödel,
Escher,
Bach:
anEtern
alGolden
Braid
(1979).Sucesor
deMartin
Gardner
enla
columna
Mathem
aticalGam
es.
JohnConw
ay(1937-).T
ieneap
ortacionesim
portantes
enteoŕıa
degrup
os,teoŕıa
denúm
eros,com
binatorial
gametheory,
codingtheory.
Inventordel
Juegode
laVida
yotros
célebrespuzzles,
algunosaún
noresueltos.
OnNumbers
andGam
es,WinningWays
foryou
rMathem
aticalPlays.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
4
Charles
Dodgson
(1832-1898)(Lew
isCarroll).P
rofesorde
ma-
temáticas
dela
Universidad
deOxford
cercade
50años;
es-cribió
dosobras
maestras:
Alicia
enel
páısde
lasmaravi-
llas(1864),
yA
travésdel
espejo(1871).
Sym
bolicLogic
I(1896),
...(http://w
ww.guiascostarica.com
)
Raym
ondSmullyan
(1919-).Lógico
norteamericano.
Apasio-
nadopor
losproblem
asde
ajedrez.Doctorado
deAlonzo
Chur-
chen
Princeton
(1959)(sistem
asform
ales,teoŕıa
dela
recur-sión,
...)Entre
suslibros
célebres:
¿Cóm
ose
llamaeste
libro?Elen
igmade
Drácu
layotros
pasatiempos
lógicos ,Ed.
Cátedra
(1988).W
hatis
thenam
eof
this
book?(1978)
The
Lady
orthe
Tiger?
Alice
inpu
zzle-land(A
liciaen
elPáıs
dela
Adivin
anzas)
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
5
MatR
ec Puzzles
Lógicos {
Puzzle
sconDiálogos
......
Puzzles
conDiálogos
Dedu
cirinform
ación(repartida
porun
árbitroavarios
oradores)apartir
deundiálogo
cuyas
frasescon
tienen
pis-tas
sobre:(1)
datosdel
problema,
(2)iden
tidadde
losora-
dores,(3)
inform
aciónsecreta
dealgu
nos
oradores,...
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
6
Puzzle
sconsombreros
Atribuido
aSebelik
(1983),generalizado
por
JConw
ay,HFreu-
denthal,M
Gardner,
...
En
ciertahab
itaciónse
encuentran
Seb
elik,Paco
yBlas
enfila
india.E
notra
contigu
ahay
cinco
sombreros
(2negros
y3blan
cos).Seap
agala
luz;u
nárbitro
toma
tressom
breros
dela
mesa
ylos
coloca
enlas
cabezas
delas
person
aspara
desp
ués
encen
der
laluz.
Paco
Blas
Seb
elik
Acon
tinuación
seescu
chael
siguien
tediálogo:
Seb
elik.—
Yonosé
elcolor
demisom
brero.
Paco.—
Enese
caso,yo
tampoco.
¿Dequécolor
esel
sombrero
deBlas?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
7
Puzzle
sconnúmerosenla
frente
(J.Conway)
Johnelige
dosnúm
erosp,b∈
[1..9]yun
terceroy∈
[2..18]escrib
epen
lafrente
dePaco
yben
lade
Blas
escribeen
unapizarra
yjunto
ala
sumap+b
10=
5+?
5?
9=
5+?
Manuel
desdeotra
habitaciónescucha
elsiguiente
diálogo:
Blas
.—Nosé
elnúmero
demifren
te.Paco
.—Yotam
poco.
Blas
.—Pues
sigoigu
al.Paco
.—Y
yo.
Blas
.—¡C
asilo
sé!Paco
.—Y
yo.Blas
.—Meestoy
pon
iendonerv
iosillo.Paco
.—Yotam
bién
estoydelos
nerv
ios.Blas
.—¡A
já,ya
séel
mı́o!
¿Tiene
sentidoel
diálogo?¿S
abeManuel
losnúm
eros?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
8
ElProblema
P-S(H
Freudenthal)
Hans
eligedos
naturalesdistintos
mayores
que1,
entregaelpro-
ductoaPROD
yla
sumaaSUM
,que
mantienen
elsiguiente
diálogo:SUM
.—Nose
cómovas
aad
ivinar
misuma.
PROD.—
Enton
ces,nosé
tusuma
SUM
.—Pues
yoya
setu
producto.
¿Cuáles
eranlos
números
elegidospor
Hans?
XEnel
problemaoriginal
(1969)la
segundafrase
es:PROD.—
¡Ajá!,
enton
cesya
sétu
suma
Información
P-S
EnLaF
rente
SigP
revSom
brerosglobal
x,y
>1
p,b∈
[1..9]p,b∈
[1..9]2N
,3B
x6=y
x,y∈
[2..18]pública
Φpizarra
(x,y
)Φ
Φprivada
s,pfrente
(x,y
)frente
(x,y
)(p,b),
b
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
9
Enla
isladelosCaballe
rosylosṔıca
ros
Enesta
islahabitan
caballeros(sinceros)
yṕıcaros
(mentirosos).
Ocasionalm
entepuede
visitarla
islalos
esṕıas(a
vecesmienten
yotras
no).
26Meencuentro
conA,B
yC.Pregunto
aA:¿E
resCaballero
oṔıcaro?
Larespuesta
deA
esininteligible,
ypregunto
aB:
¿Qué
hadicho
A?
B.—
Adice
quees
Ṕıcaro.
C.—
Nocreas
aB,que
estámintiendo.
¿Qué
dijoA?¿Q
uéson
AyB?
40Meencuentro
condos
habitantesque
discuten:
A.—
Noeres
unCaballero.
B.—
Tuśıque
nolo
eres.
Dem
uestraque
unode
elloses
esṕıa,yuno
deellos
sincero.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
10
Enla
isladelosCaballe
rosylosṔıca
ros(co
nt)
27Pregunto
aA:¿cuantos
caballeroshay
entrevosotros?
Lares-
puestade
Aes
ininteligible,ypregunto
aB:¿Q
uéha
dicho?
B.—
Adice
quehay
exactamente
uncaballero
entrenosotros.
C.—
Bestá
mintiendo.
¿Qué
dijoA?¿Q
uiénesson
A,B,C?Veo
doshabitantes
descan-sando
bajoun
árbol.
Lepregunto
auno
deellos:
¿Esalguno
devosotros
uncaballero?
Con
larespuesta
pudesab
ersu
per-
sonalidad. ¿Qué
eran?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
11
LosCofre
sdePorcia
Porcia
decideelegir
esposo,
noatendiendo
asu
belleza
obon-
dad,sino
asu
agudezamental
ointeligencia.
Porcia
tienevarios
cofres(de
oro,de
plata,...algunos
fabrica-dos
por
Bellini,
...).Elpretendiente
debedescubrir
elcofre
consu
retratode
acuerdocon
eldiálogo
dadoen
lasinscrip
ciones.
67aoro
elretrato
estáen
estecofre
plata
elretrato
no
estáaqú
ı
plomo
elretrato
no
estáen
elcofre
deoro
69boro
elretrato
no
estáaqú
ı
plataexactam
ente
unode
estoscofres
lohizo
Bellin
i
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
12
¿ViveelcondeDrácula?
EnTransilvania
hayvam
pirosyhum
anos,ycada
unode
ellospuede
estarcuerdo
oloco.
Los
humanos
sonsinceros
ylos
vampiros
embusteros.
Por
locontrario,
loscuerdos
creenque
sonciertas
lasprop
osicionescier-
tas,yfalsas
lasfalsas.
Sin
embargo,
loslocos
creenque
laspro-
posiciones
falsasson
ciertasylas
ciertas,falsas.
(un
humano
locose
comporta
aparentem
ente
comoun
embustero,p
eroalcontrario
queéste,m
ientesin
maldad).
167Untransilvano
dice:O
soyhum
anooestoy
cuerdo.¿E
sun
vampiro?
170Lepreguntam
osaT:¿E
resun
vampiro
Loco?
¿Qué
respon-
diósiyo
adivinélo
queera?
172Otro
dice:Estoy
Loco.
¿Esun
vampiro?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
13
176RSentabla
unaconversación
condos
transilvanos:
RS,dirigiéndose
aA.—
¿EsBhum
ano?
A.—
Eso
creo.
RS,dirigiéndose
aB.—
¿Aes
humano?
¿Qué
respondió
B?
178RS,dirigiéndose
aA:¿C
reesque
eresform
al?¿Q
uépuedo
determinar
dependiendo
dela
respuesta?
¿Esposible
deducirsiDrácula
viveapartir
defrases
como:
179Sisoy
humano
entoncesDrácula
viveaún.
180Siestoy
cuerdoentonces
Drácula
vive.
182Sisoy
formal
entoncesDrácula
vive.
190¿Q
uépreguntarem
osaun
transilvanopara
que,indep
endien-tem
entede
sucom
portam
inetoysu
respuesta,podam
ossab
ersiDrácula
vive?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
14
Clasifi
cació
ndePuzzle
s
1.Con
frasesdep
endientesyoradores
infinitam
ente
inteligentespero
sinceros(cada
frasedep
endede
laanterior):
a)Som
breros(J
Conw
ay,H
Freudenthal)
b)
Núm
erosen
lafrente
(JConw
ay,M
Gardner)
Problem
a:modelar
elcom
portam
ientointeligente
2.Con
frasesindep
endientes,pero
posiblem
entefalsas:
a)Problem
asde
Alicia:
Enla
isla,Elbosque
delOlvido,
...
b)
Lacolección
deSmullyan:
Drácula,
Cofres
dePorcia,
...
Problem
a:modelar
lainterpretación
delas
frases
3.Mezcla
delos
anteriores.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
15
LaProgram
aciónFuncional
esuna
herramienta:
•sencilla
•sufi
ciente•atractiva
Tareasarealiza
r
1.–Estu
dio
del
Prob
lema
2.–Modelad
odela
Solu
cionen
Haskell
3.–Con
jeturas
sobre
lasolu
cion4.
–Pruebas
deéstas
5.–Varian
tesdel
Prob
lema
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
16
Programació
nFuncio
nal
programar
A=com
binarfunciones
XA=
estásobrecargado
IMoses
Schönfi
nkel(Soc.
Mat.
deGöttingen,
1920),Uber
dieBau
steineder
mathem
atischenlogik
(1924),Onthe
buildin
gblocks
ofmathem
aticallogic
representarfórm
ulasatravés
decom
binadores
Sxyz=xz(yz)
Kxy=x
(Kon
stanzfu
nktion
)
introducela
notaciónparcializada
(curryin
g)I
LaLógica
Com
binatoriade
Haskell
Curry
(1930)I
Cálculo
confunciones
anónimas
(BRussel?):
2x̂+yÃ
x̂.2x
+yÃ
∧x.2x
+yÃ
λx.2x
+y
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
17
IAlonzo
Church,
Aset
ofpostu
latesfor
thefou
ndation
sof
logic(1932)
IntroduceelCalcu
liof
lambda
conversion
oλ–cálculo:
xy
—variab
lesλx.E
—ab
stracciones
ofuncion
esan
ónim
aseh
—ap
licaciones
⊕paréntesis
yconvenios
paraagilizar
lanotación:
λx.λy.x
λxy.x
(λxy.x)(λ
z.(λm.m
)(λm.m
))(λxy.y)
⊕la
aplicaciónavarios
argumentos
esim
pĺıcita:fabc
⊕defi
nicionesoecuaciones
parasim
plificar
expresiones:
Kxy=x
I=λx.x
Fxy=y
K(λz.I
I)F
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
18
⊕(beta)
conversiónun
pasode
evaluación :(redex)
(λx.C
)EÃ
[x:=
E]C
EÃ
E′
λx.EÃ
λx.E′
EÃ
E′
EMÃ
E′M
...
Ejem
plo:
K(λz.I
I)FÃ
K(λz.I
)FK(λz.I
I)FÃ
(λz.I
I)
⊕evaluación
encero
omás
pasos
EÃÃ
E
EÃÃ
E′E′ÃÃ
E′′
EÃÃ
E′′
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
19
⊕cóm
puto:uno
ovarios
pasos.
K(λz.I
I)FÃÃ
λz.I
K(λz.I
I)FÃÃ
K(λz.I
)F⊕
finde
cómputo:
noquedan
redexes(form
anorm
al)⊕
intérprete:estrategia
dereducción
Teorem
asde
Church-R
osser:
1.ÃÃ
esconfl
uente
SieÃÃ
e′∧eÃÃ
e′′entonces,
∃f|e′ÃÃ
f∧e′′ÃÃ
f
2.LaFN
esúnica.
3.Elcóm
putofinal
esindep
endientedel
evaluador.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
20
Enelλ
Cpodem
osmodelar
lalógica,
losnúm
eros,las
listas...
Usarem
osdefi
nicionesecuacionales
True=λxy.x
False
=λxy.y
Cond=λxyz.x
yz
&=λxy.xyF
not
=λx.xFT
CondTrueefÃÃ
e
Sea
=la
igualdadsintáctica
(queabsorb
eala
=defi
nicional):
NotT=(λx.xFT)TÃ
TFTÃ
F
d0e=λfx.x
dne=λfx.f
n+1(x
)
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
21
[]=λxyz.y
(:)=λabf.fab
head=λx.xT
tail
=λx.xF
[A] =
(:)A[]Ã
λf.fA[]
Pero
laigualdad
=es
sustitutiva
head[A
] =(λx.xT)[A
]Ã
[A]T
=(:)A
[]TÃÃ
TA[]Ã
A
tail[A
] =(λx.xF)[A
]Ã
[A]F
=(:)A
[]FÃÃ
FA[]Ã
[]
Luego
head[A
]ÃÃA
tail[A
]ÃÃ[]
Laprogram
aciónfuncional
consisteen
diseñarcom
binadores
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
22
⊕Funciones
Recursivas
SiY
=λf.(λ
x.f(xx))(λx.f(xx)),
entoncesYfÃÃ
f(Y
f),
e.d.:Sidefi
nimos
unaigualdad
®que
incluyaa=∪ÃÃ
entoncesla
ecuaciónM®
fM
tienesolución.
⊕λ–defi
nibilidad:base
dela
programación
funcionalUna
funciónϕ
:N
p→
Nse
diceλ–defi
niblesi
existeun
término
Ftal
que
dϕ(n
1 ,...,np )eÃÃ
Fdn
1 e...dn
p e
Teorem
ade
Kleene:
fes
recursivasii
esλ–defi
nible.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
23
¿Qué
lenguajesfuncionales
sonbuenos?
Lalista
eslarga:
APL
FP
simbólicos
Lambda-Cálculo
LisP
Scheme
semi-puros
Hope
Miranda
Orwell
Haskell
algebraicos(tip
osinductivos)
Xcaracteŕıstica
esencial:tipifi
cación(clasifi
cación)X
otrascaracteŕısticas:
orden-su
perioryparcialización
,polim
orfism
ogen
eralyrestrin
gido,evalu
aciónnoestricta,...
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
24
Ellenguaje
Haskell(C
urry
)
Unaagradable
introdu
cciónaHaskell...
Ennuestras
páginashay
información
adicional:www.lcc.um
a.es\∼pepeg
www.lcc.um
a.es\razonandoC
onHaskell
•Surge
(los80)
paraestandarizar
laspropuestas
académicas.
•Esun
Lambda-Cálculo
enriquecido:
x,y
—variab
lesλx→
E,
λxy→
F—
funcion
esan
ónim
aseh
—ap
licaciones
1,−8,+
,...True,F
alse,
—aritm
ética,lógica
[1,2],′a′:”ju
an”,
( ′a′,3.23),
length
—funcion
esbásicas
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
25
•Declaraciones
previasde
unaam
pliacolección
tipos:
data
Bool
=True|F
alsedata
Integer
=...|−
1|0|1|2|...
—enteros
noacotad
osdata
Int
=−2147483648
|...|2147483647—
[minBou
nd..m
axBou
nd]
data
[a]=
[]|a:[a]
—listas
•Organización
enmódulos
(import,h
idding)Prelude
List
•Patrones
endefi
niciones,orden
superior:
map
::(a→
b)→
[a]→
[b]
—polim
orfismo+
OS
map
f[]
=[]
map
f(x
:xs)
=fx
:map
fxs
—recu
rsión
aMay
úscu
las::
[Char
]→
[Char
]
aMay
úscu
las=
map
Char
.toUpper
—parcialización
,cualificación
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
26
•Operadores
simbólicos,
precedenciayasociatividad:
infixl1
==>
—im
plicación
lógica
False
==>
=True
—patrón
anón
imo
True
==>q
=q
•Ecuación
conguardas,
promoción
numérica:
facn|n
==
0=
1|n
>0
=n∗fac
(n−
1)
Main
>fac
100—
Elsistem
ainfiere
eltip
odefac
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
::Integer
Main
>len
gth$show
$fac
100—
infixr0$;
f$a
=fa
158::Int
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
27
Prelu
de>map
(/3)[1..3]
—prom
ociónnu
mérica
[0.333333333333333,0.666666666666667,1.0]::Dou
blePrelu
de>filter
(6=′s′)“com
esfiletes“
—llam
adaparcial
“comefilete
“::Strin
g
¿Con
cuántosceros
termina
elfactorial
de100?
Main
>ceros
100where
ceros=
length
.takeWhile
(==′0′).reverse
.show.fac
24::Int
—ceros
esunafunción
local
•Tipos
algebraicos(inductivos,
dots)
data
Natu
ral=
O|S
ucNatu
ral—
inductivo
masD
os=
Suc.S
uc
—masD
os::Natu
ral→
Natu
ral
data
Pila
a=
Pa(P
ilaa)
—recu
rsivo,noinductivo
p=
p—
p::Pila
aq
=P
1q
—q
::Pila
Int
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
28
•Evaluación
noestricta
Prelu
de>take
10unos
where
unos
=1:unos
[1,1,1,1,1,1,1,1,1,1]::Integer
•Clases
deTipos:
class
Eqawhere
(==),(/
=)::a→
a→
Bool
—miem
bros
por
defecto
x==y=not(x
6=y)
x6=y
=not(x
==y)
insta
nce
EqNatu
ralwhere
O==O
=True
Sucx==Sucy=x==y
•Unintérprete/com
piladorlibre
muy
cuidado
www.haskell.org
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
29
Puzzle
sconsombreros
Atribuido
aSebelik
(1983),generalizado
por
JConw
ay,HFreu-
denthal,M
Gardner,
...
En
ciertahab
itaciónse
encuentran
Seb
elik,Paco
yBlas
enfila
india.E
notra
contigu
ahay
cinco
sombreros
(2negros
y3blan
cos).Seap
agala
luz;u
nárbitro
toma
tressom
breros
dela
mesa
ylos
coloca
enlas
cabezas
delas
person
aspara
desp
ués
encen
der
laluz.
Paco
Blas
Seb
elik
Acon
tinuación
seescu
chael
siguien
tediálogo:
Seb
elik.—
Yonosé
elcolor
demisom
brero.
Paco.—
Enese
caso,yo
tampoco.
¿Dequécolor
esel
sombrero
deBlas?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
30
Som
brerosydiálogo
enHaskell
Larepresentación
decolores
essim
ple:
data
Color
=B|N
deriv
ing(E
q,Show
)
Som
breros>B
==N
False
Som
breros>B6=N
True
Necesitam
osun
predicadointeligente
paracada
frase:
typeFrase
a=
a→
Bool
—POLIM
ORFISMO
sebelik::Frase
(Color
,Color
)paco
::Frase
Color
blas::
[Color
]—
lalista
deposib
lessom
breros
sebelikactúa
sobrepares
decolores
(lossom
brerosque
ve).
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
31
Algunas
funcionessencillas
usando“L
istaspor
Com
prensión”:
cubo
::[a]→
[(a,a,a
)]—
Polim
orfismo
cubo
xs=
[(x,y,z
)|x←
xs,y←
xs,z←
xs]—
unalista
por
compren
sióncap
tura
“conjuntos
por
compren
sión”:
—R3={(x
,y,z)|x
∈R,y∈
R,z∈
R}
elegibles::
[(Color
,Color
,Color
)]
elegibles=
[t|t←
cubo
[B,N
]︸
︷︷︸
generador
,t6=
(N,N
,N)
︸︷︷
︸guarda
]
—hay
suficientes
blan
cos
Som
breros>cubo
[B,N
][(B
,B,B
),(B,B
,N),(B
,N,B
),(B,N
,N),
(N,B
,B),(N
,B,N
),(N,N
,B),(N
,N,N
)]Som
breros>elegibles
[(B,B
,B),(B
,B,N
),(B,N
,B),(B
,N,N
),(N
,B,B
),(N,B
,N),(N
,N,B
)]
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
32
¿Cóm
oes
deinteligente
Sebelik?
sebelik::Frase
(Color
,Color
)
sebelik(p,b
)=masD
eUno
[s|(s,p
′,b′)←
elegibles
︸︷︷
︸gen
erador
,(p′,b′)==
(p,b)︸
︷︷︸
guarda
]
Som
breros>sebelik
(B,N
)—
¿Seb
elikpued
ever
unoBlan
coyotro
Negro?
True
—Śı
Som
breros>sebelik
(N,N
)False
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
33
¿Yel
comportam
ientointeligente
dePaco?
pacob
=masD
eUno[p|p←
[B,N
],sebelik(p,b
)]
—im
aginouncolor
ppara
misom
brero
—yrazon
ocom
oSeb
elik
Som
breros>paco
B—
¿Paco
puedever
unsom
brero
Blan
co?True
—Śı
Som
breros>paco
NFalse
Lalista
blascalcula
losposibles
coloresdel
sombrero
deBlas:
blas=
[b|b←
[B,N
],paco
b]
Som
breros>blas
[B]::
[Color
]—
estoes
unadem
ostración
Veam
osahora
lafunción
masD
eUno:
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
34
masD
eUno
::Eqa
=>
[a]→
Bool
—polim
orfismorestrin
gido
masD
eUno
=varios
.quitaR
ep
—el
punto
‘.’rep
resentala
composición
defuncion
es(f.g
)x
=f(g
x)
quitaR
ep::Eqa
=>
[a]→
[a]
quitaR
ep(x
:xs)
=x
:quitaR
ep[y|y←
xs,y6=
x]
quitaR
ep[]
=[]
—recu
rsión
data
[a]=
[]|a:[a]
Som
breros>quitaR
ep[3,1,2,1,3,1,4]
[3,1,2,4]Som
breros>quitaR
ep′′esta
frasees
muylarga
′′
“estafrm
uylg′′
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
35
varios::
[a]→
Bool
—polim
orfismo
varios(
::)=
True
—el
śımbolo
esel
patrón
anón
imo
varios=
False
—Otra
alternativa
v́ıala
función
length
variosxs
=len
gthxs≥
2
length
::[a]→
Integer
—polim
orfismoirrestrin
gido
length
(:xs)
=1+
length
xslen
gth[]
=0
—Otra
formadirecta
¿más
elegante?varios
=(≥
2).len
gth
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
36
Mas
puzzlescon
sombreros
Martin
Gardner
(enInspiración
¡Ajá!)
considerados
variantes(H
Freudenthal
yJConw
ay)
...npersonas
colocadasen
fila
india.
Enla
mesa
hayn−1
sombreros
negrosynblancos
...un
árbitroelige
nsom
bre-ros
...Sucesivam
ente,de
atráshacia
adelante,todas
(salvola
última)
dicenlo
mism
o:¡N
osé
elcolorde
misom
brero!.¿D
equé
colores
elsom
brerode
laprim
erapersona
dela
fila?
¿Qué
ocurresilas
npersonas
puedenmoverse
libremente,
deform
aque
cadauna
velas
cabezas
delas
restantes?
Dem
ostradque
algunade
ellasafi
rmará
enalgún
mom
entoque
conoceel
colorde
susom
brero.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
37
Generaliza
ción(4
perso
nas,
5...)
Generalizam
osel
programaanterior
EJERCIC
IOX
Loanterior
proporciona
unrazonam
iento¡ajá!
Sea
lafila
india:(P
1habla
el1
o)
P1 P
2 P3...P
n
Dela
primera
fraseconcluim
os:
enlas
cabezas
deP2 P
3...P
nexiste
unsom
breroblanco
(2)
Utilizando
loanterior
esfácil
probarque
elsom
brerode
Pnes
blancoEJERCIC
IO
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
38
Enla
isladelosCaballe
rosylosṔıca
ros
Enesta
islahabitan
caballeros(sinceros)
yṕıcaros
(mentirosos).
Ocasionalm
entepuede
visitarla
islalos
esṕıas(a
vecesmienten
yotras
no).
26Meencuentro
conA,B
yC.Pregunto
aA:¿E
resCaballero
oṔıcaro?
Larespuesta
deA
esininteligible,
ypregunto
aB:
¿Qué
hadicho
A?
B.—
Adice
quees
Ṕıcaro.
C.—
Nocreas
aB,que
estámintiendo.
¿Qué
dijoA?¿Q
uéson
AyB?
40Meencuentro
condos
habitantesque
discuten:
A.—
Noeres
unCaballero.
B.—
Tuśıque
nolo
eres.
Dem
uestraque
unode
elloses
esṕıa,yuno
deellos
sincero.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
39
DiálogosHaskellenla
Isla
XLaejecución
delos
diálogos-Haskell¡son
demostraciones!
XRay
resuelvelos
mism
osproblem
asen
almenos
media
pági-na.d
ata
Habitan
te=
Pı́caro
|Caballero
|Espı́aderiv
ing(E
q,Show
)typePar
=(H
abitante,H
abitante)
typeTrı́o
=(H
abitante,H
abitante,H
abitante)
—la
siguiente
función
prop
orcionaunainterp
retacióndecad
afrase
valorSi::Frase
a→
Habitan
te→
Frase
a
—notación
infija
ypatron
es
f‘valorS
i‘Caballero
=f
f‘valorS
i‘Pı́caro
=not.f
{not
True
=False
;not
False
=True}
f‘valorS
i‘Espı́a
=con
stTrue{con
stkx
=k}
—noten
drem
osen
cuenta
loqu
edicen
losesṕ
ıas
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
40
—Prob
lema26
—¿E
resCab
allerooṔıcaro?
Laresp
uesta
deA
esininteligib
le,—
ypregu
ntoaB:¿Q
uéhadich
oA?
—B.—
Adice
quees
Ṕıcaro.
—C.—
Nocreas
aB,qu
eestá
mintien
do.
sol26::Habitan
te→
[Trı́o]
sol26res
=[t|t@
(a,b,c
)←
cubo
[Pı́caro
,Caballero
],valorS
ifat,
—llam
adaprefija
valorSigbt,
valorSihct]
—interp
retamos
cadafrase
segúnla
person
alidad
where
f,g,h
::Frase
Trı́o
f(a,b,c
)=
a==
res—
A.—
soyres.
g(a,b,c
)=
f(a,b,c
)==
(a==
Pı́caro
)—
B.—
Adice
quees
Ṕıcaro.
h=
not.g
—C.—
Bestá
mintien
do.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
41
IslaCaballeros
>sol26
Pı́caro
[]—
Anopudodecir
queera
Ṕıcaro
IslaCaballeros
>sol26
Caballero
[(Pı́caro
,Pı́caro
,Caballero
),(Caballero
,Pı́caro
,Caballero
)]—
Adijo
queera
Cab
allero,B
esunṔıcaro
yC
unCab
allero.—
Esim
posib
lesab
erlo
quees
Apero
śılo
quedijo.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
42
—Prob
lema27
—Pregu
ntoaA:¿C
uántos
caballeros
hay
entrevosotros?
—Laresp
uesta
esininteligib
le,ypregu
ntoaB:¿Q
uéhadich
o?—
B.—
Adice
quehay
exactamente
uncab
alleroentre
nosotros.
—C.—
Nohagas
casoaB
queestá
mintien
do.
sol27res
=[t|t@
(a,b,c
)←
cubo
[Pı́caro
,Caballero
],(f
‘valorSi‘a
)t,
(g‘valorS
i‘b)t,
(h‘valorS
i‘c)t]
where
f,g,h
::Frase
Trı́o
f(a,b,c
)=
res==
length
[x|x←
[a,b,c
],x==
Caballero
]—
A.—
somos
rescab
allerosg(a,b,c
)=
f(a,b,c
)==
(1==
length
[x|x←
[a,b,c
],x==
Caballero
])—
B.—
Adice
queexactam
ente—
unodenosotros
esuncab
alleroh
=not.g
—C.—
Nohagas
casoaB
queestá
mintien
do.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
43
IslaCaballeros
>sol27
1[]
—Laresp
uesta
nopudoser
1.IslaC
aballeros>
sol270
[(Pı́caro
,Pı́caro
,Caballero
)]IslaC
aballeros>
sol272
[(Pı́caro
,Pı́caro
,Caballero
),(Caballero
,Pı́caro
,Caballero
)]IslaC
aballeros>
sol273
[(Pı́caro
,Pı́caro
,Caballero
)]IslaC
aballeros>
sol274
[(Pı́caro
,Pı́caro
,Caballero
)]—
Esim
posib
lededucir
laperson
alidad
deA.
—Sab
emos
que(B
,C)=
=(Ṕ
ıcaro,Cab
allero).
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
44
—Prob
lema36
—¿E
salgu
nodevosotros
uncab
allero?.—
Ameresp
ondió,
ycon
suresp
uesta
pudesab
erla
solución
.
sol36res
=[p|p
@(a,b
)←
[Pı́caro
,Caballero
]‘x‘[P
ı́caro,C
aballero],
(f‘valorS
i‘a)p]
where
f::Frase
Par
f(a,b
)=
ifres
==
”SI”then
a==
Caballero
||b==
Caballero
—unodenosotros
esCab
alleroelse
a==
Pı́caro
b==
Pı́caro
—som
osdos
Ṕıcaros
IslaCaballeros
>sol36
”SI”
[(Pı́caro
,Pı́caro
),(Caballero
,Pı́caro
),...—
noqu
edadeterm
inad
ala
person
alidad
deA
IslaCaballeros
>sol36
”NO”
[(Pı́caro
,Caballero
)]—
Adeb
eser
unṔıcaro,
yB
unCab
allero
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
45
—Prob
lema40
—Meheinform
adoyhay
esṕıas
enla
isla.Oigo
laconversación
:—
A.—
Bes
unCab
allero.—
B.—
Anoes
unCab
allero.—
Dem
uestra
queal
menos
unadeellas
estádicien
dola
verdad
.
EJERCIC
IO
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
46
Alicia
enelbosquedelolvido
Alicia
alentrar
enelbosque
olvida,entre
otrascosas,
eld́ıa
delasem
ana.Enelb
osquehay
animales
condos
tipos
decom
porta-
miento:
ElLeón
miente
losLunes,
Martes
yMiércoles,
mientras
queel
Unicornio
miente
losJueves,
Viernes
ySabados.
48Alicia
seencuentra
conel
León:
León.—
Ayer
ment́ı.
León.—
Mentiré
dentrode
tresd́ıas.
¿Qué
d́ıade
lasem
anaes?
48bResolverem
osunpu
zzlemás
general:
A.—
Ayer
ment́ı.
B.—
Mentiré
dentrode
tresd́ıas.
¿Qué
d́ıade
lasem
anaes
¿Qué
sonA
yB
suponiendo
quecada
personaje
conocelapersonalidad
detodos
loshabitantes
delbosque?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
47
48bUnainteresan
temodifi
cación:
A.—
Ayer
ment́ı.
B.—
Mentiré
dentrode
tresd́ıas.
Alicia
esincapaz
dededucir
eld́ıa
dela
semana
¿Qué
com-
portam
ientosteńıan
AyB?
Ahora
intervien
enLeo
yUni(T
weed
ledum
YTweed
ledeeen
elorigin
al),queson
herman
osgem
elos(in
distinguibles)
yse
comportan
comounLeón
yunUnicorn
iorespectiva-
men
te.
51A.—
Yosoy
Leo.
B.—
Yosoy
Uni.
¿Puede
Alicia
adivinarquienes
eran?
57A.—
Siyo
soyLeo
entoncesél
esUni.
B.—
Siél
esUni
entoncesyo
soyLeo.
¿Quienes
eran?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
48
59ElRey
encuentrael
sonajeroque
rompieron
losgem
elosy
Alicia
debeencontrar
asu
propietario.Tras
adentrarseen
elbosque
seencuentra
conlos
gemelos:
Alicia
(dirigiéndoseaA).—
¿Dequién
esel
sonajero?
A.—
Elsonajero
esde
Uni.
Alicia,
trasun
mom
entopensativa,
dirg.B.—
¿Quién
erestú?
B.—
Yosoy
Uni.
Alicia
nosab́ıa
eld́ıa
dela
semana,
pero
recuerdaque
noes
Dom
ingo.¿A
qúıendeb
eentregar
Alicia
elsonajero?
62Alicia
(dirigiéndoseaA).—
¿Estuyo
estesonajero?
A.—
Śı.
Alicia,
trasun
mom
entopensativa,
dirigiéndoseaB.—
¿Es
tuyoeste
sonajero?
B,susurrándole
aloido
deAlicia.
-...
Nose
escuchóla
respuesta,aunque
fue,obien
Śı,obien
No.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
49
Después
deescuchar
larespuesta,
Alicia
sab́ıaquien
erael
propietariodel
sonajero.¿A
qúıendió
elsonajero?
65Elrey
lecontó
aAlicia
quelos
gemelos
pod́ıan
tenerun
her-mano
(Duendi)
idénticoaellos,
aunquees
unduende
(siempre
miente).
Alicia
escuchadurante
und́ıa
laborable:
A.—
Duendi
existe.
B.—
Yoexisto.
¿Existe
realmente
Duendi?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
50
ElbosqueenHaskell
data
Dı́a
=L|M|X|J|V|S|D
deriv
ing(E
q,Show
,Enum)
ayer,m
añan
a::Dı́a→
Dı́a
ayerL
=D
ayerx
=pred
xmañan
aD
=L
mañan
ax
=succ
xpasadoM
añan
a=
mañan
a.m
añan
aden
troDeT
resDı́as
=mañan
a.m
añan
a.m
añan
a
data
Habitan
te=León|U
nicorn
io|L
eo|U
ni|D
uen
dideriv
ing(E
q,Show
)
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
51
valorSi::Frase
a→
(Habitan
te,D
ı́a)→
Frase
a
f‘valorS
i‘(León,d
)=
ifd‘elem
‘[L..X
]thennot.f
elsef
f‘valorS
i‘(Unicorn
io,d
)=
ifd‘elem
‘[J..S
]thennot.f
elsef
f‘valorS
i‘(Leo,d
)=
f‘valorS
i‘(León,d
)f‘valorS
i‘(Uni,d
)=
f‘valorS
i‘(Unicorn
io,d
)f‘valorS
i‘(Duen
di,d)
=not.f
—Duen
disiem
pre
miente
dosOradores
=[(a
,b,d
)|a←
[León,U
nicorn
io],
b←
[León,U
nicorn
io],
d←
[L..D
]]
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
52
sol48=
[cf|cf
@(a,b,d
)←
dosOradores,
(f‘valorS
i‘(a,d
))cf,
(g‘valorS
i‘(b,d
))cf
]
where—
A.-Ayer
ment́ı.
f(León,b,d
)=
(ayerd)‘elem
‘[L,M
,X]
f(U
nicorn
io,b,d
)=
(ayerd)‘elem
‘[J,V
,S]
—B.-Mentiré
dentro
detres
d́ıas.
g(a,L
eón,d
)=
(dentroD
eTresD
ı́asd)‘elem
‘[L,M
,X]
g(a,U
nicorn
io,d
)=
(dentroD
eTresD
ı́asd)‘elem
‘[J,V
,S]
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
53
ElBosqu
eDelO
lvido>
sol48[(L
eón,L
eón,L
),(León,U
nicorn
io,L
),(León,U
nicorn
io,J
),(U
nicorn
io,L
eón,D
),(Unicorn
io,U
nicorn
io,J
)]—
Sidialogan
dos
leones
eld́ıa
esLunes.
—Sidialogan
dos
Unicorn
ios,el
d́ıa
esJu
eves.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
54
—Prob
lema51
leoOuniY
dia=
[(a,b,d
)|(a
,b)←
[Leo,U
ni]‘x
‘[Leo,U
ni],
a6=b,
d←
[L..D
]]
sol51=
[e|e
@(a,b,d
)←
leoOuniY
dia,
(f‘valorS
i‘(a,d
))e,
(g‘valorS
i‘(b,d
))e]
where
f(a,b,d
)=
a==Leo
—A.-Yosoy
Leo.
g(a,b,d
)=
b==Uni
—B.-Yosoy
Uni.
ElBosqu
eDelO
lvido>
sol51[(L
eo,U
ni,D
)]—
Luego
Aes
Leo
yB
esUni,yel
d́ıa
esDom
ingo.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
55
—Prob
lema57
sol57=
[cf|cf
@(a,b,d
)←
leoOuniY
dia,
(f‘valorS
i‘(a,d
))cf,
(g‘valorS
i‘(b,d
))cf
where—
A.-Siyo
soyel
Leo
entonces
éles
Uni.
f(a,b,d
)=
a==Leo
==>
b==Uni
—B.-Siél
esUnienton
cesyo
soyLeo.
g(a,b,d
)=
a==Uni==>
b==Leo
ElBosqu
eDelO
lvido>
sol57[(L
eo,U
ni,D
),(Uni,L
eo,D
)]—
Ambos
enunciad
osson
verdad
eros,deform
aqu
eam
bos
son—
sinceros
yeso
ocurre
enDom
ingo.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
56
—Prob
lema59:
¿Dequ
iénes
elson
ajero?
—Inclu
imos
unnu
evodato
enel
estado:
typePropietario
=Habitan
te
EJERCIC
IO
—Prob
lema62:
¿Estuyo
esteson
ajero?
—A.-Śı.
—Dirigién
dose
aB.-¿E
stuyo
esteson
ajero?
—Nose
escuchóla
respuesta,
pero
Alicia
dedujo
suprop
ietario.
EJERCIC
IO
—Prob
lema65:
¿Existe
Duendi?
Elrey
lecontó
aAlicia
quelos
gemelos
pod́ıan
tenerun
hermano
(Duendi)
idénticoaellos,
aunquees
unduende
(siempre
miente).
Alicia
escuchadurante
und́ıa
laborable:
A.—
Duendi
existe.B.—
Yoexisto.
¿Existe
realmente
Duendi?
EJERCIC
IO
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
57
¿ViveelcondeDrácula?
EnTransilvania
hayvam
pirosyhum
anos,ycada
unode
ellospuede
estarcuerdo
oloco.
Los
humanos
sonsinceros
ylos
vampiros
embusteros.
Por
locontrario,
loscuerdos
creenque
sonciertas
lasprop
osicionescier-
tas,yfalsas
lasfalsas.
Sin
embargo,
loslocos
creenque
laspro-
posiciones
falsasson
ciertasylas
ciertas,falsas.
(un
humano
locose
comporta
aparentem
ente
comoun
embustero,p
eroalcontrario
queéste,m
ientesin
maldad).
167Untransilvano
dice:O
soyhum
anooestoy
cuerdo.¿E
sun
vampiro?
170Lepreguntam
osaT:¿E
resun
vampiro
Loco?
¿Qué
respon-
diósiyo
adivinélo
queera?
172Otro
dice:Estoy
Loco.
¿Esun
vampiro?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
58
176RSentabla
unaconversación
condos
transilvanos:
RS,dirigiéndose
aA.—
¿EsBhum
ano?
A.—
Eso
creo.
RS,dirigiéndose
aB.—
¿Aes
humano?
¿Qué
respondió
B?
178RS,dirigiéndose
aA:¿C
reesque
eresform
al?¿Q
uépuedo
determinar
dependiendo
dela
respuesta?
¿Esposible
deducirsiDrácula
viveapartir
defrases
como:
179Sisoy
humano
entoncesDrácula
viveaún.
180Siestoy
cuerdoentonces
Drácula
vive.
182Sisoy
formal
entoncesDrácula
vive.
190¿Q
uépreguntarem
osaun
transilvanopara
que,indep
endien-tem
entede
sucom
portam
inetoysu
respuesta,podam
ossab
ersiDrácula
vive?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
59
Transilv
anos,
Drácula
yHaskell
data
HV
=Human
o|V
ampiro
deriv
ing(E
q,Show
)data
Com
portamien
to=
Cuerdo
|Loco
deriv
ing(E
q,Show
)
typeTran
silvano
=(H
V,C
omportam
iento)
trans::[Tran
silvano]
trans
=[Human
o,V
ampiro
]‘x‘[C
uerdo
,Loco
]
valorSi,
interpreta
::Frase
a→
Tran
silvano→
Frase
a
f‘valorS
i‘(Human
o,C
uerdo
)=
ff‘valorS
i‘(Human
o,L
oco)
=not.f
f‘valorS
i‘(Vam
piro,C
uerdo
)=
not.f
f‘valorS
i‘(Vam
piro,L
oco)
=f
interpreta
=valorS
i
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
60
cuerdo
,loco,vam
piro,hu
man
o::Frase
Tran
silvano
cuerdo
(,c
)=
c==Cuerdo
loco(,c
)=
c==Loco
vampiro
(t,)
=t==Vam
pirohu
man
o(t,
)=
t==Human
o
sol167=
[h|h
@(t,c
)←
trans,
—Soy
human
ooestoy
cuerd
o(hu
man
o‘o‘cu
erdo‘valorS
i‘h)h]
o::Frase
a→
Frase
a→
Frase
af‘o‘g
=λu→
fu||g
u
EnTran
silvania
>sol167
[(Human
o,C
uerdo
)]
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
61
—Prob
lema170
:¿E
resunvam
piro
loco?—
¿Quéresp
ondió
siyo
adivin
ésu
tipo?
infixl1−
:>(−
:>)::Bool→
(a→
Bool)
→a→
Bool
—selección
congu
arda
False−
:>f
=f
True−
:>f
=not.f
sol170::Bool→
[Tran
silvano]
sol170res
=[h|h
@(t,c
)←
trans,
(res−
:>(vam
piro‘y‘loco
)‘valorS
i‘h)h]
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
62
EnTran
silvania
>sol170
True
[(Human
o,L
oco),(V
ampiro
,Cuerdo
),(Vam
piro,L
oco)]
—con
estaresp
uesta
nopod
emos
deducir
quéera
EnTran
silvania
>sol170
False
[(Human
o,C
uerdo
)]—
Por
tanto,contestó:
NO,yera
unhu
man
ocu
erdo
—Prob
lema172
:T.-Estoy
Loco.
¿Quépued
eser?
sol172=
[h|h
@(t,c
)←
trans,
interpreta
locohh]
EnTran
silvania
>sol172
[(Vam
piro,C
uerdo
),(Vam
piro,L
oco)]
—Luego
esunVam
piro
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
63
—Prob
lema176
—RS,dirigién
dose
aA.-¿E
sB
human
o?—
A.-Eso
creo.—
RS,dirigién
dose
aB.-¿A
eshu
man
o?—
¿Quéresp
ondió?
Aceptarem
osun
prin
cipio
fundam
ental:
“creo”nodep
endede
sucordura.
Necesitam
osuna
funciónpara
suinterpretación:
creo::Frase
a→
Tran
silvano→
Frase
acreo
f(H
uman
o,c
)=
fcreo
f(V
ampiro
,c)=
not.f
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
64
sol176res
=[pt|pt@
(a,b
)←
trans‘x‘tran
s,(f
‘creo‘a
)pt,
(res−
:>g‘valorS
i‘b)pt
]
where
f(t,t
′)=
human
ot′
g(t,t
′)=
human
ot
EnTran
silvania
>sol176
False
[]—
talresp
uesta
esunacontrad
icciónEnTran
silvania
>sol176
True
[((Human
o,C
uerdo
),(Human
o,C
uerdo
)),((Human
o,C
uerdo
),...—
Luego
laresp
uesta
fueSI
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
65
Ilustremos
ahorala
diferenciade
interpretaciónde
lasfrases
‘creoX’y‘X’.
—Prob
lema177
—RS,dirigién
dose
aA.-¿E
resform
al?—
¿Quépuedodeterm
inar
dep
endien
dodela
respuesta?
formal
::Frase
Tran
silvano
formal
=(=
=(H
uman
o,C
uerdo
))‘o‘(=
=(V
ampiro
,Loco
))
sol177res
=[a|a←
trans,
(res−
:>form
al‘valorS
i‘a)a]
EnTran
silvania
>sol177
False
[]—
Luego,
todos
lostran
silvanos
contestanSI,yad
emás:
EnTran
silvania
>sol177
True
[(Human
o,C
uerdo
),(Human
o,L
oco),(V
ampiro
,Cuerdo
),(Vam
piro,L
oco)]
—¡las
4posib
ilidad
es!:Nopod
emos
inferir
NADA.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
66
—Prob
lema182
—T.-Sisoy
formal
entonces
Drácu
lavive.
EJERCIC
IO
—Prob
lema190:
—¿Q
uépregu
ntarauntran
silvanopara
saber
siDrácu
lavive?
EJERCIC
IO
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
67
LosCofre
sdePorcia
Los
siguientesproblem
asestán
inspiradosen
Porcia
(personaje
deElmercader
deVen
ecia,de
Shakesp
eare),una
princesaque
decideelegir
esposo,
noatendiendo
asu
belleza
obondad,
sinoasu
agudezamental
ointeligencia.
Porcia
tienevarios
cofres(de
oro,de
plata,...algunos
fabri-cados
por
Bellini,
...).Cada
cofretiene
unainscrip
ción(p.e.,
diciendosu
contenido).Porcia
escondesu
retratoen
uncofre.
El
pretendientedeb
edescubrir
elcofre
quelo
contienede
acuerdocon
eldiálogo
dadoen
lasinscrip
ciones.
67a
oro
elretrato
estáen
estecofre
plata
elretrato
no
estáaqú
ı
plomo
elretrato
no
estáen
elcofre
deoro
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
68
68a–alo
sumouna
inscripción
decada
cofrees
falsa
oro
1el
retratonoestá
aqúı
2el
artistaquehizo
elretrato
esven
eciano
plata
1el
retratonoestá
enel
deoro
2el
artistaquehizo
elretrato
esfloren
tino
plomo
1el
retratonoestá
aqúı
2el
retratoestá
enel
cofrede
plata
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
69
69boro
elretrato
no
estáaqú
ı
plataexactam
ente
unode
estoscofres
lohizo
Bellin
i
70aoro
elretrato
no
estáaqú
ı
plataexactam
ente
unade
estasinscripcio-nes
escierta
Las
inscripciones
enHaskell
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
70
data
Color
=Oro|P
lata|P
lomoderiv
ing(E
q,Show
)data
Pintor
=Ven
eciano|F
lorentin
oderiv
ing(E
q,Show
)
valor::Frase
a→
Bool→
Frase
a
f‘valor
‘True
=f
f‘valor
‘=
not.f
sol67a=
[cont|
cont←
[Oro,P
lata,P
lomo],
—alo
sumounodelas
inscrip
ciones
escierta
(ioro
,iplata
,iplom
o)←
[(False
,False
,False
),(False
,False
,True),
(False
,True,F
alse),(T
rue,F
alse,F
alse)],
(oro‘valor
‘ioro
)con
t,(plata
‘valor‘i
plata)con
t,(plom
o‘valor
‘iplom
o)con
t]where
...
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
71
oro,plata
,plomo
::Frase
Color
oroc
=c==
Oro
—el
retratoestá
eneste
cofreplata
c=
c6=
Plata
—el
retratonoestá
aqúı
plomoc
=c6=
Oro
—el
retratonoestá
enel
cofredeoro
CofresD
ePorcia
>sol67a
[Plata
]—
Elretrato
estáen
elcofre
dePlata.
Ray
Smullyan
expone
unrazonam
ientosim
ple:
Las
inscrip
ciones
del
deoro
yel
deplom
oson
contra-
rias,luego
unodeellas
escierta.
Com
oalo
sumouna
delas
inscrip
ciones
escierta,
ladel
cofredeplata
esfalsa,
ypor
tanto
elretrato
estáen
eldeplata.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
72
sol68a=
[(conten
edor,pin
tor)|
e@(con
tenedor
,pintor
)←
[Oro,P
lata,P
lomo]‘x
‘[Ven
eciano,F
lorentin
o],
(ioro
1,ioro
2)←
[(True,T
rue),(T
rue,F
alse),(F
alse,T
rue)],
—alo
sumounainscrip
ciónes
falsa(oro
1‘valor
‘ioro
1)e,(oro
2‘valor
‘ioro
2)e,
(iplata
1,iplata
2)←
[(True,T
rue),(T
rue,F
alse),(F
alse,T
rue)],
(plata1‘valor
‘iplata
1)e,(plata
2‘valor
‘iplata
2)e,
(iplom
o1,i
plomo2)←
[(True,T
rue),(T
rue,F
alse),(F
alse,T
rue)],
(plomo1‘valor
‘iplom
o1)
e,(plom
o2‘valor
‘iplom
o2)
e]
where{
oro1,oro
2,plata1,plata
2,plomo1,plom
o2
::Frase
(Color
,Pintor
);
oro1(c,a
)=
c6=
Oro
;oro
2(c,a
)=
a==
Ven
eciano;
plata1(c,a
)=
c6=
Oro
;plata
2(c,a
)=
a==
Floren
tino
plomo1(c,a
)=
c6=
Plom
o;plom
o2(c,a
)=
c==
Plata}
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
73
CofresD
ePorcia
>sol68a
[(Plata
,Ven
eciano),(P
lata,F
lorentin
o)]
—Elretrato
estáen
elcofre
dePlata.
—Supintor
noestá
determ
inad
o.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
74
sol69b=
EJERCIC
IO
—¡la
inform
acióninicial
del
prob
lemaes
esencial
typeInscripció
n=
Bool
sol70a=
EJERCIC
IO
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
75
Númerosenla
frente
(J.Conway)
Johnelige
dosnúm
erosp,b∈
[1..9]yun
terceroy∈
[2..18]escrib
epen
lafrente
dePaco
yben
lade
Blas
escribeen
unapizarra
yjunto
ala
sumap+b
Manuel
desdeotra
habitaciónescucha
elsiguiente
diálogo:
5
4
10
9
Blas
.—Nosé
elnúmero
demifren
te.Paco
.—Yotam
poco.
Blas
.—Pues
sigoigu
al.Paco
.—Y
yo.Blas
.—¡Casi
losé!
Paco
.—Y
yo.Blas
.—Meestoy
pon
iendonerv
iosillo.Paco
.—Yotam
bién
estoydelos
nerv
ios.Blas
.—¡A
já,ya
séel
mı́o!
X¿T
ienesentido
eldiálogo?
X¿sobra
laúltim
aafi
rmación?
X¿P
uedeManuel
adivinarlos
números?
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
76
Unaplantilla
Haskell
Este
problemaes
algomás
general.Clasifi
camos
lainform
ación:
información
globalt
9inform
aciónpública
lapizarra
109
información
privadap,b
4,5
Xinform
aciónprivada:
laque
notiene
elotro;
Xsim
etŕıa:Johnreparte
byp,
...,Blas
.—Nosé
tunúmero.
Engeneral
unalgoritm
ointeligente
tieneel
tipo:
veoYcreo
::InfPrivada
→InfPublica
→[In
fPrivada
]—
Nose
tudato:
fmiD
atoinfP
ública
=varios
(veoYcreo
miD
atoinfP
ública
)
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
77
t=
9—
inform
aciónglob
al
data
Pizarra
=PIntInt
—los
números
dela
pizarra
typeFren
te=
Int
—el
número
enla
frente
—unalgoritm
ointeligen
teveoY
creo::Fren
te→
Pizarra
→[Fren
te]
veoYcreo
f(P
xy)=
[f′|f
′←
[x−
f,y−
f],0<
f′,f′≤
t]
EnLaF
rente>
veoYcreo
3(P
41)
[1]EnLaF
rente>
veoYcreo
3(P
46)
[1,3]
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
78
blas,paco
::NdeO
rden→
Fren
te→
Pizarra
→Bool
blas1
ppiz
=varios
(veoYcreo
ppiz
)blas
(n+
1)ppiz
=varios
[b|b←
veoYcreo
ppiz
,paco
nbpiz
]paco
nbpiz
=varios
[p|p←
veoYcreo
bpiz
,blas
nppiz
]
espacio=
[(p,b,Pxy)|p←
[1..t],b←
[1..t],letx
=p+b,y←
[2..2∗t],
y6=
x]
—búsqu
edahacia
atrás
hastaBlas
::NdeO
rden→
[(Fren
te,F
rente,P
izarra)]
hastaBlas
n=
(λ(p,b,piz
)→
blasnppiz
)‘filter
‘espacio
hastaPaco
n=
filter
(λ(p,b,piz
)→
paconbpiz
)espacio
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
79
TamañodelProblema
–Tam
añodel
espacio
debúsqueda:
t·t·
2t−
2'
2t 3
↑↑
↑p
b(x6=)y∈
[2..2t]
X¿cuántos
elementos
filtra
laprim
eraafi
rmación?
lenght(hasta
Blas1)
–Tal
valores
lamitad
delinicial:
t 2(t−
1)Enefecto,
sip,b∈
[1..t],x=p+b,
blas1p(P
xy)
≡1≤y−p≤t
,x6=y
y∈
[p+
1..p+t]
ypuede
tomar
solamente
t−
1valores.
X¿cuántos
elementos
filtra
lasegunda
afirm
ación?
lenght(hasta
Paco
1)
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
80
Unaconjetura
sobre
lasolució
ndelproblema
Laevaluación
delen
ght(h
asta
Blasn)y...
proporciona:
tles
hB1hP1hB2hP2hB3hP3hB4hP4hB5hP5
336
184
496
4812
45
200100
3012
46
360180
5624
124
7588
29498
4624
124
8896
448152
7640
2412
49
1296648
228114
6640
2412
410
1800900
320168
10060
4024
124
...
Conjetura:
encierto
instan
teel
espacio
sered
uce
a4com
binacio-
nes
ydesp
ués
esvaćıo
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
81
–Através
delprogram
apodem
osobtener
talescom
binaciones,
thasta
Paco
t−1
2
3(1,
2,P
34)
(2,2,P
43)
(2,2,P
45)
(3,2,P
54)
5(2,
3,P
56)
(3,3,P
65)
(3,3,P
67)
(4,3,P
76)
7(3,
4,P
78)
(4,4,P
87)
(4,4,P
89)
(5,4,P
98)
9(4,
5,P
910)
(5,5,P
109)
(5,5,P
1011)
(6,5,P
1110)
Conjetura:
Para
tim
par
=2n
+1desp
ués
delan-ésim
aafi
rmación
dePaco
,elúnico
número
posib
lepara
Blas
esb=n+1.
Laúnica
afirm
acióncon
sentid
opor
parte
deBlas
siprosigu
eel
diálogo
es:¡A
já,ya
séminúmero!
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
82
thasta
Blas
t2
4(2,2,P
45)
(3,2,P56)
(2,3,P54)
(3,3,P65)
6(3,3,P
67)
(4,3,P78)
(3,4,P76)
(4,4,P87)
8(4,4,P
89)
(5,4,P910)
(4,5,P98)
(5,5,P10
9)10
(5,5,P10
11)(6,5,P
1112)
(5,6,P11
10)(6,6,P
1211)
Conjetura:
Para
t=
2n,desp
ués
delan-ésim
aafi
rmación
deBlas
,elnúmero
deBlas
noestá
determ
inad
o.Siprosigu
eel
diálogo
elprob
lemanotien
esolu
ción(con
2nfrases).
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
83
Demostra
cióndela
conjetura
–Utilizarem
osla
notaciónhabitual
dela
matem
áticaB
n(p,x
,y)yP
n(b,x
,y)predicados
hastalafrase
n-ésim
aI=
[1..t]⊆
N,
Lem
a0.-1
.1Sien
dop,b∈I;x,y∈
[2..2t];x6=y:
B1 (p,x
,y)≡
x−p,y−p∈I
Bn+1 (p,x
,y)≡B1 (p,x
,y)∧P
n(x−p,x
,y)∧P
n(y−p,x
,y)
Pn(b,x
,y)≡B1 (p,x
,y)∧B
n(x−b,x
,y)∧B
n(y−b,x
,y)
Teorem
a0.-1
.2Sip,b∈I,x,y∈
[2..2t],x6=y,ysiadem
ás
x=p+q∨y=p+q,entonces:
(1)Sit=
2n+
1,P
n(b,x
,y)
⇒b=n+
1∧|x−y|=
1(2)
Sit=
2n,
Bn(p,x
,y)
⇒|x−y|=
1,¬P
n(b,x
,y)
p,b∈{n,n
+1}
Para
t=
9,n=
4(8
frases),Manuel
sabráque
b=
5.
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
84
Varia
ntesdelproblema
Variante
1
Johntom
alos
números
delintervalo
I=
[1..t],yel
diálogoes:
Blas
.—Nocon
ozcoel
número
demifren
te.Paco
.—Yotam
poco.
Blas
.—Pues,
sigosin
saberlo.
Paco
.—Enton
ces,yo
tampoco.
Blas
.—Yalo
sé
¿Puede
Manuel
adivinarel
valorde
t?¿y
losnúm
eros?EJERCIC
IO
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
85
Variante
2
Manuel
conoceel
valorde
t,yel
diálogoes:
Blas
.—Nocon
ozcoel
número
demifren
te.Paco
.—Yotam
poco.
Blas
.—Pues,
sigosin
saberlo.
Paco
.—Enton
ces,yo
tampoco.
Manu
el.—
¡Taraŕı
quete
v́ı!Yasé
elnúmero
deBlas
¿Cual
esel
valorde
t?EJERCIC
IO¿Y
siPaco
yBlas
noconocen
t?¿E
strascendente?
EJERCIC
IO
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
86
ElProblem
aP-S(H
Freudenthal)
Hans
eligedos
números
distintosmayores
que1,
entregael
pro-ducto
aPROD
yla
sumaaSUM
,que
mantienen
elsiguiente
diálogo:SUM
.—Nose
cómovas
aad
ivinar
misuma.
PROD.—
Enton
ces,nosé
tusuma
SUM
.—Pues
yoya
setu
producto.
¿Cuáles
eranlos
números
elegidospor
Hans?
XEnel
problemaoriginal
(1969)la
segundafrase
es:PROD.—
¡Ajá!,
enton
cesya
sétu
suma
información
globalx,y
>1,
x6=y
información
públicaΦ
información
privadas,p
-
Puzzles,
Juego
sMatem
ático
syProgra
mació
nFuncio
nal(C
ON
EJERCIC
IOS).
Marz
o,2005
87
Unprogram
aHaskell
sum
s=and(mapvarios
[Sp|p←
Ps]
)sum
=and.mapvarios
.map
S.P
prop=varios
[s|s←
Sp,
sum
s]pro
=varios
.filter
sum
.S
sum′s=uno[p|p←
Ps,
prop]
sol=
[s|s←
[5..],sum′s]
Ps=
[x∗(s−x)|x←
[2..(s−
1)‘div‘2]]
Sp=...
Xevaluando
tenemos
sol=
[11,(p
=30)
XEnel
problemaoriginal
(1969)la
segundafrase
es:PROD.—
¡Ajá!,
enton
cesya
sétu
suma
EJERCIC
IO