<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=LispKit_Lisp</id>
	<title>LispKit Lisp - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=LispKit_Lisp"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=LispKit_Lisp&amp;action=history"/>
	<updated>2026-06-28T16:50:41Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=LispKit_Lisp&amp;diff=306341&amp;oldid=prev</id>
		<title>imported&gt;Mhss：​/* top */</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=LispKit_Lisp&amp;diff=306341&amp;oldid=prev"/>
		<updated>2026-03-22T06:12:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;top&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox programming language&lt;br /&gt;
| name = Lispkit Lisp&lt;br /&gt;
| screenshot = &amp;lt;!-- Filename --&amp;gt;&lt;br /&gt;
| screenshot caption = &lt;br /&gt;
| paradigm =[[纯函数式编程|纯函数式]]&lt;br /&gt;
| family = [[LISP]]&lt;br /&gt;
| designer = Peter Henderson&lt;br /&gt;
| developer = &amp;lt;!-- or: | developers = --&amp;gt;&lt;br /&gt;
| released = {{Start date and age|1980}}&lt;br /&gt;
| typing = &lt;br /&gt;
| scope = [[作用域|词法]]&lt;br /&gt;
| programming language = [[ALGOL]], [[Pascal语言|Pascal]], [[C语言|C]]&lt;br /&gt;
| discontinued = Yes&lt;br /&gt;
| platform = &lt;br /&gt;
| operating system = &lt;br /&gt;
| license = &lt;br /&gt;
| file ext = &lt;br /&gt;
| file format = &amp;lt;!-- or: | file formats = --&amp;gt;&lt;br /&gt;
| website = &amp;lt;!-- {{URL|www.example.com}} --&amp;gt;&lt;br /&gt;
| implementations = &lt;br /&gt;
| dialects = &lt;br /&gt;
| influenced by = [[ALGOL]], [[LISP]]&lt;br /&gt;
| influenced = &lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;LispKit Lisp&amp;#039;&amp;#039;&amp;#039;是[[词法作用域]]的[[纯函数式编程|纯函数式]]的[[LISP|Lisp]]语言子集，它是作为[[函数式编程]]概念的测试台而开发的。它首先使用了对[[惰性求值]]的早期经验。在1980年开发者Peter Henderson，出版了用一种变体[[ALGOL]]语言写的基于[[SECD抽象机]]的实现&amp;lt;ref name=&amp;quot;henderson&amp;quot;&amp;gt;{{cite book | last=Henderson | first=Peter | title=Functional Programming: Application and Implementation | url=https://epdf.pub/functional-programming-application-and-implementation.html | year=1980 | publisher=Prentice Hall | isbn=0-13-331579-7 | access-date=2021-12-28 | archive-date=2021-12-28 | archive-url=https://web.archive.org/web/20211228111622/https://epdf.pub/functional-programming-application-and-implementation.html }}&amp;lt;/ref&amp;gt;。它的[[编译器]]和[[虚拟机]]都是高度可移植的，并已经在多种机器上实现&amp;lt;ref&amp;gt;{{cite web|title=An implementation of the Lispkit described in the book &amp;quot;FUNCTIONAL PROGRAMMING: Application and Implementation&amp;quot;, by Peter Henderson|url=https://github.com/carld/lispkit|access-date=2021-12-28|archive-date=2021-12-30|archive-url=https://web.archive.org/web/20211230072756/https://github.com/carld/lispkit}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== 基本函数 ==&lt;br /&gt;
基本语言只提供了下列函数，但在Henderson的书中讨论了明确支持[[惰性求值]]和[[非确定性编程]]的扩展。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;quote&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受一个表达式，返回这个表达式为一个值。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;eq&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受二个表达式，如果它们的值相等，则返回符号&amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;，否则返回符号&amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt;。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;atom&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受一个表达式，如果它的值是原子，则返回符号&amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;，否则返回符号&amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt;。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;if&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp3&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受三个表达式，如果第一个表达式为符号&amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;，则返回第二个表达式的值，否则返回第三个表达式的值。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;cons&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受二个表达式，返回由它们的值构成的一个值点对。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;car&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：也写为&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;，接受其值为点对的一个表达式，返回这个点对的第一个值。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;cdr&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：也写为&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;tail&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;，接受其值为点对的一个表达式，返回这个点对的第二个值。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;let&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp&amp;gt;&amp;lt;/small&amp;gt; (&amp;lt;small&amp;gt;&amp;lt;name1&amp;gt;&amp;lt;/small&amp;gt;.&amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt;) (&amp;lt;small&amp;gt;&amp;lt;name2&amp;gt;&amp;lt;/small&amp;gt;.&amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)……)&amp;lt;/code&amp;gt;：接受一个表达式和它所具有的一个声明类表，它包含在这个表达式中可见的诸命名表达式，这个函数返回这个表达式的值。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;lambda&amp;lt;/b&amp;gt; (&amp;lt;small&amp;gt;&amp;lt;name1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;name2&amp;gt;&amp;lt;/small&amp;gt;……) &amp;lt;small&amp;gt;&amp;lt;exp&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受一个参数列表和一个表达式，将它们返回为函数。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;letrec&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp&amp;gt;&amp;lt;/small&amp;gt; (&amp;lt;small&amp;gt;&amp;lt;name1&amp;gt;&amp;lt;/small&amp;gt;.&amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt;) (&amp;lt;small&amp;gt;&amp;lt;name2&amp;gt;&amp;lt;/small&amp;gt;.&amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)……)&amp;lt;/code&amp;gt;：类似于&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;，但是在声明中被命名的表达式比如&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;之中，出现的名字比如&amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;name1&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;也代表着对应的值。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;add&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受二个表达式，返回它们的数值的和。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;sub&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受二个表达式，返回它们的数值的差。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;mul&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受二个表达式，返回它们的数值的积。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;div&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受二个表达式，返回它们的数值的商。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;rem&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：也写为&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;mod&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;，接受二个表达式，返回它们的数值的余数。&lt;br /&gt;
*&amp;lt;code&amp;gt;(&amp;lt;b&amp;gt;leq&amp;lt;/b&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp1&amp;gt;&amp;lt;/small&amp;gt; &amp;lt;small&amp;gt;&amp;lt;exp2&amp;gt;&amp;lt;/small&amp;gt;)&amp;lt;/code&amp;gt;：接受二个表达式，如果第一个数值小于或等于第二个，则返回符号&amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;，否则返回符号&amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
==绑定==&lt;br /&gt;
函数&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;letrec&amp;lt;/code&amp;gt;有着类似的用处，但是在[[名字绑定]]机制即处理命名变量的方式上有着微妙的区别。&lt;br /&gt;
*{{code|2=&amp;quot;scheme&amp;quot;|(let e (x₁.e₁) (x₂.e₂)……) ≡ ((lambda (x₁ x₂……) e) e₁ e₂……)}}：&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;在声明列表中，将诸表达式的值绑定到诸变量名字。&amp;lt;code&amp;gt;lambda&amp;lt;/code&amp;gt;定义并返回一个函数，在后续的{{en-link|函数应用|Function application}}之时，将诸实际参数表达式的值绑定到诸形式参数名字。&lt;br /&gt;
*{{code|2=&amp;quot;scheme&amp;quot;|(letrec e (x₁.e₁) (x₂.y₂)……)}}：&amp;lt;code&amp;gt;letrec&amp;lt;/code&amp;gt;本质上类似于&amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;，但是它允许[[递归 (计算机科学)|递归]]的定义函数和值。&lt;br /&gt;
例如下面表达式的值是[[惰性求值|无限列表]]&amp;lt;code&amp;gt;(1 1 1 ……)&amp;lt;/code&amp;gt;：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(letrec i&lt;br /&gt;
  (i.(cons (quote 1) i)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
上面例子采用[[LISP#S-表达式表示列表|点对表示法]]，指示出了对[[S-表达式]]的[[模式匹配|匹配]]方式，程序代码通常采用列表表示法写为：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
(letrec e&lt;br /&gt;
  (f lambda y₁ e₁)&lt;br /&gt;
  (g lambda y₂ e₂))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
这里的&amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;是绑定变量的列表&amp;lt;code&amp;gt;(x₁ x₂……)&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
==引用==&lt;br /&gt;
{{reflist|2}}&lt;br /&gt;
&lt;br /&gt;
== 扩展阅读 ==&lt;br /&gt;
*Peter Henderson, Geraint A. Jones, and Simon B. Jones, &amp;quot;The LispKit Manual&amp;quot; (ISBN 0-902928-18-X)&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
* The LispKit Manual, [http://www.cs.ox.ac.uk/files/3299/PRG32%20vol%201.pdf Volume 1] {{Wayback|url=http://www.cs.ox.ac.uk/files/3299/PRG32%20vol%201.pdf |date=20160304062717 }}, [http://www.cs.ox.ac.uk/files/3300/PRG32%20vol%202.pdf Volume 2] {{Wayback|url=http://www.cs.ox.ac.uk/files/3300/PRG32%20vol%202.pdf |date=20160304113042 }}&lt;br /&gt;
* [https://softwarepreservation.computerhistory.org/LISP/other.html#LispKit_Lisp_ Documentation and source of Lispkit]&lt;br /&gt;
* [https://github.com/hanshuebner/secd/tree/master/lispkit/LKIT-2 Archive of old LispKit LISP code and files, plus C implementation of SECD machine]&lt;br /&gt;
* [http://perun.pmf.uns.ac.rs/radovanovic/publications/2002-prim-lisp.pdf Paper about a LispKit LISP implementation in Java] {{Wayback|url=http://perun.pmf.uns.ac.rs/radovanovic/publications/2002-prim-lisp.pdf |date=20160303181154 }}, and [https://perun.pmf.uns.ac.rs/radovanovic/downloads.htm the implementation itself] {{Wayback|url=https://perun.pmf.uns.ac.rs/radovanovic/downloads.htm |date=20210302074520 }}&lt;br /&gt;
&lt;br /&gt;
{{Lisp programming language}}&lt;br /&gt;
&lt;br /&gt;
[[Category:学术的编程语言]]&lt;br /&gt;
[[Category:LISP程式語言家族]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Mhss</name></author>
	</entry>
</feed>