emacs.d/clones/lisp/www.cliki.net/cy.html
2022-10-07 15:47:14 +02:00

110 lines
No EOL
14 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>CLiki: cy</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=cy">
<link rel="stylesheet" href="static/css/style.css">
<link rel="stylesheet" href="static/css/colorize.css">
</head>
<body>
<span class="hidden">CLiki - cy</span>
<div id="content"><div id="content-area"><div id="article-title">cy</div><div id="article">Cy is a <a href="Person.html" class="category">Person</a> though perhaps to a questionable degree, who likes programming to be simple and easy. Cy is not a very happy <a href="Person.html" class="category">Person</a> as a consequence.<p>Cy is for cymbolic cyxpressions<p>Cy likes when fundamental parts of the language nobody talks about are made clear, for instance:
<ul>
<li>Here is how function cells work:
</li>
</ul><div class="code"><span class="nonparen"><span class="comment">;; make a dummy function that prints something
</span><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> p <span class="paren2">(<span class="nonparen">s</span>)</span>
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_lambda.html" class="symbol"><i><span class="symbol">lambda</span></i></a> <span class="paren3">(<span class="nonparen"></span>)</span>
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_writecm_p_rintcm_princ.html" class="symbol">print</a> s</span>)</span>
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_terpricm_fresh-line.html" class="symbol">terpri</a></span>)</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_funcall.html" class="symbol">funcall</a> <span class="paren2">(<span class="nonparen">p <span class="string">"here goes"</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_symbol-function.html" class="symbol">symbol-function</a> 'foo</span>)</span> <span class="paren2">(<span class="nonparen">p <span class="string">"in the function cell"</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen">foo</span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_symbol-function.html" class="symbol">symbol-function</a> 'foo</span>)</span> <span class="paren2">(<span class="nonparen">p <span class="string">"re-assigned the function cell"</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen">foo</span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_symbol-function.html" class="symbol">symbol-function</a> 'foo</span>)</span> <span class="paren2">(<span class="nonparen">p <span class="string">"the global function cell for foo"</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_fletcm_scm_macrolet.html" class="symbol"><i><span class="symbol">flet</span></i></a> <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">foo <span class="paren4">(<span class="nonparen"></span>)</span> <span class="paren4">(<span class="nonparen">p <span class="string">"local function cell"</span></span>)</span></span>)</span></span>)</span>
<span class="paren2">(<span class="nonparen">foo</span>)</span>
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_symbol-function.html" class="symbol">symbol-function</a> 'foo</span>)</span> <span class="paren3">(<span class="nonparen">p <span class="string">"oops! assigned the global function cell"</span></span>)</span></span>)</span>
<span class="paren2">(<span class="nonparen">foo</span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_writecm_p_rintcm_princ.html" class="symbol">print</a> <span class="string">"back in the global context"</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_terpricm_fresh-line.html" class="symbol">terpri</a></span>)</span>
<span class="paren1">(<span class="nonparen">foo</span>)</span>
<span class="comment">;; still no idea how to catch COMPILE time warnings
</span><span class="comment">;; such as sbcl which detects setting a function cell to a number type
</span><span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_catch.html" class="symbol"><i><span class="symbol">catch</span></i></a> 'noprob
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_handler-bind.html" class="symbol">handler-bind</a>
<span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/contyp_simple-type-error.html" class="symbol">simple-type-error</a> #'<span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_lambda.html" class="symbol"><i><span class="symbol">lambda</span></i></a> <span class="paren6">(<span class="nonparen">c</span>)</span>
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignore</a> c</span>)</span></span>)</span>
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_writecm_p_rintcm_princ.html" class="symbol">print</a> 'yay</span>)</span>
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_throw.html" class="symbol"><i><span class="symbol">throw</span></i></a> 'noprob <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a></span>)</span></span>)</span></span>)</span></span>)</span>
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_symbol-function.html" class="symbol">symbol-function</a> 'foo</span>)</span> 23</span>)</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_terpricm_fresh-line.html" class="symbol">terpri</a></span>)</span>
</span></div>
<li>
asdf stores compiled .fasl files in ~/.cache/common-lisp/ by default
</li><li>
You can make a .fasl from a .lisp file, by (compile-file "name.lisp")
</li><li>
This is the difference between let and symbol-macrolet:
</li><div class="code"><span class="nonparen"><span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defun.html" class="symbol"><i><span class="symbol">defun</span></i></a> make-side-effect <span class="paren2">(<span class="nonparen"></span>)</span>
<span class="paren2">(<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="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen">i 0</span>)</span></span>)</span>
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_lambda.html" class="symbol"><i><span class="symbol">lambda</span></i></a> <span class="paren4">(<span class="nonparen"></span>)</span>
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/spefor_setq.html" class="symbol"><i><span class="symbol">setq</span></i></a> i <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_pl.html" class="symbol">+</a> i 1</span>)</span></span>)</span></span>)</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_symbol-function.html" class="symbol">symbol-function</a> 'i</span>)</span> <span class="paren2">(<span class="nonparen">make-side-effect</span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_writecm_p_rintcm_princ.html" class="symbol">print</a> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> <span class="paren3">(<span class="nonparen">i</span>)</span> <span class="paren3">(<span class="nonparen">i</span>)</span> <span class="paren3">(<span class="nonparen">i</span>)</span></span>)</span></span>)</span>
<span class="paren1">(<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="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">ii <span class="paren4">(<span class="nonparen">i</span>)</span></span>)</span></span>)</span>
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_writecm_p_rintcm_princ.html" class="symbol">print</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> ii ii ii</span>)</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_symbol-macrolet.html" class="symbol"><i><span class="symbol">symbol-macrolet</span></i></a> <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">ii <span class="paren4">(<span class="nonparen">i</span>)</span></span>)</span></span>)</span>
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_writecm_p_rintcm_princ.html" class="symbol">print</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> ii ii ii</span>)</span></span>)</span></span>)</span>
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_writecm_p_rintcm_princ.html" class="symbol">print</a> '<span class="paren2">(<span class="nonparen">Q E D</span>)</span></span>)</span>
</span></div>
</div></div>
<div id="footer" class="buttonbar"><ul><li><a href="cy.html">Current version</a></li>
<li><a href="https://www.cliki.net/site/history?article=cy">History</a></li>
<li><a href="https://www.cliki.net/site/backlinks?article=cy">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=cy&amp;from-revision=3641185429">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>