首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你能在lisp中使用哈希表吗?

在Lisp中,可以使用哈希表来存储键值对。哈希表是一种高效的数据结构,可以快速地进行插入、删除和查找操作。Lisp中的哈希表通常使用make-hash-table函数来创建,然后使用gethashremhashmaphash等函数来操作哈希表。

以下是一个简单的示例,演示如何在Lisp中使用哈希表:

代码语言:lisp
复制
(defun create-hash-table ()
  (let ((hash-table (make-hash-table :test 'equal)))
    (setf (gethash "apple" hash-table) "fruit")
    (setf (gethash "carrot" hash-table) "vegetable")
    (setf (gethash "banana" hash-table) "fruit")
    hash-table))

(defun print-hash-table (hash-table)
  (maphash #'(lambda (key value)
               (format t "~a: ~a~%" key value))
           hash-table))

(let ((hash-table (create-hash-table)))
  (print-hash-table hash-table)
  (remhash "apple" hash-table)
  (print-hash-table hash-table))

在这个示例中,我们首先定义了一个create-hash-table函数,它创建了一个哈希表,并向其中插入了一些键值对。然后,我们定义了一个print-hash-table函数,它使用maphash函数遍历哈希表并打印每个键值对。最后,我们创建了一个哈希表,并使用print-hash-table函数打印它的内容,然后使用remhash函数删除了一个键值对,并再次打印哈希表的内容。

Lisp中的哈希表非常灵活,可以使用不同的哈希函数和测试函数来创建不同类型的哈希表。此外,Lisp中的哈希表还可以与其他数据结构(如列表、向量和二叉树)结合使用,以实现更复杂的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

工作使用到 grpcurl

在平时的开发过程,我们一般是 http 接口对外, grpc 接口对内部微服务 相信对于如何去请求 http 接口,大家都很熟悉了 如果是 inux 里面使用 curl 命令 在 windows 里面我们可以使用...postman 来请求接口 如果对于一个云上开发的接口的话,我们可能会使用 apifox 来进行请求 那么对于 grpc 服务端提供的接口,我们一般会如何去请求这些接口来自测呢 Windows 里面我们可以使用...bloomRPC 工具 Linux 里面我们可以使用 grpcurl 工具 DEMO 关于 grpc 的基本知识,感兴趣的可以查看历史文章: gRPC介绍 gRPC 客户端调用服务端需要连接池?.../grpcurl go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest 然后在我们上述的 rpc_services.go 代码,...注册 reflection 效果验证 这个时候,咱们将上述的 rpc_tool_demo 整个项目放到 linux 中进行运行,启动服务端,当然我的 demo grpc 服务端监听的是 8888

21730

知道在springboot如何使用WebSocket

想要实现浏览器的主动推送有两种主流实现方式: 轮询:缺点很多,但是实现简单 websocket:在浏览器和服务器之间建立 tcp 连接,实现全双工通信   springboot 使用 websocket...注意:如下都是针对使用 springboot 内置容器 二、实现 1、依赖引入   要使用 websocket 关键是@ServerEndpoint这个注解,该注解是 javaee 标准的注解,tomcat7...及以上已经实现了,如果使用传统方法将 war 包部署到 tomcat ,只需要引入如下 javaee 标准依赖即可: javax...serverEndpointExporter(){ return new ServerEndpointExporter(); } } 3、申明 endpoint   建立MyWebSocket.java类,在该类处理...websocket 逻辑 @ServerEndpoint(value = "/websocket") //接受websocket请求路径 @Component //注册到spring容器 public

2.7K40

知道脑机接口中的后门攻击?它真的有可能在现实实现

我们之前一些工作使用逃逸攻击[1,2],对测试的EEG样本加入人眼无法察觉的微小的扰动,能够让模型对扰动后的EEG样本进行错误的分类,或者控制回归模型的预测值。...这些工作在理论上讨论脑机接口的安全性有重要的意义,然而这些攻击在实际其实是很难实现的,主要因为: 这些攻击需要在EEG信号预处理和机器学习模型之间插入一个攻击模块去添加对抗扰动,而在实际系统这两个模块往往被集成在同一块芯片中...这些方法生成的对抗扰动是很复杂的,特别地,不同通道需要生成和添加不同的复杂对抗扰动噪声,这在实际是很难操作的。...为了使攻击能够更好地在实际实现,我们选择了特定的窄周期脉冲作为“后门”的钥匙,特别地,窄周期脉冲可以在EEG信号采集的时候通过外界干扰加入到EEG。...我们的攻击主要克服了以下几个挑战,使得其更容易在实际实施: 进行攻击的“后门”钥匙是很简单的,包括两点,生成的模式是简单的,以及在实际脑机接口系统中将钥匙加入到EEG数据是简单的; 攻击使用的钥匙对于不同的

99340

【C++】使用哈希模拟实现STL的unordered_set和unordered_map

前言 前面的文章我们学习了unordered_set和unordered_map的使用以及哈希,并且我们提到了unordered_set和unordered_map的底层结构其实就是哈希。...所以这里有些地方我们就不会特别清楚的去说明了,如果某些地方大家看的不能太明白,建议先搞懂这篇文章——使用红黑树模拟实现STL的map与set 这里面我们是讲的比较清楚的。...一.哈希模板改造+封装unordered_set和unordered_map 首先可以带大家再来简单看一下库里面的哈希的源码: 我们来看一下这几个模板参数 第一个value就决定了哈希表里面每个...然后哈希的结构: 之前Node里面是KV,现在由T决定结点里面存什么 那下面相关的地方都要改一下 那大家看这个地方是不是就需要使用keyOfT那个仿函数了 因为data有可能是单独一个...所以,对于哈希的迭代器来说,还是结点指针的封装,但是还要包含另一个成员即哈希。 因为我们遍历哈希去依次找桶。

10910

知道在 JavaScript 也能使用媒体查询

当你想到媒体查询时,首先想到的是什么?...但知道我们对JavaScript也有媒体查询? 我们可能在JavaScript并不经常看到它们,但在过去的几年里,我发现它们对于创建响应式插件(如滑块)很有帮助。...在JavaScript处理媒体查询与在CSS处理媒体查询是非常不同的,尽管概念是相似的:匹配一些条件并应用一些东西。...Using matchMedia() 为了确定文档是否与JavaScript的媒体查询字符串匹配,我们使用matchMedia()方法。...使用媒体查询,我将检查用户是否处于横向模式。这种方法在开发HTML5游戏时很常见,在移动设备上观看效果最好: 结论 这就是JavaScript的媒体查询!

3.7K30

知道Linux系统find命令的使用方法

今天小编带给大家的文章是关于Linux系统find命令的使用方法。...熟悉Linux的小伙伴可能会对这个命令有所了解,但小编相信很多小伙伴对它没有深入的了解,下面小编就来和大家谈一谈关于Linux系统的find命令的使用方法。...find命令特点:文件查找,实时查找,速度略慢,精确匹配 使用格式:# find [options] [查找路径] [查找条件] [处理动作] 查找路径:默认为当前目录 查找条件:默认为查找指定路径下的所有文件...个月内曾被访问过的文件: # find /tmp ( -nouser -o -nogroup ) -a -atime -30 //括号内侧的两端都需要加空格 组合条件: -a:与,同时满足,如果组合条件只有

1.4K10

真正了解 Java 的 Date 类?以及如何正确使用

Date类简介Java的Date类是用来表示日期和时间的类。它是在Java 1.0版本引入的,目前已经被Java 8的新API所取代。该类可以将时间转化为毫秒数,或将毫秒数转换为时间。...具体功能包括:构造函数:有两个构造函数,一个使用当前时间创建Date对象,另一个使用指定的时间创建Date对象。静态方法now():返回当前时间的Date对象。...但需要注意的是,Date类在Java 8及以后版本已经被弃用,建议使用新的时间日期API。...在主方法,首先通过Date类获取当前时间(date),然后使用SimpleDateFormat类将日期格式化为指定格式的字符串(formatter.format(date))。...同时该类也使用了Java的字符串类(String)和流类(System.out)。全文小结本文介绍了Java的Date类,包括其简介、源代码解析、应用场景、优缺点分析、类代码方法介绍以及测试用例。

48773

Clojure与LispClojure与Lisp

开展一个处理软件系统来实现McCarthy提出建议采纳者程序的工作,尔后推动了处理语言LISP的诞生。...自2000年起,LISP共享者合力支援的自由开源社区逐渐形成,致力于LISP后续发展。 当前最新潮的编程语言,只是实现了他在1958年的设想而已。 这怎么可能呢?计算机技术的发展,不是日新月异?...7 符号(symbol)类型 符号实际上是一种指针,指向储存在哈希的字符串。...8 代码使用符号和常量组成的树形表示法(notation) 9 无论什么时候,整个语言都是可用的 Lisp并不真正区分读取期、编译期和运行期。...思想8和思想9,意味着可以写出一种能够自己编程的程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用宏。 术语"宏"在Lisp语言中,与其他语言中的意思不一样。

1.8K30

Lisp的本质(The Nature of Lisp)学习思考

我把我的想法说给Lisp程序员听, 遭到了他们的反对。"这些东西本身当然不可能用熟悉的知识来解释, 这些概念完全与众不同, 不可能在别人已有的经验里找到类似的东西",可是我认为这些都是遁词。...这样做用处不大(知道为甚么?), 但是真的很酷。 再看一回我们刚才说的Task任务。祝贺呀, 在看Lisp代码!!! 我说什么? 一点都不像Lisp? 没关系, 我们再给它收拾一下。...的任务。...同样的, 比较一下以前所做的工作, 就会明白Lisp带来的好处。 接下来学习Lisp就像战争争夺山头。...学会Lisp也可能意味着明天可能会被解雇, 因为总是强调, 如果公司所有软件都用Lisp写, 公司将会如何卓越, 而这些话的同事会听烦的。Lisp值得努力学习?

1.7K60

为什么Lisp语言如此先进?(译文)

符号实际上是一种指针,指向储存在哈希的字符串。所以,比较两个符号是否相等,只要看它们的指针是否一样就行了,不用逐个字符地比较。   8....就我所知,宏(采用Lisp语言的定义)目前仍然是Lisp独有的。一个原因是为了使用宏,大概不得不让的语言看上去像Lisp一样古怪。...六、 就算Lisp确实代表了目前主流编程语言不断靠近的一个方向,这是否意味着就应该用它编程呢? 如果使用一种不那么强大的语言,又会有多少损失呢?有时不采用最尖端的技术,不也是一种明智的选择?...ITA的软件,不仅使用Lisp语言,还同时大量使用C和C++,所以这是他们的经验谈。 根据上面的这个数字,如果与ITA竞争,而且使用C语言开发软件,那么ITA的开发速度将比你快20倍。...如果需要一年时间实现某个功能,它只需要不到三星期。反过来说,如果某个新功能,它开发了三个月,那么需要五年才能做出来。 知道?上面的对比,还只是考虑到最好的情况。

1.2K60

2017最受欢迎人工智能编程语言:Python第一,R并未上榜

Mind:它使用矩阵实现来处理训练数据。可以完全自定义网络拓扑和上传/下载已学习的minds。 简而言之,不必重新造轮子,只需确定AI要做什么类型的“learning”。 5. Prolog ?...实际上,Prolog的一切都是事实或规则。它允许查询数据库,即使已具有上述这些事实和规则。 Prolog支持开发图形用户界面,管理和网络应用程序。它非常适合语音控制系统等项目。 4....虽然近年来Lisp没有被很多人使用,但该语言既灵活又具有可扩展性。 Lisp最初是针对Lambda演算开发的,诞生以来发生了很多演变。...Lisp用于开发人工智能软件,因为它支持使用符号计算的程序的实现。符号表达和计算是Lisp擅长的。...此外,Lisp由一个宏系统,可以生成高效代码的开发良好的编译器,以及一组集合类型,包括哈希和动态大小列表组成。

2.3K60

面试官:gofor-range使用?这几个问题能解释一下原因

前言 读者A:不会吧,阿Sir,这周这么高产~~~ asong:当然啦,为了你们,一切都值得~~~ 读者B:净放臭屁屁,就戏多~~~ asong:凶人家,坏坏~~~ 哈哈哈,戏太足了奥。...今天给大家分享的是go的range,这个我们在实际开发,是经常使用,但是他有一个坑,使用不好,是要被开除的。但是,今天恰好看了我这一篇文章,就避免了这个坑,开心嘛~~~。...来看一段代码: func main() { v := []int{1, 2, 3} for i := range v { v = append(v, i) } } 这一段代码会造成死循环?...不知道的range用法 delete 没看错,删除,在range迭代时,可以删除map的数据,第一次见到这么使用的,我刚听到确实不太相信,所以我就去查了一下官方文档,确实有这个写法: for key...如果在迭代过程删除了尚未到达的映射条目,则不会生成相应的迭代值。 如果映射条目是在迭代过程创建的,则该条目可能在迭代过程中产生或可以被跳过。

34730

Clojure 开发那些事

其实也好理解,Lisp 语言诞生这么久了,为什么一直那么小众?原因就在于 Lisp 语言过于强大,不必也不可能像 Java 那么普及。能要求每个人都能为 CTO ?...[1 2 "buckle my shoe"] ;; 数组 {:ace 1, :deuce 2, "trey" 3} ;; 哈希 #{:a :b :c}...;; 集合 Clojure 基本的数据结构可以参考其官方网站上到资料,我发现一个特点,Lisp 语言的英文介绍往往过于精炼,不适合初学者直接阅读,为了夯实基础,还是建议大家找本书来看,看书的好处是不仅仅知道某个知识点...使用比较简单,通过 Intellj 插件管理器安装后即可使用,第一次使用时需要设置下快捷键类型 Emacs + Cider 作为一门 Lisp 方言,怎么能没有一个好的 Emacs mode 呢?...,最好带着 issue 里面的问题去看代码,说不定就从使用者变成了开发者呢,我第一个尝试给了 http-clj。

1.5K20

不管是嵌套 XML,还是 Lisp 嵌套括号,还是 XXX 的 Map 数据结构,一切都是树形结构——映射。Lisp的本质(The Natur

我把我的想法说给Lisp程序员听, 遭到了他们的反对。"这些东西本身当然不可能用熟悉的知识来解释, 这些概念完全与众不同, 不可能在别人已有的经验里找到类似的东西",可是我认为这些都是遁词。...这样做用处不大(知道为甚么?), 但是真的很酷。 再看一回我们刚才说的Task任务。祝贺呀, 在看Lisp代码!!! 我说什么? 一点都不像 Lisp? 没关系, 我们再给它收拾一下。...的任务。...同样的, 比较一下以前所做的工作, 就会明白Lisp带来的好处。 接下来 学习Lisp就像战争争夺山头。...学会Lisp也可能意味着明天可能会被解雇, 因为总是 强调, 如果公司所有软件都用Lisp写, 公司将会如何卓越, 而这些话的同事会听烦的。 Lisp值得努力学习?

1.3K20

什么是元编程?

“还有,如果把CSV文件看成数据库的,代码生成器自动生成的EmployeeParser不就相当于DAO?Employeeb 不就是和数据映射的Domain对象?...“其实吧,这个Employee的类没有必要在编译期存在,如果能在运行时动态地生成就行了。” 运行期动态生成? 张大胖有点懵。...“对于Java语言来说,运行期在内存动态生成一个Class,还是有难度的,需要透彻理解Java Class的文件格式,还需要在底层需要用ASM这样的东西去操作Java字节码。”...Bill看到张大胖发呆的样子,说道:”经过上述处理,内存创建了一个类,如果把它的源码展示一下,就明白了。”...有人甚至说,LISP根本不是编程语言,它是编程元语言,专门为了生成程序而生。” 张大胖听得云里雾里,黯然道:“不知道在说什么,太抽象了!等我学学LISP以后再回来和你讨论吧。”

86240

单线程的Redis,有哪些慢动作?

前言 现在一提到Redis的第一反应就是快、单线程,但是Redis真的快?真的是单线程有没有深入了解一下Redis,看看它的底层有哪些”慢动作”呢? 为什么 Redis 这么火?...另一方面就归功于它的数据结构了,知道Redis有哪些数据结构?...为了实现键和值的快速访问,Redis使用的是哈希来存放键,使用哈希桶存放值。 一个哈希其实就是一个数组,数组的每个元素称之为哈希桶。...rehash 也就是增加现有的哈希桶数量,让逐渐增多的entry元素能在更多的桶之间分散保存,减少单个桶的元素数量,从而减少单个桶的冲突。...为了使rehash操作更高效,Redis 默认使用了两个全局哈希哈希1和哈希2。一开始,当你刚插入数据时,默认使用哈希1,此时的哈希2并没有被分配空间。

10120

LeetCode 448.找到所有数组消失的数字 - JavaScript

找到所有在 [1, n] 范围之间没有出现在数组的数字。 您能在使用额外空间且时间复杂度为 O(n)的情况下完成这个任务? 可以假定返回的数组不算在额外空间内。...解法 1:哈希 算法流程如下: 准备一个哈希 map,结构是number-boolean 遍历原数组,将每个元素在 map 的值设为 true 从 1 到 n,检查map[i]是否为 true。...若是 true,说明出现在原数组;否则是没出现过。 这个过程需要为哈希开辟 O(N)空间,时间复杂度是 O(N)。...map[i]) res.push(i); } return res; }; 解法 2: 原地哈希 和Leetcode 442.数组重复的数据的解法相似:使用符号来标记元素是否出现过。...不需要开辟空间给哈希,时间复杂度是 O(N)。

