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元,更强的硬件、价格全网最低。

点击购买 固件广场

哈希表

哈希表的数据结构表示是基于键哈希代码进行组织键 - 值对的集合。它使用键来访问集合中的元素。

哈希表是用于需要使用一键访问元素,可以找出一个有用的键值。在哈希表中每个项目都有一个键/值对。键是用于访问该集合中的项。

LISP中创建哈希表

在Common Lisp中表是一种通用的集合。可以随心所欲的使用对象作为一个键或索引。

当在一个哈希表中存储的值,设置键 - 值对,并将其存储在该键。以后可以从哈希表中使用相同的key检索值。每个键映射到一个单一的值,虽然可以在一键保存新值。

哈希表,在LISP,可分为三种类型,基于这样的键所不能compared - eq, eql 或 equal。如果哈希表进行哈希处理的LISP对象然后将钥匙与eq或eql比较。如果在树结构中的哈希表散列,那么它会使用相等比较。

make-hash-table函数用于创建一个哈希表。此函数语法的是:


make\-hash\-table &key :test :size :rehash\-size :rehash\-threshold

那么

  • key 参数提供了键。

  • :test 参数确定键如何比较- 它应该有一个三个值 #'eq, #'eql 或 #'equal或三个符号式之一,eq, eql, 或 equal。如果未指定,则使用eql。

  • :size 参数设置哈希表的初始大小。这应该是一个大于零的整数。

  • :rehash-size 参数指定用多少提高哈希表的大小时已满。这可以是一个大于零的整数,这是添加的项的数量,或者它可以是一个浮点数大于1,这是新的尺寸,以旧的大小的比率。该参数的默认值是实现相关。

  • :rehash-threshold 参数指定的哈希表如何能充分得到之前,它必须成长。这可以是一个大于零的整数,并且小于 :rehash-size(在这种情况下,每当该表是生长其将被缩小),或者它可以是零和1之间的浮点数此默认值。参数是实现相关的。

也可以调用 make-hash-table函数的无参数形式。

正在从项和新增项到哈希表

gethash函数通过搜索其键检索从哈希表中的项。如果没有找到键,那么它返回nil。

它的语法如下:


gethash key hash\-table &optional default

那么:

  • key: 是相关联的键

  • hash-table: 是要被搜索的哈希表

  • default: 要返回的值,如果没有找到该入口,它是nil,如果不是指定的值。

gethash函数实际上返回两个值,第二个是一个谓词值,如果发现一个项则是true;如果被发现没有项目返回false。

对于将项添加到哈希表中,可以使用setf函数及gethash函数。

示例

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


(setq empList (make\-hash\-table))
(setf (gethash '001 empList) '(Charlie  Brown)) 
(setf (gethash '002 empList) '(Freddie  Seal)) 
(write (gethash '001 empList)) 
(terpri)
(write (gethash '002 empList))

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


(CHARLIE BROWN)  (FREDDIE SEAL)

删除条目

remhash函数删除在哈希表中的特定键的任何项。如果是一个谓词,那么它为true,如果没有有一个项则为false。

其函数语法:


remhash key hash\-table

示例

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


(setq empList (make\-hash\-table)) 
(setf (gethash '001 empList) '(Charlie  Brown)) 
(setf (gethash '002 empList) '(Freddie  Seal)) 
(setf (gethash '003 empList) '(Mark  Mongoose)) 
(write (gethash '001 empList)) 
(terpri)
(write (gethash '002 empList))  
(terpri)  
(write (gethash '003 empList))  
(remhash '003 empList)  
(terpri) 
(write (gethash '003 empList))

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


(CHARLIE BROWN)  
(FREDDIE SEAL)
(MARK MONGOOSE)
NIL

maphash函数

maphash函数允许在每个键 - 值对应用一个指定的函数在一个哈希表。

它有两个参数 - 函数和哈希表,并调用该函数一次为每个键/值对的哈希表中。

示例

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


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

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

(setq empList (make\-hash\-table))  
(setf (gethash '001 empList) '(Charlie  Brown))  
(setf (gethash '002 empList) '(Freddie  Seal))  
(setf (gethash '003 empList) '(Mark  Mongoose)) 
(maphash #'(lambda (k v) (format t "~a => ~a~%" k v)) empList)

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


3  \=>  (MARK MONGOOSE)  
2  \=>  (FREDDIE SEAL) 
1  \=>  (CHARLIE BROWN)
由JSRUN为你提供的Lisp在线运行、在线编译工具
        JSRUN提供的Lisp 在线运行,Lisp 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout