elisp 从简单实例开始.
elisp 从简单实例开始.
我们怎样用elisp 与电脑交互,先从简单实例开始, 逐渐掌握它的几个对象.
 与电脑交互,总要有输入,输出,先看两个简单例子. 输入从minibuffer,输出可以是minibuffer 或者缓冲区.
 一: 从minibuffer 中输入, 在指定缓冲中插入文字(insert)x
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; 函数1:
 ;; 定义一个函数 greet_you_from_me.
 ;; 其输入参数是me, coder的名字,从函数调用传人(熟悉一下interactive调用参数)
 ;; 从minibuffer 中读入你的名字
 ;; 打开一个buffer 叫 *test*
 ;; 在buffer中显示字符串, 字符串为: 你好,xxx, 我是yyy.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (defun greet_you_from_me (me)
   (interactive "sme's name:") ; interactive 的调用参数是s,C-h f 查找其它说明
 (let ((your-name (read-from-minibuffer "Enter your name: "))); let 语句块,从minibuffer读字符串,付给变量your-name
 (switch-to-buffer-other-window "*test*"); 开启新缓冲,新窗口
 (erase-buffer); 清缓冲区
 (insert (format "Hello %s!\n\nI am %s." your-name me)) ; 构建文字,插入文字
 (other-window 1))); 跳回原来的窗口
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; 函数2:
 ;; 编写一个函数,在当前缓冲中输入一行代码,例如:
 int pArray = malloc( 5 * sizeof(int))
 其中类型int 是可变的, pArray 是可变的, 5 是可变的,都要从minibuffer 输入
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun my_malloc()
   (interactive)
   (let ((name (read-string "name:"))
   (size (read-string "size:"));; 为简单期间全部使用string 类型
   (type (read-string "type:")))
     (switch-to-buffer-other-window "*test*")
     (erase-buffer)
     (insert (format "%s %s = malloc( %s * sizeof(%s));" type name size type))
     (other-window 1)))
 函数列表:
 (interactive)
 (insert)
 (format)
 (read-string)
 (read-from-minibuffer)
 (switch-to-buffer-other-window)
 (erase-buffer)
 (other-window)
 (defun)
 (let)
 二: 数学运算
 阶乘运算, 需要从minibuffer 输入一个正整数,计算其阶乘
 (defun factorial (num)
   (interactive "ninput a num:")
   (let ((total 1))
   (while (> num 0)
     (setq total (* total num))
     (setq num (- num 1)))
   (message "total is %d" total)))
 ;;函数列表
 (while)
 (>)
 (-)
 (message)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 三. 在文件中查找关键字 search-forward (向前查找)
 假定有一个文件,名称为"world.txt",如下:
 $cat world.txt
 **@#一个兔子洞#@********@#又
 一个兔子洞#@****************
 **** @# 这也是一个兔子洞 #@*
