An Elementary Introduction to the Wolfram Language
47Depuración de código
En ocasiones, Wolfram Language puede detectar algún posible error inmediatamente después de que se ingresa algo y, en ese caso, lo señalará marcándolo en rojo.
Click for copyable input
Algo está obviamente mal si se aplica First a la lista vacía {} generada por Cases:
In[1]:=
Click for copyable input
Out[1]=
Si no se han dado valores para a, b y c, Wolfram Language simplemente regresa la entrada sin cambios:
In[2]:=
Click for copyable input
Out[2]=
In[3]:=
Click for copyable input
Out[3]=
Use With para asignar m=4 temporalmente, para probar un fragmento de código:
In[4]:=
Click for copyable input
Out[4]=
Producir algunas gráficas para ver lo que está haciendo el código:
In[5]:=
Click for copyable input
Out[5]=
In[6]:=
Click for copyable input
Out[6]=
Se comprueba esto sistemáticamente hasta m=10:
In[7]:=
Click for copyable input
Out[7]=
A veces no basta con ver el resultado final de un fragmento de código; hay que asomarse también a lo que sucede al interior. Puede insertarse la función Echo en cualquier parte para ver en la pantalla resultados o valores intermedios con el código que está corriendo.
Echo muestra valores, pero no interfiere con el resultado:
In[8]:=
Click for copyable input
1
2
3
Out[8]=
In[9]:=
Click for copyable input
Out[9]=
Echo y Monitor solamente muestran cosas. Si se desea efectivamente capturar los resultados intermedios, puede usarse Sow (sembrar) y Reap (cosechar).
Reap produce el resultado final junto con una lista de todo lo que fue sembrado por Sow:
In[10]:=
Click for copyable input
Out[10]=
Esto siembra valores consecutivos de Length[#], y cosecha los resultados:
In[11]:=
Click for copyable input
Out[11]=
With[{x=value},expr] ejecuta expr dando a x el valor value
Echo[expr] muestra y regresa el valor de expr
Monitor[expr,obj] muestra continuamente obj a lo largo de una ejecución
Sow[expr] siembra el valor de expr para cosecharse posteriormente
Reap[expr] colecciona los valores sembrados mientras se ejecuta expr
47.1Corrija el programa Counts[StringTake[#, 2]&/@WordList[]] para contar las primeras dos letras en cada palabra, cuando se pueda. »
Muestra de salida esperada:
Out[]=
47.2Use Sow y Reap para obtener los valores intermedios de #1 en Fold[10#1+#2&, {1, 2, 3, 4, 5}]»
Salida esperada:
Out[]=
47.3Use Sow y Reap para obtener la lista de los casos donde se use #/2 en Nest[If[EvenQ[#], #/2, 3#+1]&, 1000, 20]»
Salida esperada:
Out[]=
¿Puede surgir algún problema si se trata de ejecutar solamente un fragmento del código?
¿Hay algún error que sea muy frecuente al escribir código en Wolfram Language?
Si no se encuentra lo que está sucediendo mal, ¿vale la pena intentar cosas al azar?
¿Hay en Wolfram Language alguna manera de depurar interactivamente, paso a paso?
¿Cómo saber qué va mal cuando alguna parte de una gráfica aparece en color rosa?
Mediante un Gray code, un ordenamiento de enteros donde solamente un dígito binario cambia en cada paso.
 
Download Notebook Version
en