{
"metadata": {
"language": "Julia",
"name": "",
"signature": "sha256:3b4e30eee02ec028b980e7fb90bc82a7b60436ffa3efeb01a9f8e2033736f146"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Funciones con y sin salida"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u00bfCu\u00e1l es la diferencia entre las siguientes dos funciones?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mysin(x) = sin(x)\n",
"mysin2(x) = println(sin(x))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": [
"mysin2 (generic function with 1 method)"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mysin(3)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 2,
"text": [
"0.1411200080598672"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mysin2(3)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0.1411200080598672"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = mysin(3)\n",
"x"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"0.1411200080598672"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"0.1411200080598672"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = mysin2(3)\n",
"x"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"0.1411200080598672"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La segunda versi\u00f3n no es \u00fatil, en el sentido que **no regresa nada**; el valor que se calcul\u00f3 se *desapereci\u00f3*.\n",
"Por lo tanto, casi siempre queremos que las funciones no **impriman** (excepto para depurar el c\u00f3digo), sino que **regresen** valores."
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Reutilizar c\u00f3digo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u00bfC\u00f3mo podemos *reutilizar* c\u00f3digo que ya hemos escrito?\n",
"\n",
"**No** (es decir **nunca**) copiamos y pegamos.\n",
"\n",
"M\u00e1s bien, existe una manera f\u00e1cil y \u00e1gil de \"guardar\" un pedazo de c\u00f3digo para que lo podamos reutilizar despu\u00e9s: ponerlo en una **funci\u00f3n**. Las funciones **existen** para hacer disponible el trabajo que ya hemos hecho para que lo podamos reutilizar despu\u00e9s."
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Estabilidad de tipos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Haz"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"2^(-1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "LoadError",
"evalue": "DomainError\nwhile loading In[8], in expression starting on line 1",
"output_type": "pyerr",
"traceback": [
"DomainError\nwhile loading In[8], in expression starting on line 1",
"",
" in power_by_squaring at intfuncs.jl:60",
" in ^ at intfuncs.jl:84"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u00bfQu\u00e9 pasa? \u00bfPor qu\u00e9?\n",
"\n",
"En Julia, siempre debemos intentar que las funciones regresen siempre el mismo tipo de respuesta."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Evaluaciones de corto circuito"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"function imprime(x)\n",
" println(string(x))\n",
" x\n",
"end"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 26,
"text": [
"imprime (generic function with 1 method)"
]
}
],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"imprime(x==3)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"true\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": [
"true"
]
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"imprime(x==2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"false\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 28,
"text": [
"false"
]
}
],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = 3\n",
"y = 2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"2"
]
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"imprime(x == 3) && imprime(y == 2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"true\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"true\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 30,
"text": [
"true"
]
}
],
"prompt_number": 30
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"imprime(x == 3) && imprime(y == 1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"true\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"false\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 31,
"text": [
"false"
]
}
],
"prompt_number": 31
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"imprime(x == 2) && imprime(y == 1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"false\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 32,
"text": [
"false"
]
}
],
"prompt_number": 32
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"imprime(x == 3) || imprime(y == 1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"true\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": [
"true"
]
}
],
"prompt_number": 34
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u00bfPara qu\u00e9 sirve esto?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = \"1010110110001\"\n",
"function pos_punto(a)\n",
" for i=1:length(a)\n",
"# if a[i] == '.'\n",
"# println(i)\n",
"# end\n",
"# pos = i\n",
" a[i] == '.' && return i\n",
" end\n",
" return 0\n",
"end"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 48,
"text": [
"pos_punto (generic function with 1 method)"
]
}
],
"prompt_number": 48
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pos_punto(a)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 49,
"text": [
"0"
]
}
],
"prompt_number": 49
},
{
"cell_type": "raw",
"metadata": {},
"source": [
"typeof(ans)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"search(a, '.' )"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 39,
"text": [
"6"
]
}
],
"prompt_number": 39
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"search(\"hola\" , '.')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 50,
"text": [
"0"
]
}
],
"prompt_number": 50
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"typeof(\"hola\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 53,
"text": [
"ASCIIString (constructor with 2 methods)"
]
}
],
"prompt_number": 53
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"'.' "
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 52,
"text": [
"'.'"
]
}
],
"prompt_number": 52
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s = \"1010\" "
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 57,
"text": [
"\"1010\""
]
}
],
"prompt_number": 57
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[2]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 58,
"text": [
"'0'"
]
}
],
"prompt_number": 58
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"typeof(s[2])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 60,
"text": [
"Char"
]
}
],
"prompt_number": 60
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"int(ans)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 59,
"text": [
"48"
]
}
],
"prompt_number": 59
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"'hola'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "LoadError",
"evalue": "syntax: invalid character literal\nwhile loading In[61], in expression starting on line 1",
"output_type": "pyerr",
"traceback": [
"syntax: invalid character literal\nwhile loading In[61], in expression starting on line 1",
""
]
}
],
"prompt_number": 61
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"'\u03b1'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 62,
"text": [
"'\u03b1'"
]
}
],
"prompt_number": 62
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"typeof(ans)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 63,
"text": [
"Char"
]
}
],
"prompt_number": 63
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s = "
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "LoadError",
"evalue": "syntax: incomplete: premature end of input\nwhile loading In[64], in expression starting on line 1",
"output_type": "pyerr",
"traceback": [
"syntax: incomplete: premature end of input\nwhile loading In[64], in expression starting on line 1",
""
]
}
],
"prompt_number": 64
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s = \"hol\u03b1\u03b2\" "
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 71,
"text": [
"\"hol\u03b1\u03b2\""
]
}
],
"prompt_number": 71
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"typeof(s)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 66,
"text": [
"UTF8String (constructor with 2 methods)"
]
}
],
"prompt_number": 66
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u00bfC\u00f3mo encontrar los caracteres en la cadena, de manera ingenua?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[1]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 67,
"text": [
"'h'"
]
}
],
"prompt_number": 67
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[2]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 68,
"text": [
"'o'"
]
}
],
"prompt_number": 68
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[3]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 69,
"text": [
"'l'"
]
}
],
"prompt_number": 69
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[4]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 70,
"text": [
"'\u03b1'"
]
}
],
"prompt_number": 70
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[5]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "LoadError",
"evalue": "invalid UTF-8 character index\nwhile loading In[72], in expression starting on line 1",
"output_type": "pyerr",
"traceback": [
"invalid UTF-8 character index\nwhile loading In[72], in expression starting on line 1",
"",
" in next at /usr/local/julia/julia-a05f87b79a/lib/julia/sys.dylib",
" in getindex at string.jl:57"
]
}
],
"prompt_number": 72
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[4]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 73,
"text": [
"'\u03b1'"
]
}
],
"prompt_number": 73
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"length(s)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 74,
"text": [
"5"
]
}
],
"prompt_number": 74
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"s[6]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 75,
"text": [
"'\u03b2'"
]
}
],
"prompt_number": 75
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"search(s, '\u03b1')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 76,
"text": [
"4"
]
}
],
"prompt_number": 76
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"search(s, '\u03b2')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 77,
"text": [
"6"
]
}
],
"prompt_number": 77
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"nextind(s, 4)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 78,
"text": [
"6"
]
}
],
"prompt_number": 78
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"@which search(s, '\u03b2')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"search(s::String,c::Union(AbstractArray{Char,1},Set{Char},Char)) at string.jl:199"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 79,
"text": [
"search(s::String,c::Union(AbstractArray{Char,1},Set{Char},Char)) at string.jl:199"
]
}
],
"prompt_number": 79
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Completar nombres"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"una_variable_con_un_nombre_muy_largo = 3"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": [
"3"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"una_variable_con_un_nombre_muy_largo"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 2,
"text": [
"3"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"una_variable_mas = 4"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"4"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"una_variable_mas"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"4"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"una_wariable = 10"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"10"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"una_wariable"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"10"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}