547 lines
81 KiB
HTML
547 lines
81 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
|
<title>CLiki: CLPfAI</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=CLPfAI">
|
||
|
<link rel="stylesheet" href="static/css/style.css">
|
||
|
<link rel="stylesheet" href="static/css/colorize.css">
|
||
|
</head>
|
||
|
|
||
|
<body>
|
||
|
<span class="hidden">CLiki - CLPfAI</span>
|
||
|
<div id="content"><div id="content-area"><div id="article-title">CLPfAI</div><div id="article"><cite>Common Lisp Programming for <a href="Artificial Intelligence.html" class="category">Artificial Intelligence</a></cite>
|
||
|
<br>Tony Hasemer & John Domingue - 1989
|
||
|
<br>International Computer Science Series
|
||
|
<br>Addison & Wesley
|
||
|
<br><a href="https://www.amazon.com/Programming-Artificial-Intelligence-International-Computer/dp/0201175797/ref=sr_1_1?ie=UTF8&s=books&qid=1260219079&sr=8-1">ISBN 0-201-17579-7</a><p>This <a href="book.html" class="category">book</a> was written during the period of standardization of
|
||
|
Common Lisp, before the specification of CLOS was included in
|
||
|
the standard. <p>It was addressed to programmers learning Common Lisp, but
|
||
|
today beginners will prefer newer books, giving a more
|
||
|
complete and modern coverage of Common Lisp and <a href="CLOS.html" class="internal">CLOS</a>,
|
||
|
post standardization.<p>Otherwise it is quite pedagogical a book, leading easily the
|
||
|
beginner to a basic working knowledge of Common Lisp, and
|
||
|
still interesting today for its presentation of:<p><ul>
|
||
|
<li> a simple rule interpreter,
|
||
|
</li>
|
||
|
<li> a simple object system implemented with closures,
|
||
|
</li>
|
||
|
<li> a simplified version of the Schank and Riesbeck's SAM
|
||
|
algorithm (matching events (<a href="https://en.wikipedia.org/wiki/Conceptual_dependency_theory">conceptual dependencies</a>)
|
||
|
to story scripts as the engine of story understanding).
|
||
|
</li>
|
||
|
</ul><p>The programming style is simplified (making use of a small
|
||
|
number of lisp functions). The examples are often
|
||
|
uninteresting (meaningless foo bar stuff, instead of taking
|
||
|
more real examples). Most examples of macros and in exercises
|
||
|
should actually be implemented as functions, and some
|
||
|
functions should have been implemented as macros. Notably in
|
||
|
the last chapter about the SAM algorithm, a big opportunity
|
||
|
to write a couple of nice DSL-like macros was missed.<p>Here is the modernized code from chapter 14:<p><div class="code"><span class="nonparen"> <span class="comment">;;;; -*- mode:lisp; coding:utf-8 -*-
|
||
|
</span>
|
||
|
|
||
|
<span class="comment">;;; This file contains the code for chapter 14, modified and
|
||
|
</span> <span class="comment">;;; modernized to use CLOS and higher order lisp functions. I
|
||
|
</span> <span class="comment">;;; further added some macros notably with-variables and following.
|
||
|
</span> <span class="comment">;;; - PJB
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defpackage.html" class="symbol"><i><span class="symbol">defpackage</span></i></a> <span class="string">"SAM"</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:use</span> <span class="string">"CL"</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:shadow</span> <span class="string">"VARIABLE"</span> <span class="string">"DEFCLASS"</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"A program to implement a simplified version of Schank and Riesbeck's Conceptual Dependencies."</span></span>)</span></span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_in-package.html" class="symbol">in-package</a> <span class="string">"SAM"</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defvar</span></i></a> <span class="special">*cd-trace*</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a>
|
||
|
<span class="string">"A Flag used for tracing. If *cd-trace* is T then cd-trace prints a trace."</span></span>)</span>
|
||
|
|
||
|
<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> cd-trace-on <span class="paren2">(<span class="nonparen"></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="special">*cd-trace*</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span></span>)</span>
|
||
|
<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> cd-trace-off <span class="paren2">(<span class="nonparen"></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="special">*cd-trace*</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a></span>)</span></span>)</span>
|
||
|
|
||
|
<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> cd-trace <span class="paren2">(<span class="nonparen">&rest args</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> <span class="special">*cd-trace*</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_apply.html" class="symbol">apply</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_function.html" class="symbol"><i><span class="symbol">function</span></i></a> <a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a></span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/var_stdebug-i_ace-outputst.html" class="symbol"><span class="special">*trace-output*</span></a> args</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
|
||
|
<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> slots <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/syscla_class.html" class="symbol">class</a></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_mapccm_ma_istcm_mapcon.html" class="symbol">mapcar</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_function.html" class="symbol"><i><span class="symbol">function</span></i></a> clos:slot-definition-name</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">CLOS:CLASS-SLOTS <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_symbolp.html" class="symbol">symbolp</a> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_class.html" class="symbol">class</a></span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_find-class.html" class="symbol">find-class</a> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_class.html" class="symbol">class</a></span>)</span>
|
||
|
<a href="https://www.cliki.net/site/HyperSpec/Body/syscla_class.html" class="symbol">class</a></span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defgeneric.html" class="symbol"><i><span class="symbol">defgeneric</span></i></a> slots-and-values <span class="paren2">(<span class="nonparen">self</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:method-combination</span> <a href="https://www.cliki.net/site/HyperSpec/Body/fun_append.html" class="symbol">append</a></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"Return a plist containing the slots name (as keyword)
|
||
|
and values of each slot."</span></span>)</span></span>)</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> <a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> <span class="paren2">(<span class="nonparen">classname superclasses slots &rest options</span>)</span>
|
||
|
`<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_progn.html" class="symbol"><i><span class="symbol">progn</span></i></a>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">cl:defclass</span></i></a> ,classname ,superclasses
|
||
|
,<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_mapccm_ma_istcm_mapcon.html" class="symbol">mapcar</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">slot</span>)</span>
|
||
|
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_atom.html" class="symbol">atom</a> slot</span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> slot
|
||
|
<span class="keyword">:initarg</span> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_intern.html" class="symbol">intern</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_string.html" class="symbol">string</a> slot</span>)</span> <span class="string">"KEYWORD"</span></span>)</span>
|
||
|
<span class="keyword">:initform</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a>
|
||
|
<span class="keyword">:accessor</span> slot</span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_destructuring-bind.html" class="symbol">destructuring-bind</a> <span class="paren2">(<span class="nonparen">name initform</span>)</span> slot
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> name
|
||
|
<span class="keyword">:initarg</span> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_intern.html" class="symbol">intern</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_string.html" class="symbol">string</a> name</span>)</span> <span class="string">"KEYWORD"</span></span>)</span>
|
||
|
<span class="keyword">:initform</span> initform
|
||
|
<span class="keyword">:accessor</span> name</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
slots</span>)</span>
|
||
|
,@options</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> slots-and-values <a href="https://www.cliki.net/site/HyperSpec/Body/fun_append.html" class="symbol">append</a> <span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen">self ,classname</span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> ,@<span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_mapccm_ma_istcm_mapcon.html" class="symbol">mapcan</a> <span class="paren6">(<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="paren1">(<span class="nonparen">slot</span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_atom.html" class="symbol">atom</a> slot</span>)</span>
|
||
|
<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"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_intern.html" class="symbol">intern</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_string.html" class="symbol">string</a> slot</span>)</span> <span class="string">"KEYWORD"</span></span>)</span> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> slot 'self</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_destructuring-bind.html" class="symbol">destructuring-bind</a> <span class="paren3">(<span class="nonparen">name initform</span>)</span> slot
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_intern.html" class="symbol">intern</a> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_string.html" class="symbol">string</a> name</span>)</span> <span class="string">"KEYWORD"</span></span>)</span> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> name 'self</span>)</span></span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
slots</span>)</span></span>)</span></span>)</span>
|
||
|
',classname</span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defgeneric.html" class="symbol"><i><span class="symbol">defgeneric</span></i></a> show <span class="paren2">(<span class="nonparen">self &optional pre-string post-string</span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> show <span class="keyword">:before</span> <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span> &optional pre-string post-string</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignorable</a> self post-string</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> pre-string <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> pre-string</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> show <span class="keyword">:after</span> <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span> &optional pre-string post-string</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignorable</a> self pre-string</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> post-string <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> post-string</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> cd <span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">action actor object from to</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"A Conceptual Dependency."</span></span>)</span></span>)</span>
|
||
|
|
||
|
<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-cd <span class="paren2">(<span class="nonparen">&key action actor object from to</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_make-instance.html" class="symbol">make-instance</a> 'cd <span class="keyword">:action</span> action <span class="keyword">:actor</span> actor <span class="keyword">:object</span> object <span class="keyword">:from</span> from <span class="keyword">:to</span> to</span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_print-object.html" class="symbol">print-object</a> <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_print-unr_dable-object.html" class="symbol">print-unreadable-object</a> <span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a> <span class="keyword">:identity</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> <span class="keyword">:type</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a> <span class="string">"~{~S ~S~^ ~}"</span> <span class="paren4">(<span class="nonparen">slots-and-values self</span>)</span></span>)</span></span>)</span>
|
||
|
self</span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> show <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> &optional pre-string post-string</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignorable</a> pre-string post-string</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_dolist.html" class="symbol">dolist</a> <span class="paren3">(<span class="nonparen">slot <span class="paren4">(<span class="nonparen">cd-slots self</span>)</span></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">value <span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_funcall.html" class="symbol">funcall</a> slot self</span>)</span></span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> value
|
||
|
<span class="paren5">(<span class="nonparen">show value <span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a> <span class="string">"~%~8A "</span> slot</span>)</span></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/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> cd-slots <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_mapccm_ma_istcm_mapcon.html" class="symbol">mapcar</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_function.html" class="symbol"><i><span class="symbol">function</span></i></a> clos:slot-definition-name</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">CLOS:CLASS-DIRECT-SLOTS <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_find-class.html" class="symbol">find-class</a> 'cd</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> script-triggers <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span></span>)</span>
|
||
|
'<span class="paren2">(<span class="nonparen">actor object from to</span>)</span></span>)</span>
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> cd-entity <span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">cd-name</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"A cd-entity is the most general type of object that can
|
||
|
fill a slot in a conceptual dependency."</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_print-object.html" class="symbol">print-object</a> <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd-entity</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_print-unr_dable-object.html" class="symbol">print-unreadable-object</a> <span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a> <span class="keyword">:identity</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> <span class="keyword">:type</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a> <span class="string">"~{~S ~S~^ ~}"</span> <span class="paren4">(<span class="nonparen">slots-and-values self</span>)</span></span>)</span></span>)</span>
|
||
|
self</span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> show <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd-entity</span>)</span> &optional pre-string post-string</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignorable</a> pre-string post-string</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">princ</a> <span class="paren3">(<span class="nonparen">cd-name self</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> action <span class="paren2">(<span class="nonparen">cd-entity</span>)</span> <span class="paren2">(<span class="nonparen"></span>)</span></span>)</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> <i><span class="symbol">define-action</span></i> <span class="paren2">(<span class="nonparen">name</span>)</span>
|
||
|
`<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_progn.html" class="symbol"><i><span class="symbol">progn</span></i></a>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> ,name <span class="paren4">(<span class="nonparen">action</span>)</span> <span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen">cd-name ',name</span>)</span></span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_print-object.html" class="symbol">print-object</a> <span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen">self ,name</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_print-unr_dable-object.html" class="symbol">print-unreadable-object</a> <span class="paren5">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a> <span class="keyword">:type</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/syscla_stream.html" class="symbol">stream</a> <span class="string">":CD-NAME ~A"</span> <span class="paren6">(<span class="nonparen">cd-name self</span>)</span></span>)</span></span>)</span>
|
||
|
self</span>)</span>
|
||
|
<span class="paren3">(<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> ,name <span class="paren4">(<span class="nonparen">&key actor object from to</span>)</span>
|
||
|
`<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_make-instance.html" class="symbol">make-instance</a> 'cd <span class="keyword">:action</span> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_make-instance.html" class="symbol">make-instance</a> ',',name</span>)</span>
|
||
|
<span class="keyword">:actor</span> ,actor <span class="keyword">:object</span> ,object <span class="keyword">:from</span> ,from <span class="keyword">:to</span> ,to</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><i><span class="symbol">define-action</span></i> atrans</span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><i><span class="symbol">define-action</span></i> ptrans</span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><i><span class="symbol">define-action</span></i> mtrans</span>)</span>
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> cd-entity-with-scripts <span class="paren2">(<span class="nonparen">cd-entity</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">associated-scripts</span>)</span></span>)</span>
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> role <span class="paren2">(<span class="nonparen">cd-entity-with-scripts</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"Used to fill the actor slot of a Conceptual Dependency"</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> setting <span class="paren2">(<span class="nonparen">cd-entity-with-scripts</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"Used to fill the from or to slot of a Conceptual Dependency"</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> store <span class="paren2">(<span class="nonparen">setting</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">cd-name 'store</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">associated-scripts 'shopping</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"A specialization of setting. Represents any store.
|
||
|
Notice that we have a script associated with this class of object."</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> prop <span class="paren2">(<span class="nonparen">cd-entity-with-scripts</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><span class="keyword">:documentation</span> <span class="string">"Used to fill the object slot of a Conceptual Dependency"</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> story <span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">cds <span class="comment">; A list of cds
|
||
|
</span> current-script <span class="comment">; The script we are currently trying to match against.
|
||
|
</span> possible-next-events <span class="comment">; The possible next events we are trying to match against.
|
||
|
</span> </span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> show <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self story</span>)</span> &optional pre-string post-string</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignorable</a> pre-string post-string</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_dolist.html" class="symbol">dolist</a> <span class="paren3">(<span class="nonparen">cd <span class="paren4">(<span class="nonparen">cds self</span>)</span></span>)</span> <span class="paren3">(<span class="nonparen">show cd <span class="string">"~%"</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> script <span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">events <span class="comment">; The possible events in a story: a list of cds.
|
||
|
</span> variables <span class="comment">; A list of the variables used in the script.
|
||
|
</span> <span class="comment">; This is used to clear the script before it is used.
|
||
|
</span> </span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> show <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self script</span>)</span> &optional pre-string post-string</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignorable</a> pre-string post-string</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_dolist.html" class="symbol">dolist</a> <span class="paren3">(<span class="nonparen">event <span class="paren4">(<span class="nonparen">events self</span>)</span></span>)</span> <span class="paren3">(<span class="nonparen">show event <span class="string">"~%"</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defclass.html" class="symbol"><i><span class="symbol">defclass</span></i></a> <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a> <span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">cd-name <span class="comment">; The name of the variable.
|
||
|
</span> value <span class="comment">; The value of the variable.
|
||
|
</span> </span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> show <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a></span>)</span> &optional pre-string post-string</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/sym_declare.html" class="symbol">declare</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/dec_ignorecm_ignorable.html" class="symbol">ignorable</a> pre-string post-string</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> <span class="string">"~A "</span> <span class="paren3">(<span class="nonparen">cd-name self</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren3">(<span class="nonparen">value self</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">show <span class="paren4">(<span class="nonparen">value self</span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> <span class="string">"Unmatched "</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> bound? <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a></span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">value self</span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> clear-value <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a></span>)</span></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">value self</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defvar</span></i></a> <span class="special">*scripts*</span> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_make-hash-table.html" class="symbol">make-hash-table</a></span>)</span></span>)</span>
|
||
|
|
||
|
<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> get-script <span class="paren2">(<span class="nonparen">name</span>)</span> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_gethash.html" class="symbol">gethash</a> name <span class="special">*scripts*</span></span>)</span></span>)</span>
|
||
|
<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> events-script <span class="paren2">(<span class="nonparen">name</span>)</span> <span class="paren2">(<span class="nonparen">events <span class="paren3">(<span class="nonparen">get-script name</span>)</span></span>)</span></span>)</span>
|
||
|
<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> store-script <span class="paren2">(<span class="nonparen">name script</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_gethash.html" class="symbol">gethash</a> name <span class="special">*scripts*</span></span>)</span> script</span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> match <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> event</span>)</span>
|
||
|
<span class="string">"Tries to match a cd against an event in a script
|
||
|
by matching the slots in the cd against those in the event."</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_everycm_s_erycm_notany.html" class="symbol">every</a> <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">slot</span>)</span> <span class="paren4">(<span class="nonparen">match-cd-slot self slot event</span>)</span></span>)</span> <span class="paren3">(<span class="nonparen">cd-slots self</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> match-cd-slot <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> slot event</span>)</span>
|
||
|
<span class="string">"Try AND match one of the slots in a cd against the same slot
|
||
|
in an event from a script.
|
||
|
SLOT holds the name of the slot (action from to etc) we want
|
||
|
to compare to."</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">e-val <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_funcall.html" class="symbol">funcall</a> slot event</span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">c-val <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_funcall.html" class="symbol">funcall</a> slot self</span>)</span></span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_cond.html" class="symbol"><i><span class="symbol">cond</span></i></a>
|
||
|
<span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_null.html" class="symbol">null</a> e-val</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_null.html" class="symbol">null</a> c-val</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_and.html" class="symbol">and</a> <span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_typep.html" class="symbol">typep</a> c-val 'role</span>)</span>
|
||
|
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_member.html" class="symbol">member</a> <span class="paren1">(<span class="nonparen">cd-name c-val</span>)</span> '<span class="paren1">(<span class="nonparen">he she it they</span>)</span></span>)</span></span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> <span class="paren5">(<span class="nonparen">check-equal e-val c-val</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/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> check-equal <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span> story-object</span>)</span>
|
||
|
<span class="string">"Checks that two objects are equal."</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren3">(<span class="nonparen">cd-name story-object</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_equal.html" class="symbol">equal</a> <span class="paren4">(<span class="nonparen">cd-name self</span>)</span> <span class="paren4">(<span class="nonparen">cd-name story-object</span>)</span></span>)</span>
|
||
|
<a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> check-equal <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a></span>)</span> story-object</span>)</span>
|
||
|
<span class="string">"Checks that a variable can match against a story object."</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren3">(<span class="nonparen">bound? self</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">check-equal <span class="paren4">(<span class="nonparen">value self</span>)</span> story-object</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">value self</span>)</span> story-object</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> process <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self story</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">clear self</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_dolist.html" class="symbol">dolist</a> <span class="paren3">(<span class="nonparen">cd <span class="paren4">(<span class="nonparen">cds self</span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">show cd <span class="string">"~2%Input is "</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">process-cd cd self</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">show <span class="paren3">(<span class="nonparen">get-script <span class="paren4">(<span class="nonparen">current-script self</span>)</span></span>)</span> <span class="string">"~%Story done -- script is "</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> process-cd <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> story</span>)</span>
|
||
|
<span class="string">"Process one of the CD in a story."</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_or.html" class="symbol">or</a> <span class="paren3">(<span class="nonparen">find-cd-in-script self story</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">suggest-new-script self story</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">show self <span class="string">"~2%not adding to any script"</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> clear <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self script</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_dolist.html" class="symbol">dolist</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a> <span class="paren4">(<span class="nonparen">variables self</span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">clear-value <a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> clear <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self story</span>)</span></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">current-script self</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a>
|
||
|
<span class="paren3">(<span class="nonparen">possible-next-events self</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> find-cd-in-script <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> story</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">event <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_findcm_fi__find-if-not.html" class="symbol">find-if</a> <span class="paren6">(<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="paren1">(<span class="nonparen">event</span>)</span> <span class="paren1">(<span class="nonparen">match self event</span>)</span></span>)</span>
|
||
|
<span class="paren6">(<span class="nonparen">possible-next-events story</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> event
|
||
|
<span class="paren4">(<span class="nonparen">show event <span class="string">"~2%matches"</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">reset-script-info story event</span>)</span>
|
||
|
event</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> reset-script-info <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self story</span>)</span> <a href="https://www.cliki.net/site/HyperSpec/Body/fun_positionc_ition-if-not.html" class="symbol">position</a></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">possible-next-events self</span>)</span> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_carcm_cdr_darcm_cddddr.html" class="symbol">cdr</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_member.html" class="symbol">member</a> <a href="https://www.cliki.net/site/HyperSpec/Body/fun_positionc_ition-if-not.html" class="symbol">position</a> <span class="paren5">(<span class="nonparen">possible-next-events self</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/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> suggest-new-script <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> story</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">new-script <span class="paren5">(<span class="nonparen">find-script self</span>)</span></span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> new-script
|
||
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_format.html" class="symbol">format</a> <a href="https://www.cliki.net/site/HyperSpec/Body/any_t.html" class="symbol">t</a> <span class="string">"~2%newscript ~A"</span> new-script</span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <span class="paren5">(<span class="nonparen">current-script story</span>)</span> new-script
|
||
|
<span class="paren5">(<span class="nonparen">possible-next-events story</span>)</span> <span class="paren5">(<span class="nonparen">events-script new-script</span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">find-cd-in-script self story</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> find-script <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_everycm_s_erycm_notany.html" class="symbol">some</a> <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">trigger</span>)</span> <span class="paren4">(<span class="nonparen">try self trigger</span>)</span></span>)</span> <span class="paren3">(<span class="nonparen">script-triggers self</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmethod.html" class="symbol"><i><span class="symbol">defmethod</span></i></a> try <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">self cd</span>)</span> slot</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_funcall.html" class="symbol">funcall</a> slot self</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">associated-scripts <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_funcall.html" class="symbol">funcall</a> slot self</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span> <span class="comment">;;; WITH-VARIABLES Macro
|
||
|
</span> <span class="comment">;;; (with-variables (vardecl...) body...)
|
||
|
</span> <span class="comment">;;;
|
||
|
</span> <span class="comment">;;; vardecl are either a symbol naming the variable,
|
||
|
</span> <span class="comment">;;; or a list (name class [cd-name])
|
||
|
</span> <span class="comment">;;; When the cd-name is absent, it is either the name itself if it
|
||
|
</span> <span class="comment">;;; doesn't start with a question mark, or the name with the prefix
|
||
|
</span> <span class="comment">;;; question mark removed.
|
||
|
</span>
|
||
|
<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> variable-name <span class="paren2">(<span class="nonparen">vardecl</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_atom.html" class="symbol">atom</a> vardecl</span>)</span> vardecl <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_firstcm_s_inthcm_tenth.html" class="symbol">first</a> vardecl</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<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> variable-cd-name <span class="paren2">(<span class="nonparen">vardecl</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_or.html" class="symbol">or</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_atom.html" class="symbol">atom</a> vardecl</span>)</span> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_null.html" class="symbol">null</a> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_firstcm_s_inthcm_tenth.html" class="symbol">third</a> vardecl</span>)</span></span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_chareqcm__ar-not-lessp.html" class="symbol">char=</a> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_aref.html" class="symbol">aref</a> <span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_string.html" class="symbol">string</a> <span class="paren1">(<span class="nonparen">variable-name vardecl</span>)</span></span>)</span> 0</span>)</span> <span class="character">#\?</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_intern.html" class="symbol">intern</a> <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_subseq.html" class="symbol">subseq</a> <span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_string.html" class="symbol">string</a> <span class="paren1">(<span class="nonparen">variable-name vardecl</span>)</span></span>)</span> 1</span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">variable-name vardecl</span>)</span></span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_firstcm_s_inthcm_tenth.html" class="symbol">third</a> vardecl</span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<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> variable-class <span class="paren2">(<span class="nonparen">vardecl</span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/speope_if.html" class="symbol"><i><span class="symbol">if</span></i></a> <span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_atom.html" class="symbol">atom</a> vardecl</span>)</span>
|
||
|
'<a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a>
|
||
|
<span class="paren3">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_or.html" class="symbol">or</a> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_firstcm_s_inthcm_tenth.html" class="symbol">second</a> vardecl</span>)</span> '<a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_doc_umentationcp.html" class="symbol">variable</a></span>)</span></span>)</span></span>)</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> <i><span class="symbol">with-variables</span></i> <span class="paren2">(<span class="nonparen"><span class="paren3">(<span class="nonparen">&rest variables</span>)</span> &body body</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"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_mapccm_ma_istcm_mapcon.html" class="symbol">mapcar</a> <span class="paren4">(<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="paren5">(<span class="nonparen">vardecl</span>)</span>
|
||
|
`<span class="paren5">(<span class="nonparen">,<span class="paren6">(<span class="nonparen">variable-name vardecl</span>)</span>
|
||
|
<span class="paren6">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_make-instance.html" class="symbol">make-instance</a> ',<span class="paren1">(<span class="nonparen">variable-class vardecl</span>)</span>
|
||
|
,@<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_whencm_unless.html" class="symbol">when</a> <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_findcm_fi__find-if-not.html" class="symbol">find</a> 'cd-name <span class="paren3">(<span class="nonparen">slots <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/acc_find-class.html" class="symbol">find-class</a> <span class="paren5">(<span class="nonparen">variable-class vardecl</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
`<span class="paren2">(<span class="nonparen"><span class="keyword">:cd-name</span> ',<span class="paren3">(<span class="nonparen">variable-cd-name vardecl</span>)</span></span>)</span></span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
variables</span>)</span>
|
||
|
,@body</span>)</span></span>)</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> goes-to <span class="paren2">(<span class="nonparen">who where-to &key from</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">vwho <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_gensym.html" class="symbol">gensym</a></span>)</span></span>)</span></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">,vwho ,who</span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">ptrans <span class="keyword">:actor</span> ,vwho <span class="keyword">:object</span> ,vwho <span class="keyword">:from</span> ,from <span class="keyword">:to</span> ,where-to</span>)</span></span>)</span></span>)</span></span>)</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> takes <span class="paren2">(<span class="nonparen">who what &key from</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">vwho <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_gensym.html" class="symbol">gensym</a></span>)</span></span>)</span></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">,vwho ,who</span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">ptrans <span class="keyword">:actor</span> ,vwho <span class="keyword">:object</span> ,what <span class="keyword">:from</span> ,from <span class="keyword">:to</span> ,vwho</span>)</span></span>)</span></span>)</span></span>)</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> gives <span class="paren2">(<span class="nonparen">who what to-whom</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">vwho <span class="paren5">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/fun_gensym.html" class="symbol">gensym</a></span>)</span></span>)</span></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">,vwho ,who</span>)</span></span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">atrans <span class="keyword">:actor</span> ,vwho <span class="keyword">:object</span> ,what <span class="keyword">:from</span> ,vwho <span class="keyword">:to</span> ,to-whom</span>)</span></span>)</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/mac_define-symbol-macro.html" class="symbol"><i><span class="symbol">define-symbol-macro</span></i></a> he <span class="paren2">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/stagenfun_make-instance.html" class="symbol">make-instance</a> 'role <span class="keyword">:cd-name</span> 'he</span>)</span></span>)</span>
|
||
|
|
||
|
|
||
|
<span class="comment">;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
</span>
|
||
|
<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> initialize-cd-system <span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen"><i><span class="symbol">with-variables</span></i> <span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen">money prop</span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">script script</span>)</span>
|
||
|
?shopper ?store ?item ?elsewhere</span>)</span>
|
||
|
<span class="paren3">(<span class="nonparen">store-script 'shopping script</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">variables script</span>)</span> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> ?shopper ?store ?item ?elsewhere</span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">events script</span>)</span> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> <span class="paren5">(<span class="nonparen">goes-to ?shopper ?store</span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen">takes ?shopper ?item</span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen">gives ?store ?item ?shopper</span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen">gives ?shopper money ?store</span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen">goes-to ?shopper ?elsewhere <span class="keyword">:from</span> ?store</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/mac_defparametercm_defvar.html" class="symbol"><i><span class="symbol">defparameter</span></i></a> <span class="special">*kite-story*</span>
|
||
|
<span class="paren2">(<span class="nonparen"><i><span class="symbol">with-variables</span></i>
|
||
|
<span class="paren3">(<span class="nonparen"><span class="paren4">(<span class="nonparen">jack role</span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">woolworths store</span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">kite prop</span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">home setting</span>)</span>
|
||
|
<span class="paren4">(<span class="nonparen">story story</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">cds story</span>)</span> <span class="paren4">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_list.html" class="symbol">list</a> <span class="paren5">(<span class="nonparen">goes-to jack woolworths</span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen">takes he kite</span>)</span>
|
||
|
<span class="paren5">(<span class="nonparen">goes-to he home</span>)</span></span>)</span></span>)</span>
|
||
|
story</span>)</span></span>)</span>
|
||
|
|
||
|
<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> demo <span class="paren2">(<span class="nonparen"></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">clear <span class="paren3">(<span class="nonparen">get-script 'shopping</span>)</span></span>)</span>
|
||
|
<span class="paren2">(<span class="nonparen">process <span class="special">*kite-story*</span></span>)</span></span>)</span>
|
||
|
|
||
|
<span class="paren1">(<span class="nonparen">initialize-cd-system</span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen"><a href="https://www.cliki.net/site/HyperSpec/Body/any_setf.html" class="symbol">setf</a> <a href="https://www.cliki.net/site/HyperSpec/Body/var_stprint-prettyst.html" class="symbol"><span class="special">*print-pretty*</span></a> <a href="https://www.cliki.net/site/HyperSpec/Body/any_nil.html" class="symbol">nil</a></span>)</span>
|
||
|
<span class="paren1">(<span class="nonparen">demo</span>)</span></span></div><p>Sample run:<p><pre>
|
||
|
C/USER[251]> (load "sam.lisp")
|
||
|
;; Loading file sam.lisp ...
|
||
|
|
||
|
Input is
|
||
|
ACTION PTRANS
|
||
|
ACTOR JACK
|
||
|
OBJECT JACK
|
||
|
TO WOOLWORTHS
|
||
|
|
||
|
newscript SHOPPING
|
||
|
|
||
|
matches
|
||
|
ACTION PTRANS
|
||
|
ACTOR SHOPPER JACK
|
||
|
OBJECT SHOPPER JACK
|
||
|
TO STORE WOOLWORTHS
|
||
|
|
||
|
Input is
|
||
|
ACTION PTRANS
|
||
|
ACTOR HE
|
||
|
OBJECT KITE
|
||
|
TO HE
|
||
|
|
||
|
matches
|
||
|
ACTION PTRANS
|
||
|
ACTOR SHOPPER JACK
|
||
|
OBJECT ITEM KITE
|
||
|
TO SHOPPER JACK
|
||
|
|
||
|
Input is
|
||
|
ACTION PTRANS
|
||
|
ACTOR HE
|
||
|
OBJECT HE
|
||
|
TO HOME
|
||
|
|
||
|
matches
|
||
|
ACTION PTRANS
|
||
|
ACTOR SHOPPER JACK
|
||
|
OBJECT SHOPPER JACK
|
||
|
FROM STORE WOOLWORTHS
|
||
|
TO ELSEWHERE HOME
|
||
|
Story done -- script is
|
||
|
|
||
|
ACTION PTRANS
|
||
|
ACTOR SHOPPER JACK
|
||
|
OBJECT SHOPPER JACK
|
||
|
TO STORE WOOLWORTHS
|
||
|
|
||
|
ACTION PTRANS
|
||
|
ACTOR SHOPPER JACK
|
||
|
OBJECT ITEM KITE
|
||
|
TO SHOPPER JACK
|
||
|
|
||
|
ACTION ATRANS
|
||
|
ACTOR STORE WOOLWORTHS
|
||
|
OBJECT ITEM KITE
|
||
|
FROM STORE WOOLWORTHS
|
||
|
TO SHOPPER JACK
|
||
|
|
||
|
ACTION ATRANS
|
||
|
ACTOR SHOPPER JACK
|
||
|
OBJECT MONEY
|
||
|
FROM SHOPPER JACK
|
||
|
TO STORE WOOLWORTHS
|
||
|
|
||
|
ACTION PTRANS
|
||
|
ACTOR SHOPPER JACK
|
||
|
OBJECT SHOPPER JACK
|
||
|
FROM STORE WOOLWORTHS
|
||
|
TO ELSEWHERE HOME
|
||
|
;; Loaded file sam.lisp
|
||
|
T
|
||
|
C/USER[252]>
|
||
|
</pre><p><hr>
|
||
|
<a href="macro example.html" class="category">macro example</a></div></div>
|
||
|
<div id="footer" class="buttonbar"><ul><li><a href="CLPfAI.html">Current version</a></li>
|
||
|
<li><a href="https://www.cliki.net/site/history?article=CLPfAI">History</a></li>
|
||
|
<li><a href="https://www.cliki.net/site/backlinks?article=CLPfAI">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=CLPfAI&from-revision=3799946548">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 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>
|