emacs.d/clones/lisp/www.cliki.net/ORF.html

55 lines
5.9 KiB
HTML
Raw Normal View History

2022-10-07 15:47:14 +02:00
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>CLiki: ORF</title>
<link rel="alternate" type="application/atom+xml" title="ATOM feed of edits to current article"
href="https://www.cliki.net/site/feed/article.atom?title=ORF">
<link rel="stylesheet" href="static/css/style.css">
<link rel="stylesheet" href="static/css/colorize.css">
</head>
<body>
<span class="hidden">CLiki - ORF</span>
<div id="content"><div id="content-area"><div id="article-title">ORF</div><div id="article">A macro seen in some utility/<a href="convenience&#32;library.html" class="internal">convenience</a> layers. A simple definition (from <a href="McCLIM.html" class="internal">McCLIM</a>) is:<p><div class="code"><span class="nonparen"><span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_define-modify-macro.html" class="symbol"><i><span class="symbol">define-modify-macro</span></i></a> orf <span class="paren2">(<span class="nonparen">&amp;rest args</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_or.html" class="symbol">or</a></span>)</span></span></div><p>Another possibility is to modify the place only <em>if</em> it's null. This definition is more involved:<p><div class="code"><span class="nonparen"><span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmacro.html" class="symbol"><i><span class="symbol">defmacro</span></i></a> orf <span class="paren2">(<span class="nonparen">place &amp;rest forms &amp;environment environment</span>)</span>
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_multiple-value-bind.html" class="symbol">multiple-value-bind</a> <span class="paren3">(<span class="nonparen">temps vals news writer reader</span>)</span> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_get-setf-expansion.html" class="symbol">get-setf-expansion</a> place environment</span>)</span>
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="symbol"><i><span class="symbol">let*</span></i></a> <span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen">new-form `<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_or.html" class="symbol">or</a> ,@forms</span>)</span></span>)</span> <span class="paren5">(<span class="nonparen">set-form `<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_multiple-value-bind.html" class="symbol">multiple-value-bind</a> ,news ,new-form ,writer</span>)</span></span>)</span></span>)</span>
`<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="symbol"><i><span class="symbol">let*</span></i></a> <span class="paren5">(<span class="nonparen">,.<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_mapccm_ma_istcm_mapcon.html" class="symbol">mapcar</a> #'<a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> temps vals</span>)</span></span>)</span> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_or.html" class="symbol">or</a> ,reader ,set-form</span>)</span></span>)</span></span>)</span></span>)</span></span>)</span></span></div><p>There's also an <a href="https://github.com/qitab/ace.core/blob/master/atomic.lisp">atomic version of <tt>orf</tt></a>, using <a href="SBCL.html" class="internal">SBCL</a>'s <a href="https://koji-kojiro.github.io/sb-docs/build/html/sb-ext/function/GET-CAS-EXPANSION.html"><tt>get-cas-expansion</tt></a>.<p><hr>
<a href="macro&#32;example.html" class="category">macro example</a></div></div>
<div id="footer" class="buttonbar"><ul><li><a href="ORF.html">Current version</a></li>
<li><a href="https://www.cliki.net/site/history?article=ORF">History</a></li>
<li><a href="https://www.cliki.net/site/backlinks?article=ORF">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=ORF&amp;from-revision=3832613927">Edit</a></li><li><a href="https://www.cliki.net/site/edit-article?create=t">Create</a></li></ul></div>
</div>
<div id="header-buttons" class="buttonbar">
<ul>
<li><a href="https://www.cliki.net/">Home</a></li>
<li><a href="https://www.cliki.net/site/recent-changes">Recent Changes</a></li>
<li><a href="CLiki.html">About</a></li>
<li><a href="Text&#32;Formatting.html">Text Formatting</a></li>
<li><a href="https://www.cliki.net/site/tools">Tools</a></li>
</ul>
<div id="search">
<form action="https://www.cliki.net/site/search">
<label for="search_query" class="hidden">Search CLiki</label>
<input type="text" name="query" id="search_query" value="" />
<input type="submit" value="search" />
</form>
</div>
</div>
<div id="pageheader">
<div id="header">
<span id="logo">CLiki</span>
<span id="slogan">the common lisp wiki</span>
<div id="login"><form method="post" action="https://www.cliki.net/site/login">
<label for="login_name" class="hidden">Account name</label>
<input type="text" name="name" id="login_name" class="login_input" />
<label for= "login_password" class="hidden">Password</label>
<input type="password" name="password" id="login_password" class="login_input" />
<input type="submit" name="login" value="login" id="login_submit" /><br />
<div id="register"><a href="https://www.cliki.net/site/register">register</a></div>
<input type="submit" name="reset-pw" value="reset password" id="reset_pw" />
</form>
</div>
</div>
</div>
</body></html>