{ "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": {} } ] }