94020

【leetcode速通java版】06——赎金信、三数之和

前 言 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:代码随想录leetcode速通训练营java版本 文章简介:哈希理论,leetcodeT383...杂志字符串的每个字符只能在赎金信字符串中使用一次。) 分析这个题目和242.有效的字母异位词是一样的,学会了吗?...Solution { public boolean canConstruct(String ransomNote, String magazine) { // 维护一个字母的哈希即可...注意: 答案不可以包含重复的三元组。 思路: 看上去和两数之和、四数之和是同一个类型,先上去干它。 但是不可以重复这个条件给我们挖了很多坑,需要好好考虑。 先用哈希莽下。...需要 但知道应该写在哪?如果按照下面这样写。

13020

【LeetCode 137.只出现一次的数字II】三种解法:哈希、数学技巧和位运算(JavaScript实现)

说明:的算法应该具有线性时间复杂度。 可以不使用额外空间来实现? 提示:可以和《【LeetCode 136.只出现一次的数字 I】巧用异或运算》 类比。...解法 1: 最直观的哈希 解决思路很简单,直接遍历一边数组,然后统计每个数字的出现次数,存入哈希。 然后再遍历哈希的记录,返回出现次数为 1 的数字。...num, times] of map.entries()) { if (times === 1) return num; } }; 但是,这种解法利用了额外的O(N)空间来开辟哈希...num of nums) { sum2 += num; } return Math.floor((3 * sum1 - sum2) / 2); }; 这种方法还是额外使用了...能在不开辟额外空间的情况下,完成要求。 按照位数(最高 32 位)去考虑,这种方法的关键就是找到对于只出现一次的数字,它的哪些二进制位是 1。

67920
领券