{"id":2854,"date":"2019-04-27T11:24:59","date_gmt":"2019-04-27T08:24:59","guid":{"rendered":"http:\/\/spektrum.fi\/spektraklet\/?p=2854"},"modified":"2019-04-27T11:24:59","modified_gmt":"2019-04-27T08:24:59","slug":"parentesfragan","status":"publish","type":"post","link":"https:\/\/spektrum.fi\/spektraklet\/parentesfragan\/","title":{"rendered":"Parentesfr\u00e5gan"},"content":{"rendered":"\n<p>L\u00e4saren har h\u00f6gst antagligen en uppfattning om vad parenteser \u00e4r och vad deras roll \u00e4r i en mening. Parenteser (trots namnet) \u00e4r allts\u00e5 inte teser, utan de &#8221;&#8230; f\u00f6rtydligar, kommenterar, f\u00f6rklarar eller inneb\u00e4r ett sidosp\u00e5r fr\u00e5n den \u00f6vriga texten&#8221; (copy paste fr\u00e5n Wikipedia). Med &#8221;parenteser&#8221; menar jag f\u00f6rst\u00e5s rundparenteser och inte hak-, klammer-, vinkel- eller <a href=\"https:\/\/sv.wikipedia.org\/wiki\/Parentes#Piggparenteser_%E2%81%85_%E2%81%86\">piggparenteser<\/a>, fast\u00e4n samma grundprincip g\u00e4ller ocks\u00e5 f\u00f6r dem.<\/p>\n\n\n\n<p>Inom matematikens teoretiska dr\u00f6mv\u00e4rld, till skillnad fr\u00e5n naturliga spr\u00e5k,  anv\u00e4nds parenteser f\u00f6r att &#8221;ange grupper av termer [&#8230;] f\u00f6r ordningen av r\u00e4kneoperationer&#8221; (Wikipedia). Vi kan d\u00e4rmed s\u00e4ga att i matematiken har parenteserna olik semantik, vilket leder oss till en fr\u00e5ga: Vilken roll borde parenteser ha inom programmering?<\/p>\n\n\n\n<p>Programmering \u00e4r till stor del matematik. De f\u00f6rsta programmeringsstrukturerna h\u00e4rstammade fr\u00e5n rena matematiska modeller som f\u00f6rverkligades med hj\u00e4lp av elektronr\u00f6r och senare mikroelektronik. Vi tar tv\u00e5 konkreta exempel f\u00f6r att illustrera hur parenteser vanligtvis anv\u00e4nds inom programmering.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">(defn kvadrat-summa [n]; summerar n f\u00f6rsta kvadraterna<br> (loop [i 0 resultat 0]; s\u00e4tter variablerna 'i' och 'resultat' som 0<br>  (if (&lt;= i n)<br>   (recur (inc i) (+ resultat (* i i)))<br>   resultat<br>)))<br><br>(print (kvadrat-summa 5))<\/pre>\n\n\n\n<p>Ovan \u00e4r Clojure kod som spottar ut summan p\u00e5 de fem f\u00f6rsta kvadrattalen. Clojure tillh\u00f6r LISP familjen av programmeringsspr\u00e5k d\u00e4r parenteser strukturerar programmet. Notera att all kod \u00e4r omringad av parenteser som skapar en hierarki av funktioner och v\u00e4rden. F\u00f6rklarningar och kommentarer placeras inte inom parenteser, utan inleds med semikolon. Koden kan k\u00f6ras <a href=\"https:\/\/repl.it\/languages\/clojure\">h\u00e4r<\/a> f\u00f6r de intresserade. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">!gfortran, gcc version 5.4.0 20160609<br>!Summerar n f\u00f6rsta kvadraterna<br> integer function kvadrat_summa(n) result(summa)<br>     real :: lista(n)<br>     <br>     lista = (\/(i, i=1,n, 1)\/)<br>     lista = lista*lista<br>     summa = sum(lista)<br> end function kvadrat_summa<br><br> program P<br>     print *, kvadrat_summa(5)<br> end program P<br><\/pre>\n\n\n\n<p>Som ett mindre extremt exempel p\u00e5 parenteser inom programmering kan vi betrakta ett bekant spr\u00e5k f\u00f6r fysiker, Fortran! Du kan k\u00f6ra koden <a href=\"https:\/\/rextester.com\/l\/fortran_online_compiler\">h\u00e4r<\/a>. Se hur parenteser anv\u00e4nds f\u00f6r att:<\/p>\n\n\n\n<ul><li>generera listor,<\/li><li>definiera funktionens resultat samt listans storlek, och<\/li><li>f\u00f6r att gruppera parametrar givna till funktioner. <\/li><\/ul>\n\n\n\n<p>Vi ser att parenteser behandlas liknande som inom matematiken, men varf\u00f6r s\u00e5? Borde inte kod str\u00e4va efter att vara s\u00e5 naturligt l\u00e4sbart som m\u00f6jligt?<\/p>\n\n\n\n<p>Svaret p\u00e5 f\u00f6rsta fr\u00e5gan \u00e4r simpel; programmeringsspr\u00e5k skapas av datan\u00f6rdar och inte lingvister. Men f\u00f6r att exemplifiera att naturliga parenteser \u00e4r m\u00f6jliga (och kanske \u00e4ven vettiga) inom programmering skrev jag nedan ett exempel p\u00e5 ett p\u00e5hittat Python-liknande spr\u00e5k. Parenteserna fungerar som kommentarer eller till\u00e4gger extra detaljer.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">(heltals) funktion kvadrat_summan p\u00e5 n (ett heltal):<br>  (summerar n f\u00f6rsta kvadraterna)<br>  i = 0<br>  resultat = 0<br>  medan i &lt;= n:<br>    resultat += i * i<br>    i += 1<br>  resultat<br><br>visa kvadrat_summan p\u00e5 5<\/pre>\n\n\n\n<p>Mycket snyggare och klarare kod, inte sant? Bara om n\u00e5n skulle hitta p\u00e5 ett liknande spr\u00e5k som ocks\u00e5 \u00e4r k\u00f6rbart&#8230;<\/p>\n\n\n\n<p style=\"text-align:right\"><em>Forts\u00e4ttning f\u00f6ljer!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L\u00e4saren har h\u00f6gst antagligen en uppfattning om vad parenteser \u00e4r och vad deras roll \u00e4r i en mening. Parenteser (trots namnet) \u00e4r allts\u00e5 inte teser, utan de &#8221;&#8230; f\u00f6rtydligar, kommenterar, f\u00f6rklarar eller inneb\u00e4r ett sidosp\u00e5r fr\u00e5n den \u00f6vriga texten&#8221; (copy paste fr\u00e5n Wikipedia). Med &#8221;parenteser&#8221; menar jag f\u00f6rst\u00e5s rundparenteser och inte hak-, klammer-, vinkel- eller &hellip; <a href=\"https:\/\/spektrum.fi\/spektraklet\/parentesfragan\/\" class=\"more-link\">Forts\u00e4tt l\u00e4sa <span class=\"screen-reader-text\">Parentesfr\u00e5gan<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[142,42],"tags":[53,145,126],"_links":{"self":[{"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/posts\/2854"}],"collection":[{"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/comments?post=2854"}],"version-history":[{"count":23,"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/posts\/2854\/revisions"}],"predecessor-version":[{"id":4009,"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/posts\/2854\/revisions\/4009"}],"wp:attachment":[{"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/media?parent=2854"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/categories?post=2854"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spektrum.fi\/spektraklet\/wp-json\/wp\/v2\/tags?post=2854"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}