<?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>Adztec Independent - Blog &#187; macros</title>
	<atom:link href="http://www.adztec-independent.de/tag/macros/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adztec-independent.de</link>
	<description>Programming Ruby / JRuby / Rails / Common Lisp by Christopher Bertels</description>
	<lastBuildDate>Mon, 13 Sep 2010 22:58:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lisp Screencast 01: Macros</title>
		<link>http://www.adztec-independent.de/2009/01/lisp-screencast-01-macros/</link>
		<comments>http://www.adztec-independent.de/2009/01/lisp-screencast-01-macros/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 03:04:25 +0000</pubDate>
		<dc:creator>Christopher</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Lisp Screencast]]></category>
		<category><![CDATA[common lisp]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[macros]]></category>
		<category><![CDATA[meta-programming]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[screencast]]></category>

		<guid isPermaLink="false">http://www.adztec-independent.de/?p=115</guid>
		<description><![CDATA[I&#8217;ll post some stuff and pictures of the congress soon, but I wanted to make another post first.
I&#8217;ve been programming Lisp for a little while now and always have been looking for some video tutorials (or screencasts) about Common Lisp or Lisp  programming in general but haven&#8217;t found so many.
Also doing some Ruby stuff, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll post some stuff and pictures of the congress soon, but I wanted to make another post first.</p>
<p>I&#8217;ve been programming Lisp for a little while now and always have been looking for some video tutorials (or screencasts) about Common Lisp or Lisp  programming in general but haven&#8217;t found so many.<br />
Also doing some Ruby stuff, I always enjoyed the huge amount of videos online and thought that there should be more Lisp related screencasts as well.</p>
<p>So, I thought about starting my own. And here it is <img src='http://www.adztec-independent.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>You can download the Quicktime file here: <a href="http://www.adztec-independent.de/wp-content/screencast/Lisp%20Screencast%20-%2001%20-%20Macros.mov">Lisp Screencast #01: Macros</a></p>
<p>Or also watch it on my <a href="http://bakkdoor.blip.tv/" target="_blank">Blip.tv channel</a>:</p>
<p><object width="500" height="500" data="http://blip.tv/play/gq855LcRktwZ" type="application/x-shockwave-flash"><param name="src" value="http://blip.tv/play/gq855LcRktwZ" /><param name="allowfullscreen" value="true" /></object></p>
<p>Any comments? Feel free to send me a mail or post a comment here.</p>
<p>I&#8217;ll try to make this a regular thing for the future. Any topic suggestions are also welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adztec-independent.de/2009/01/lisp-screencast-01-macros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.adztec-independent.de/wp-content/screencast/Lisp%20Screencast%20-%2001%20-%20Macros.mov" length="56134847" type="video/quicktime" />
		</item>
		<item>
		<title>Lisp macros revisited</title>
		<link>http://www.adztec-independent.de/2008/12/lisp-macros-revisited/</link>
		<comments>http://www.adztec-independent.de/2008/12/lisp-macros-revisited/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 10:56:14 +0000</pubDate>
		<dc:creator>Christopher</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[common lisp]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[macros]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[special operator]]></category>
		<category><![CDATA[tagbody]]></category>

		<guid isPermaLink="false">http://www.adztec-independent.de/?p=90</guid>
		<description><![CDATA[Since my first posts on my own little control macros (while, foreach etc.) I&#8217;ve learned quite a bit and so here are my revised versions of some of them, since not all of them would work outside of an interpreter, since they were recursive macros.
A better, and also non recursive way to write macros is [...]]]></description>
			<content:encoded><![CDATA[<p>Since my first posts on my own little control macros (while, foreach etc.) I&#8217;ve learned quite a bit and so here are my revised versions of some of them, since not all of them would work outside of an interpreter, since they were recursive macros.<br />
A better, and also non recursive way to write macros is to either use exisiting macros (as done with my for macro) or for example by using the tagbody &#038; go constructs of lisp (similar to a goto in C):</p>
<p><strong>new while macro</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p90code4'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p904"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p90code4"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; while macro with tagbody &amp; go.</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> while-new <span style="color: #66cc66;">&#40;</span>condition <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>tag-<span style="color: #b1b100;">name</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">gensym</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    `<span style="color: #66cc66;">&#40;</span>tagbody
      <span style="color: #66cc66;">,</span>tag-<span style="color: #b1b100;">name</span>
      <span style="color: #66cc66;">,</span>@body
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">when</span> <span style="color: #66cc66;">,</span>condition
	<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">go</span> <span style="color: #66cc66;">,</span>tag-<span style="color: #b1b100;">name</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p><em>Thanks again to the anonymous commenter &#8216;foo&#8217;, who made it clear, that the previous version (without gensymed-symbols) could make trouble in the case of a caller having symbols defined with the same name (in this case tag-name).</p>
<p>I also changed the foreach-macro to use gensymed symbols:</em></p>
<p><strong>new foreach macro</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p90code5'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p905"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code" id="p90code5"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; foreach macro with tagbody &amp; go.</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> foreach-new <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>var <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>tmp-<span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">gensym</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>start-tag <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">gensym</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span>* <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">,</span>tmp-<span style="color: #b1b100;">list</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">,</span>var <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>rest <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">,</span>tmp-<span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       <span style="color: #66cc66;">&#40;</span>tagbody
	  <span style="color: #66cc66;">,</span>start-tag
	  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null</span> <span style="color: #66cc66;">,</span>tmp-<span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span>
	      <span style="color: #b1b100;">nil</span>
	      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span>
		<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setf</span> <span style="color: #66cc66;">,</span>var <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">,</span>tmp-<span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setf</span> rest <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">,</span>tmp-<span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">,</span>var
		  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span> <span style="color: #66cc66;">,</span>@body
			 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setf</span> <span style="color: #66cc66;">,</span>tmp-<span style="color: #b1b100;">list</span> rest<span style="color: #66cc66;">&#41;</span>
			 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">go</span> <span style="color: #66cc66;">,</span>start-tag<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
		  <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p><strong>new until macro</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p90code6'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p906"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p90code6"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; until macro reusing new while macro.</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> until-new <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span>while-new <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">cond</span><span style="color: #66cc66;">&#41;</span>
     <span style="color: #66cc66;">,</span>@body<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>Also, thanks to &#8216;foo&#8217;, who pointed this out in some comments.<br />
I&#8217;ve known about this fact for little while already, but haven&#8217;t thought about posting it here. Since some people might be reading this and wondering, why they don&#8217;t seem to work, they now should have some working samples. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.adztec-independent.de/2008/12/lisp-macros-revisited/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lisp macros part 2</title>
		<link>http://www.adztec-independent.de/2008/11/lisp-macros-part-2/</link>
		<comments>http://www.adztec-independent.de/2008/11/lisp-macros-part-2/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 15:56:36 +0000</pubDate>
		<dc:creator>Christopher</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[common lisp]]></category>
		<category><![CDATA[macros]]></category>
		<category><![CDATA[meta-programming]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.adztec-independent.de/?p=36</guid>
		<description><![CDATA[I&#8217;ve been playing a little more with macros and came up with a foreach-loop, similar to those used in Java or C#.
It basically does the same as the predefined dolist-macro, but oh well  
foreach macro

?View Code LISP1
2
3
4
5
6
7
8
9
10
;; foreach-loop, similar to those in Java or C#
;; example: (foreach (x '(1 2 3))
;;       [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing a little more with macros and came up with a foreach-loop, similar to those used in Java or C#.</p>
<p>It basically does the same as the predefined dolist-macro, but oh well <img src='http://www.adztec-independent.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>foreach macro</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p36code9'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p369"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p36code9"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; foreach-loop, similar to those in Java or C#</span>
<span style="color: #808080; font-style: italic;">;; example: (foreach (x '(1 2 3))</span>
<span style="color: #808080; font-style: italic;">;;                               (print x))</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> foreach <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>var <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">,</span>var <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>rest <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">,</span>var
	<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span>
	  <span style="color: #66cc66;">,</span>@body
	  <span style="color: #66cc66;">&#40;</span>foreach <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">,</span>var rest<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">,</span>@body<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>I&#8217;ve also come up with my own file-handling macro, similar to the predefined with-open-file:</p>
<p><strong>with-file macro</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p36code10'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p3610"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p36code10"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; can be used like with-open-file macro</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> with-file <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>filestream-var filename <span style="color: #66cc66;">&amp;</span>optional <span style="color: #66cc66;">&amp;</span>key <span style="color: #66cc66;">&#40;</span>if-exists <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>direction <span style="color: #66cc66;">:</span><span style="color: #555;">input</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">,</span>filestream-var <span style="color: #66cc66;">&#40;</span>open <span style="color: #66cc66;">,</span>filename <span style="color: #66cc66;">:</span><span style="color: #555;">direction</span> <span style="color: #66cc66;">,</span>direction <span style="color: #66cc66;">:</span><span style="color: #555;">if-exists</span> <span style="color: #66cc66;">,</span>if-exists<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">,</span>@body
    <span style="color: #66cc66;">&#40;</span>close <span style="color: #66cc66;">,</span>filestream-var<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>At first macros seemed to be something complicated, but once I&#8217;ve started reimplementing some of the standard macros and also making up my own custom ones, it really got much clearer to me how they work and why they are so important. Especially the with-file macro gives you an idea of whats possible with macros. Abstracting away the pattern of opening a file, doing something and then closing it again is just really nice, since you won&#8217;t ever forget to close it again, if you stick with using the macro.</p>
<p>I&#8217;ll try to come up with some more soon. <img src='http://www.adztec-independent.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Next big thing on my agenda is some file in- and output as well as CLOS, the powerful Common Lisps Object System.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adztec-independent.de/2008/11/lisp-macros-part-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Creating standard control structures in common lisp</title>
		<link>http://www.adztec-independent.de/2008/11/creating-standard-control-structures-in-common-lisp/</link>
		<comments>http://www.adztec-independent.de/2008/11/creating-standard-control-structures-in-common-lisp/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 16:59:14 +0000</pubDate>
		<dc:creator>Christopher</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[common lisp]]></category>
		<category><![CDATA[macros]]></category>
		<category><![CDATA[meta-programming]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.adztec-independent.de/?p=29</guid>
		<description><![CDATA[I&#8217;ve been playing around with (and also learning) common lisp recently and found its macro system very intriguing. So I started to implement some standard imperative control structures that closely resemble those found in most imperative mainstream programming languages like Java or C.
Here&#8217;s what I&#8217;ve done so far:
while macro:

?View Code LISP1
2
3
4
5
6
7
8
;; example:
;; (defparameter x 0)
;; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been playing around with (and also learning) common lisp recently and found its macro system very intriguing. So I started to implement some standard imperative control structures that closely resemble those found in most imperative mainstream programming languages like Java or C.</p>
<p>Here&#8217;s what I&#8217;ve done so far:</p>
<p><strong>while macro:</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p29code14'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p2914"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p29code14"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; example:</span>
<span style="color: #808080; font-style: italic;">;; (defparameter x 0)</span>
<span style="color: #808080; font-style: italic;">;; (while (&lt; x 10) (print x) (incf x)) ;; output numbers 0 - 9.</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> while <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">cond</span> 
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span> <span style="color: #66cc66;">,</span>@body 
	   <span style="color: #66cc66;">&#40;</span>while <span style="color: #66cc66;">,</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">,</span>@body<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p><strong>until macro</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p29code15'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p2915"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p29code15"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; example: (until (= x 10) (print x) (incf x))</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> until <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">cond</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">progn</span> <span style="color: #66cc66;">,</span>@body
	   <span style="color: #66cc66;">&#40;</span>until <span style="color: #66cc66;">,</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">,</span>@body<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p><strong>for macro</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p29code16'); return false;">View Code</a> LISP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table width="100%" ><tr id="p2916"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p29code16"><pre class="lisp" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; example:</span>
<span style="color: #808080; font-style: italic;">;; (for ((i 0) (&lt; i 10) (incf i))</span>
<span style="color: #808080; font-style: italic;">;;      (print i))</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> for <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>var init-<span style="color: #b1b100;">value</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">cond</span> step-block<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">do</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">,</span>var <span style="color: #66cc66;">,</span>init-<span style="color: #b1b100;">value</span> <span style="color: #66cc66;">,</span>step-block<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">cond</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">,</span>@body<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>I started this yesterday and I&#8217;ll try to come up with some more. Lets see what else i can come up with <img src='http://www.adztec-independent.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Not that this is particularly useful or anything since you really don&#8217;t <em>need</em> them, but it&#8217;s still a nice way to learn the language and especially how macros work. I&#8217;ll just keep it as a little exercise to myself in order to get to know common lisp in greater detail. <img src='http://www.adztec-independent.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.adztec-independent.de/2008/11/creating-standard-control-structures-in-common-lisp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

