Domingo 17 de Noviembre de 2024, 13:32
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
Python
(Moderador:
arielb
) »
Duda algoritmo recursivo mutuo para modificar lista anidada
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Duda algoritmo recursivo mutuo para modificar lista anidada (Leído 2039 veces)
anttorval
Nuevo Miembro
Mensajes: 1
Duda algoritmo recursivo mutuo para modificar lista anidada
«
en:
Lunes 17 de Junio de 2013, 23:18 »
0
Hola a ver si alguien puede ayudarme a solucionar el siguiente problema:
Dado un termino f(x,g(h(x),y),z) , aplicar la siguiente sustitucion: sustituir la variable "x" por la constante "A". Con lo cual el resultado deberia ser : f(A,g(h(A),y),z).
Para ello, la forma en la que escribo un termino en python es mediante una lista, quedando expresado el termino anterior de la siguiente forma: termino=[["funtor1"],"x",[["funtor2"],[["funtor3"],"x"],"y"],"z"] y la sustitucion a aplicar así: o=[["x","A"]].
Mi algoritmo recursivo es el siguiente:
Código: Python
Variables
=
[
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
,
"g"
,
"h"
,
"i"
,
"j"
,
"k"
,
"l"
,
"m"
,
"o"
,
"p"
,
"q"
,
"r"
,
"s"
,
"t"
,
"u"
,
"v"
,
"w"
,
"x"
,
"y"
,
"z"
]
Constantes
=
[
"A"
,
"B"
,
"C"
,
"D"
,
"E"
,
"F"
,
"G"
,
"H"
,
"I"
,
"J"
,
"K"
,
"L"
,
"M"
,
"O"
,
"P"
,
"Q"
,
"R"
,
"S"
,
"T"
,
"U"
,
"V"
,
"W"
,
"X"
,
"Y"
,
"Z"
]
def
aplicarSustitucionTermino
(
Termino
,
o
)
:
if
Termino
==
o
[
0
]
[
0
]
:
Termino
=
o
[
0
]
[
1
]
return
Termino
if
Termino
in
Constantes:
Termino
=
Termino
return
Termino
if
Termino
in
Variables
and
Termino
!=
o
[
0
]
[
0
]
:
Termino
=
Termino
return
Termino
if
isinstance
(
Termino
,
list
)
:
for
elemento
in
range
(
1
,
len
(
Termino
)
)
:
if
len
(
Termino
[
elemento
]
)
>
1
:
aplicarSustitucionLista
(
Termino
[
elemento
]
[
1
:
]
,
o
)
if
len
(
Termino
[
elemento
]
)
==
1
:
Termino
[
elemento
]
=
aplicarSustitucionTermino
(
Termino
[
elemento
]
,
o
)
return
Termino
def
aplicarSustitucionLista
(
Termino
,
o
)
:
for
elemento
in
range
(
len
(
Termino
)
)
:
if
len
(
Termino
[
elemento
]
)
>
1
:
aplicarSustitucionLista
(
Termino
[
elemento
]
[
1
:
]
,
o
)
if
len
(
Termino
[
elemento
]
)
==
1
:
Termino
[
elemento
]
=
aplicarSustitucionTermino
(
Termino
[
elemento
]
,
o
)
El problema es que al hacer la llamada print(aplicarSustitucionTermino(termino,o)) , creo que realiza la traza correctamente pero a la hora de modificar la lista anidada solo realiza las modificaciones correctamente si ésta se encuentra en el primer nivel de anidamiento, como es el caso de la primera "x", si se encuentra en un nivel de anidamiento mayor como es el caso de la segunda "x" no realiza la sustitucion.
Tweet
$francisco
Miembro activo
Mensajes: 49
Nacionalidad:
Re:Duda algoritmo recursivo mutuo para modificar lista anidada
«
Respuesta #1 en:
Lunes 24 de Junio de 2013, 03:18 »
0
Si te soy sincero no entiendo casi nada el algoritmo, pero he visto varias cosas que no entiendo porque están en el código. empiezo a contarte lo que veo raro.
Primero si es posible poner como llamas a la primera función? que parametros le pasas?
y otra cosas es el porque pones esto:
Código:
[Seleccionar]
Termino = Termino
logicamente siempre va a ser igual.
y otra cosa es si tienes en cuenta que cuando lleva a return no sigue la función, bueno esto ultimo supongo que lo sabras, explicame un poco mas a ver si te puedo ayudar.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
Python
(Moderador:
arielb
) »
Duda algoritmo recursivo mutuo para modificar lista anidada