假想在这片土地上有很多兔子洞,其中@#是入口,#@是出口
 现在要写一个elisp 函数,
 找出所有关键字@#, #@的位置.
 代码如下:
 (defun test-search-forward ()
 (setq hole-entrance "@#")
 (setq hole-exit "#@")
 (progn
   (find-file "world.txt")
   (make-local-variable 'hole-entrance)
   (make-local-variable 'hole-exit)
   (goto-char (point-min))
   (let (@extrance @exit)
     (while (progn
              (setq @entrance (search-forward hole-entrance nil t))
              (setq @exit (search-forward hole-exit nil t)))
       (print (format "兔子洞 (%d %d)" @entrance @exit))))))
(test-search-forward)
 函数列表:
 (find-file)
 (make-local-variable)
 (goto-char)
 (search-forward)
 (format)
 (print)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 四. 使用list , mapcar 用法(参数为函数), 查找与替换,修改文本属性,正则查找
  
(defun hello (name)
             (insert (format "Hello %s!\n" name)))
(progn
 ;; 我们将一些名字存到列表中:
 (setq list-of-names '("张三" "李四" "王五"))
 ;; 用 `push'把名字添加到列表的开头:
 (push "赵六" list-of-names)
 (switch-to-buffer-other-window "*test*")
 (erase-buffer)
 ;; 我们来对`list-of-names'列表中的每一个元素都使用hello函数:
 (mapcar 'hello list-of-names)
;; 记得我们之前定义的 `hello' 函数吗? 这个函数接受一个参数,名字。
 ;; `mapcar' 调用 `hello', 并将`list-of-names'作为参数先后传给`hello'
 (other-window 1)
 )
;; 现在我们对显示的buffer中的内容进行一些更改:
 ;; 查找与替换功能
 (defun replace-hello-by-bonjour ()
     (switch-to-buffer-other-window "*test*")
     (goto-char (point-min))
 ;;    (while (search-forward "Hello")
     (while (search-forward "Hello" nil t)      
       (replace-match "Bonjour"))
     (other-window 1))
;; (goto-char (point-min)) 将光标移到buffer的开始
 ;; (search-forward "Hello") 查找字符串"Hello"
 ;; (while x y) 当x返回某个值时执行y这个s式
 ;; 当x返回`nil' (空), 退出循环
(replace-hello-by-bonjour)
;; 你会看到所有在*test* buffer中出现的"Hello"字样都被换成了"Bonjour"
 ;; 你也会得到以下错误提示: "Search failed: Hello".
 ;; 如果要避免这个错误, 你需要告诉 `search-forward' 这个命令是否在
 ;; buffer的某个地方停止查找, 并且在什么都没找到时是否应该不给出错误提示
 ;; (search-forward "Hello" nil t) 可以达到这个要求:
 ;; `nil' 参数的意思是 : 查找并不限于某个范围内
 ;; `t' 参数的意思是: 当什么都没找到时,不给出错误提示
 ;; 在下面的函数中,我们用到了s式,并且不给出任何错误提示:
;; 给这些名字上个色:
 (defun boldify-names ()
     (switch-to-buffer-other-window "*test*")
     (goto-char (point-min))
     (while (re-search-forward "Bonjour \\(.+\\)!" nil t)
       (add-text-properties (match-beginning 1)
                            (match-end 1)
                            (list 'face 'bold)))
     (other-window 1))
(boldify-names)
;; 这个函数使用了 `re-search-forward': 正则表达式查找
 ;; 和查找一个字符串不同,你用这个命令可以查找一个模式,即正则表达式
 ;; 正则表达式 "Bonjour \\(.+\\)!" 的意思是:
 ;; 字符串 "Bonjour ", 之后跟着
 ;; 一组           |  \\( ... \\) 结构
 ;; 任意字符       |  . 的含义
 ;; 有可能重复的   |  + 的含义
 ;; 之后跟着 "!" 这个字符串
 ;; `add-text-properties' 可以添加文字属性, 比如文字样式
 ;; 好的,我们成功了!
 函数列表
 (mapcar)
 (goto-char)
 (search-forward)
 (re-search-forward)
 (add-text-properties)
 (match-beginning)
 (match-end)
相关文章:
elisp 从简单实例开始.
elisp 从简单实例开始. 我们怎样用elisp 与电脑交互,先从简单实例开始, 逐渐掌握它的几个对象. 与电脑交互,总要有输入,输出,先看两个简单例子. 输入从minibuffer,输出可以是minibuffer 或者缓冲区. 一: 从minibuffer 中输入, 在指定缓冲中插入文字(insert)x ;;;;;;;;;;;;;;;;…...
ThreeJS加载geojson数据实现3D地图
ThreeJS加载geojson数据实现3D地图,主要通过借助geojson地理信息数据转摩托尔坐标实现,中间借助了d3.js的地图处理方法,最后通过threejs渲染到页面上: 通过平台获取GeoJson格式的行政区域借助d3的方法,将坐标系转摩托尔坐标利用ThreeJS中的自定义Shape,绘制地图利用Three…...
深度学习无监督磁共振重建方法调研(二)
深度学习无监督磁共振重建方法调研(二)Self-supervised learning of physics-guided reconstruction neural networks without fully sampled reference data(Magnetic Resonance in Medicine 2020)模型设计实验结果PARCEL: Physi…...
蓝桥杯入门即劝退(十九)两两交换链表
-----持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章对你有所帮助-------- 一、题目描述 给你一个链表,两两交换其中…...
【Java 面试合集】接口以及抽象类
接口以及抽象类 1. 概述 嗨,【Java 面试合集】又来了,今天给大家分享的内容是接口以及抽象类。一看这个概念很多人都知道,但是方方面面的细节不一定知道哦,今天我们就从方方面面的细节来讲讲 2. 相同点: 都是上层的抽…...
LeetCode 2391. 收集垃圾的最少总时间
给你一个下标从 0 开始的字符串数组 garbage ,其中 garbage[i] 表示第 i 个房子的垃圾集合。garbage[i] 只包含字符 ‘M’ ,‘P’ 和 ‘G’ ,但可能包含多个相同字符,每个字符分别表示一单位的金属、纸和玻璃。垃圾车收拾 一 单位…...
【PMP考试最新解读】第七版《PMBOK》应该如何备考?(含最新资料)
PMP新版大纲加入了ACP敏捷管理的内容,而且还不少,敏捷混合题型占到了 50%,前不久官方也发了通知8月启用第七版《PMBOK》,大家都觉得考试难度提升了,我从新考纲考完下来,最开始也被折磨过一段时间࿰…...
金三银四软件测试面试如何拿捏面试官?【接口测试篇】
九、接口测试 9.1 接口测试怎么测 (jmeter版本) 首先开发会给我们一个接口文档,我们根据开发给的接口文档,进行测试点的分析,主要是考虑正常场景与异常场景,正常场景,条件的组合,…...
Hive基操
数据交换 //hive导出到hdfs /outstudentpt 目录 0: jdbc:hive2://guo146:10000> export table student_pt to /outstudentpt; //从hdfs导入到hive 0: jdbc:hive2://guo146:10000> import table studentpt from /outstudentpt; 数据排序 Order by会对所给的全部数据进行…...
CSS(配合html的网页编程)
续上一篇博客,CSS是前端三大将中其中的一位,主要负责前端的皮,也就是负责html的装饰.一、基本语法规则也就是:选择器若干属性声明(选中一个元素然然后进行属性声明)CSS代码是放在style标签中,它可以放在head中也可以放在body中 ,可以放到代码的任意位置.color也就是设置想要输入…...
MATLAB/Simulink 通信原理及仿真学习(三)
文章目录MATLAB/Simulink 通信原理及仿真学习(三)3. 通信信号与系统分析3.1 离散信号和系统3.1.1 离散信号3.1.2 离散时间信号3.1.3 信号的能量和功率3.2 傅里叶(Fourier)分析3.2.1 连续时间信号的Fourier变换3.2.2 离散时间信号的…...
如何解决过拟合与欠拟合,及理解k折交叉验证
模型欠拟合:在训练集以及测试集上同时具有较⾼的误差,此时模型的偏差较⼤; 模型过拟合:在训练集上具有较低的误差,在测试集上具有较⾼的误差,此时模型的⽅差较⼤。 如何解决⽋拟合: 添加其他特…...
Kotlin 34. recyclerView 案例:显示列表
Kotlin 案例1. recyclerView:显示列表 这里,我们将通过几个案例来介绍如何使用recyclerView。RecyclerView 是 ListView 的高级版本。 当我们有很长的项目列表需要显示的时候,我们就可以使用 RecyclerView。 它具有重用其视图的能力。 在 Re…...
JAVA练习58-汉明距离、颠倒二进制位
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目1-汉明距离 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 二、题目2-颠倒二进制位 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示…...
优炫数据库百城巡展,成都首站圆满举行
2月17日,由四川省大数据发展研究会、北京优炫软件股份有限公司联合举办的“首届四川省推进信息技术应用创新产业服务研讨会暨优炫数据库百城巡展成都首站隆重举行。此次活动是优炫数据库百城巡展的起点站,更是国产数据库市场美好乐章的一次强力鸣奏。 来…...
【20230210】二叉树小结
二叉树的种类二叉树的主要形式:满二叉树和完全二叉树。满二叉树深度为k,有2^k-1个节点的二叉树完全二叉树除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。二叉搜索树…...
openCV—图像入门(python)
目录 目标 使用OpenCV 显示图像 写入图像 总结使用 使用Matplotlib 注:图片后续补充 目标 在这里,你将了解如何使用Python编程语言中的OpenCV库,实现读取、显示和保存图像的功能。具体来说,你将学习以下函数的用法…...
关于一个Java程序员马上要笔试了,临时抱佛脚,一晚上恶补45道简单SQL题,希望笔试能通过
MySQL随手练 / DQL篇 MySQL随手练——DQL篇 题目网盘下载:https://pan.baidu.com/s/1Ky-RJRNyfvlEJldNL_yQEQ?pwdlana 初始数据 表 course 表 student 表 teacher 表 sc 答案 :) —> :( —> :) 1. 查询 "01"课程比"02"课程成绩高的学生…...
PyTorch深度学习实战
本专栏分为两大部分,专栏内容如下: 第1部分 探讨PyTorch与其他深度学习框架的区别。 如何在PyTorch Hub中下载和运行模型。 PyTorch的基本构建组件——张量 展示不同类型的数据如何被表示为张量,以及深度学习模型期望构造什么样的张量。 梯度…...
leetcode 1011. Capacity To Ship Packages Within D Days(D天内运送包裹的容量)
数组的每个元素代表每个货物的重量,注意这个货物是有先后顺序的,先来的要先运输,所以不能改变这些元素的顺序。 要days天内把这些货物全部运输出去,问所需船的最小载重量。 思路: 数组内数字顺序不能变,就…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
