<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT blog &#187; Scheme</title>
	<atom:link href="http://szj.cz/tag/scheme/feed/" rel="self" type="application/rss+xml" />
	<link>http://szj.cz</link>
	<description>internet, linux, novinky, programování</description>
	<lastBuildDate>Sat, 12 Sep 2015 11:14:32 +0000</lastBuildDate>
	<language>cs-CZ</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>Scheme</title>
		<link>http://szj.cz/scheme/</link>
		<comments>http://szj.cz/scheme/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 20:35:16 +0000</pubDate>
		<dc:creator><![CDATA[fredomgc]]></dc:creator>
				<category><![CDATA[Programování]]></category>
		<category><![CDATA[Scheme]]></category>

		<guid isPermaLink="false">http://szj.cz/?p=654</guid>
		<description><![CDATA[Tento článek představuje základní konstrukty jazyka Scheme. Uvedené informace se skvěle hodí k získání povědomí o některých dostupných procedurách a vybraných rysech jazyka. Quote a quasiquote Quote zabrání vyhodnocení výrazu. Lze zkráceně zapsat jako uvozoku &#8218;. Zápisy &#8218;szj.cz a (quote szj.cz) jsou tedy naprosto totožné. Quasiquote se chová shodně jako quote, můžeme si ale vyžádat [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://szj.cz/wp-content/uploads/2013/04/scheme.png"><img class="alignleft size-full wp-image-666" title="scheme" src="http://szj.cz/wp-content/uploads/2013/04/scheme.png" alt="Scheme" width="128" height="128" /></a></p>
<p>Tento článek představuje základní konstrukty jazyka Scheme. Uvedené informace se skvěle hodí k získání povědomí o některých dostupných procedurách a vybraných rysech jazyka.</p>
<h2>Quote a quasiquote</h2>
<p><strong>Quote</strong> zabrání vyhodnocení výrazu. Lze zkráceně zapsat jako uvozoku <strong>&#8218;</strong>. Zápisy <strong>&#8218;szj.cz</strong> a <strong>(quote szj.cz) </strong>jsou tedy naprosto totožné. <strong>Quasiquote</strong> se chová shodně jako quote, můžeme si ale vyžádat vyhodnocení vybrané části výrazu. Ke zkrácení se používá symbol <strong>`</strong>.</p>
<p>&#8218;szj.cz =&gt; szj.cz</p>
<p>(quote szj.cz) =&gt; szj.cz</p>
<p>`szj.cz =&gt; szj.cz</p>
<p>(quasiquote szj.cz) =&gt; szj.cz</p>
<h2>Unquote a unquote-splicing</h2>
<p>Z předchozího se může zdát, že mezi <strong>quote</strong> a <strong>quasiquote</strong> neexistuje rozdíl. Tak tomu však není. U výrazu uzavřeného v <strong>quasiquote</strong> vynutí <strong>unquote</strong>&nbsp;(zapisovano jako čárka &#8222;<strong>,</strong>&#8222;) vyhodnocení následující části.</p>
<p>`(szj.cz (+ 1 1) cz.szj) =&gt; (szj.cz (+ 1 1) cz.szj)</p>
<p>`(szj.cz ,(+ 1 1) cz.szj) =&gt; (szj.cz 2 cz.szj)</p>
<p><strong>Quasiquote</strong> tedy označuje úsek, jenž se nikdy nezmění. Naopak tomu <strong>unquote </strong>symbolizuje přesný opak.</p>
<p>Dále lze využít <strong>unquote-splicing </strong>(symbol <strong>,@</strong>) chovající se jako <strong>unquote</strong>,<strong> </strong>ale s výraznou změnou &#8211; výsledný seznam ztratí své vnější závorky.</p>
<p>`(,@`(1 2 3)) =&gt; (1 2 3)</p>
<p>Všechny dosud uvedené konstrukty obsahující ve svém názvu <em>quote </em> lze vzájemně vnořovat a kombinovat.</p>
<p>`(szj.cz `cz.szj 10) =&gt; (szj.cz `cz.szj 10)</p>
<p>`(szj.cz ,`cz.szj 10) =&gt; (szj.cz cz.szj 10)</p>
<p>Povšimněte si, že v následujícím zápisu nedojde k sečtení čísel 1 a 1.</p>
<p>`(szj.cz `(,(+ 1 1) cz.szj) 10) =&gt; (szj.cz `(,(+ 1 1) cz.szj) 10)</p>
<p><strong>Unquote </strong>zde nebude fungovat, protože se nachází uvnitř druhého <strong>quasiquote</strong> nikoliv prvního. Po drobné úpravě však dosáhneme kýženého výsledku. Povolíme funkci druhého quasiquote a vše se již chová dle našeho přání.</p>
<p>`(szj.cz ,`(,(+ 1 1) cz.szj) 10) =&gt; (szj.cz (2 cz.szj) 10)</p>
<h2>Seznam</h2>
<p>Každý seznam se skládá ze dvou složek. K té první se přistupuje s pomocí <strong>car</strong>, druhou část vrátí <strong>cdr</strong>.</p>
<p>(car &#8218;(1 . 2)) =&gt; 1</p>
<p>(cdr &#8218;(1 . 2)) =&gt; 2</p>
<p>Pokud je druhá složek seznam, vypouští se tečka a závorky příležící k tomuto seznamu. Oba následující zápisy jsou proto totožné.</p>
<p>&#8218;(((1))) =&gt; (((1)))</p>
<p>&#8218;(((1).()).()) =&gt; (((1)))</p>
<p>O konstrukci páru se stará <strong>cons</strong> (bere v parametrech první a druhou složku).</p>
<p>(cons (cons (cons 1 &#8218;()) &#8218;()) &#8218;()) =&gt; (((1)))</p>
<p>(cons (cons 1 2) (cons 3 4)) =&gt; ((1 . 2) . (3 . 4)) =&gt; ((1 . 2) 3 . 4)</p>
<p><strong>Car</strong> a <strong>cdr</strong> lze vzájemně sdružovat s pomocí předdefinovaných zkratek – např. <strong>cadr</strong> nejprve vykoná <strong>cdr</strong> a poté <strong>car</strong>, postupuje se tedy obráceně.</p>
<p>(cadr (cons (cons 1 2) (cons 3 4))) =&gt; 3</p>
<h2>Build-list</h2>
<p>Jako první parametr je očekávána délka budovaného seznamu, druhý parametr symbolizuje procedura, jenž bude aplikována na každý prvek nově vznikajícího seznamu, přičemž indexování začíná od nuly.</p>
<p>(build-list 5 -) =&gt; (0 -1 -2 -3 -4)</p>
<h2>List-ref</h2>
<p>Ze zadaného seznamu vrátí prvek na dané pozici. Indexování začíná od nuly.</p>
<p>(list-ref &#8218;(a b c d) 1) =&gt; b</p>
<h2>Reverse a length</h2>
<p>Jak již název napovídá, <strong>length</strong> zjišťuje délku seznamu, zatímco <strong>reverse</strong> provádí obrácení pořadí prvků.</p>
<p>(reverse &#8218;(a b c d)) =&gt; (d c b a)</p>
<p>(length &#8218;(a b c d)) =&gt; 4</p>
<h2>Append</h2>
<p>Vytváří nový seznam spojením libovolného množství zadaných seznamů.</p>
<p>(append &#8218;(1 2) &#8218;(3 4) &#8218;(5 6)) =&gt; (1 2 3 4 5 6)</p>
<h2>Map</h2>
<p>Aplikuje danou proceduru na každý prvek seznamu a vrátí výsledný seznam.</p>
<p>(map &#8211; &#8218;(1 2 3 4 5)) =&gt; (-1 -2 -3 -4 -5)</p>
<p>Pokud je zadáno více seznamů, prochází se postupně od začátku.</p>
<p>(map + &#8218;(1 2 3 4 5) &#8218;(1 2 3 4 5)) =&gt; (2 4 6 8 10)</p>
<p>Tento výčet nesymbolizuje to jediné, co jazyk Scheme nabízí. Jeho možnosti jdou totiž mnohem dál. K vyzkoušení uvedených příkladů potřebujete vhodný interpret, například <a href="http://racket-lang.org/">Racket</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://szj.cz/scheme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
