Lisp在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
做个小测试, 发布于:2024-03-14 09:53 桥梁安全计算lisp 发布于:2023-10-24 09:36 定义函数 newCalc,接受两个参数 x 和 y 发布于:2023-09-23 16:06 判断两数之和大于第三个数 发布于:2023-09-01 16:21 分数陈述性知识 发布于:2023-08-24 22:27 CAD面积/体积计算 发布于:2023-04-19 12:08 测试lisp语言 发布于:2023-04-10 15:03 计算list中某一元素数量 发布于:2023-02-16 11:32 LISP 初体验 发布于:2021-08-11 13:16 XY坐标标注CAD插件 发布于:2021-06-11 15:25 format t 输出语句 发布于:2020-08-10 18:21 print 输出语句 发布于:2020-08-10 18:20 write 输出语句 发布于:2020-08-10 18:16 write-line 输出语句 发布于:2020-08-10 18:14 循环输出内容 发布于:2020-08-10 18:11 [更多]
显示目录



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

可以从cons单元构建树的数据结构,如清单列表。

为了实现树形结构,则必须设计功能,将遍历cons 单元,在特定的顺序,例如,前序,顺序和后序的二进制树。

树列表的列表

让我们考虑由cons单元的树状结构,形成列出的清单如下:


((1 2) (3 4) (5 6)).

LISP树的功能

虽然多数时候仍需要根据其它特殊需求编写自己的树的功能,LISP提供了一些树的功能,您可以使用。

除了所有列表函数,以下是工作在树结构函数:

函数 描述
copy-tree x &optional vecp 它返回cons单元×树的副本。它递归地拷贝两款车和cdr方向。如果x不是一个cons单元,该函数只返回x不变。如果可选vecp参数为true,这个函数将向量(递归),以及cons单元。
tree-equal x y &key :test :test-not :key 它比较两棵树的cons单元。如果x和y是两个cons单元,他们的汽车和cdr是递归比较。如果x和y都不是一个cons单元,它们是由eql比较,或根据指定的测试。:key函数,如果指定,应用到这两个目录树中的元素。
subst new old tree &key :test :test-not :key 它可以代替出现给老项与新项,在树,这是cons单元的一棵树。
nsubst new old tree &key :test :test-not :key 它的工作原理与subst相同,但它破坏了原来的树。
sublis alist tree &key :test :test-not :key 它的工作原理就像subst,只不过它采用的新旧对关联表alist。树(应用后:key函数,如果有的话)中的每个元素,与alist的车相比;如果它匹配,它被替换为相应的cdr。
nsublis alist tree &key :test :test-not :key 它的工作原理与sublis相同,而是一个破坏性的版本。

示例 1

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:


(setq lst (list '(1 2) '(3  4)  '(5 6)))
(setq mylst (copy-list lst))
(setq tr (copy-tree lst))
(write lst)
(terpri)
(write mylst)
(terpri)
(write tr)

当执行代码,它返回以下结果:


((1  2)  (3  4)  (5  6))
((1  2)  (3  4)  (5  6)) 
((1  2)  (3  4)  (5  6))

示例 2

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:


(setq tr '((1 2 (3 4 5) ((7 8) (7 8 9)))))
(write tr)
(setq trs (subst 7 1 tr))
(terpri)
(write trs)

当执行代码,它返回以下结果:


((1  2  (3  4  5)  ((7  8)  (7  8  9))))  
((7  2  (3  4  5)  ((7  8)  (7  8  9))))

建立自己的树

让我们尝试建立自己的树,使用LISP列表功能。

首先,让我们创建一个包含一些数据的新节点

(defun make\-tree (item)  
"it creates a new node with item." 
(cons (cons item nil)  nil))

接下来让我们添加一个子节点插入到树它会采取两种树节点,并添加第二棵树作为第一个的子树。

(defun add\-child (tree child) 
(setf (car tree)
(append (car tree) child)) tree)

接下来让我们添加一个子节点插入到树这将需要一个树节点,并返回该节点第一个子节点,或nil,如果这个节点没有任何子节点。

(defun first\-child (tree) 
(if  (null tree) 
nil 
(cdr (car tree))))

这个函数会返回一个给定节点的下一个同级节点它需要一个树节点作为参数,并返回一个指向下一个同级节点,或者为nil,如果该节点没有任何。

(defun next\-sibling (tree) 
(cdr tree))

最后,我们需要一个函数来返回一个节点的信息

(defun data (tree)  
(car (car tree)))

示例

本示例使用上述功能

创建一个名为main.lisp一个新的源代码文件,并在其中输入如下代码:


(adsbygoogle = window.adsbygoogle || \[\]).push({});

(adsbygoogle = window.adsbygoogle || \[\]).push({});

(defun make\-tree (item)  "it creates a new node with item."  
(cons (cons item nil)  nil))  (defun first\-child (tree) 
(if  (null tree)  nil  (cdr (car tree))))  (defun next\-sibling (tree) 
(cdr tree))  (defun data (tree)  (car (car tree)))  (defun add\-child (tree child) 
(setf (car tree)  (append (car tree) child)) tree)  
(setq tr '((1 2 (3 4 5) ((7 8) (7 8 9)))))
(setq mytree (make-tree 10))
(write (data mytree))
(terpri)
(write (first-child tr))
(terpri)
(setq newtree (add-child tr mytree))
(terpri)
(write newtree)

当执行代码,它返回以下结果:

10  
(2  (3  4  5) ((7  8)  (7  8  9))) 
((1  2  (3  4  5)  ((7  8)  (7  8  9))  (10)))
由JSRUN为你提供的Lisp在线运行、在线编译工具
        JSRUN提供的Lisp 在线运行,Lisp 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout