lisp

《学习 GNU EMACS 第二版》学习笔记 (一) 如何建立自己的LISP开发库

丶灬走出姿态 提交于 2020-02-29 21:54:50
《学习 GNU EMACS 第二版》学习笔记 (一) 如何建立自己的LISP开发库 P.458 当你在做了一定数量的LISP程序开发之后,你已经积累了一部分自己写的LISP函数,也许你很想把它们打包到一起做为一个开发包来使用,这样可以很方便地随时调用(当然,你可以把一些函数放在 .emacs 文件中加载,但是一旦数量较多这么做就不太方便了)。 需要2个步骤: 1、创建一个目录,把你的 lisp 代码拷贝到这个目录下; 2、让EMACS知道有这个目录,这样当你试图加载某个程序包时,EMACS才能知道在哪里去找。EMACS把这类目录都记录在全局变量 load-path 中,该变量的值是一个由字符串元素组成的列表,每个字符串是一个目录名。 假设你的LISP代码的目录名为“~mycode/lisp“,那么需要把如下语句添加到 .emacs 文件中: (setq load-path (append load-path (list "~mycoe/lisp"))) 该命令执行后,当你试图加载某个函数时,EMACS会按照目录在 load-path 变量中出现的先后顺序进行查找,也就是说我们新加的目录 "~mycoe/lisp” 在 load-path 变量的最后,所以最后一个被搜索到。 如果希望先从你新设的 "~mycoe/lisp" 目录查起,则如下设置: (setq load-path

279_common lisp Format小结

怎甘沉沦 提交于 2020-02-27 08:37:56
完整的emacs and lisp的学习集合整理如下: https://github.com/GreyZhang/g_lisp 继续学习emacs,继续学习lisp。这一次小结一下common lisp中的format。 上面是一个加单的小例子,format函数传入了两个参数。第一个参数,指定的是输出的stream,第二个参数是输出信息。这里,输出的stream是nil,也就是没有。输出信息直接作为返回值返回。 上面的测试,输出stream为t,意思是标准输入输出IO。这样,我们看到了字符串的输出,同时带有一个NIL的返回值。同样有字符串的信息输出,这个与上面的测试有什么差异呢?其实从形式上就可以看得出,一个是字符串对象,一个是纯粹的文字显示。 当参数为t的时候,绑定的stream其实是terminal-io 使用~a的时候代表的是格式化的参数,后面对应的是其数值。当输出信息等待接收的参数是2个的时候,输入一个会导致报错,从信息提示看是缺少了参数。以下是修正后的测试结果: ~可以类比为我们C语言中的printf的%。那么,既然有多种字符格式,lisp是否有呢?其实也是有的。做几个测试: 对比之下,我们能够发现很多共同点。当然,这两者之间的部分形式也不是百分之百的等同。 如果,后面的传入输出参数是一个列表,那么当遇到独立的~a的时候会直接导入列表。如果我们想使用列表的内容组合

258_基础的lisp S表达值小结

孤者浪人 提交于 2020-02-27 06:46:18
完整的emacs and lisp的学习集合整理如下: https://github.com/GreyZhang/g_lisp 继续学习,借助于lispbox看一部分简单的lisp s表达式的常用方式。 先做了一个比较有意思的操作,我直接输入了一个中文的字符串,结果没有正常显示。错误信息我没有截取,提示的信息似乎是跟字体有关,使用的相应的unix某个字符集的一些编码符号覆盖不到中文。 一般的英文字符串是可以正常现实的,同时可以支持直接显示的还有一些数字。 进一步测试,作为关键字的foo可以进行自求值,结果是它自己。说实话,这个我一直没有用明白为什么。而直接输入foo提示错误,因为evaluation报错。也就是说REPL尝试去寻找foo的绑定失败了。在其他的编程语言中,更多的对此的描述是未定义。 上面增加了几个测试,首先是foo的定义。定义并赋值的foo变量,在REPL中直接找到了相应的绑定数值。而’,之前在emacs lisp中做过小结,是引用的意思。今天再次得到了一个是更好理解的解释,那么就是:引用函数意味着我们不去对他进行eval求值。同样的操作,对于foo和bar的两次引用操作,查看类型发现返回结果不同。这是为什么呢?这里,似乎看到了一个lisp有意思的功能了。其实,引用有时候是作为一个代码片段来起作用的!这一点,从foo的处理中就可以看得出来。上面的结果可以看出

Cartographer安装

≯℡__Kan透↙ 提交于 2020-02-22 23:09:47
请注意本文的安装日期2017/12/20,如果距离该时间很遥远,请仅作为参考,毕竟cartographer的代码在不断更新,可能会存在很大的变动。 参考文档: https://google-cartographer.readthedocs.io/en/latest/ https://google-cartographer-ros.readthedocs.io/en/latest/ http://www.cnblogs.com/liangyf0312/p/8028441.html 1. 先装好 wstool 、 rosdep 、ninja 2. 建工作空间 3. 下载cartographer、cartographer_ros、ceres源码。这里也下载了rplidar的代码(略)。 https: / / github.com / ceres - solver / ceres - solver https: / / github.com / googlecartographer / cartographer https: / / github.com / googlecartographer / cartographer_ros yhexie@ubuntu:~$ sudo apt-get install -y python-wstool python-rosdep ninja

Difference between let* and set? in Common Lisp

余生长醉 提交于 2020-02-22 06:12:07
问题 I am working on a genetic programming hobby project. I have a function/macro setup that, when evaluated in a setq/setf form, will generate a list that will look something like this. (setq trees (make-trees 2)) ==> (+ x (abs x)) Then it will get bound out to a lambda function #<FUNCTION :LAMBDA (X) ... > via strategic use of functions/macros However, I want to get a bit more effective with this than manually assigning to variables, so I wrote something like this: (setq sample (let* ((trees

Difference between let* and set? in Common Lisp

末鹿安然 提交于 2020-02-22 06:11:42
问题 I am working on a genetic programming hobby project. I have a function/macro setup that, when evaluated in a setq/setf form, will generate a list that will look something like this. (setq trees (make-trees 2)) ==> (+ x (abs x)) Then it will get bound out to a lambda function #<FUNCTION :LAMBDA (X) ... > via strategic use of functions/macros However, I want to get a bit more effective with this than manually assigning to variables, so I wrote something like this: (setq sample (let* ((trees

Difference between let* and set? in Common Lisp

China☆狼群 提交于 2020-02-22 06:11:22
问题 I am working on a genetic programming hobby project. I have a function/macro setup that, when evaluated in a setq/setf form, will generate a list that will look something like this. (setq trees (make-trees 2)) ==> (+ x (abs x)) Then it will get bound out to a lambda function #<FUNCTION :LAMBDA (X) ... > via strategic use of functions/macros However, I want to get a bit more effective with this than manually assigning to variables, so I wrote something like this: (setq sample (let* ((trees

Difference between let* and set? in Common Lisp

橙三吉。 提交于 2020-02-22 06:11:05
问题 I am working on a genetic programming hobby project. I have a function/macro setup that, when evaluated in a setq/setf form, will generate a list that will look something like this. (setq trees (make-trees 2)) ==> (+ x (abs x)) Then it will get bound out to a lambda function #<FUNCTION :LAMBDA (X) ... > via strategic use of functions/macros However, I want to get a bit more effective with this than manually assigning to variables, so I wrote something like this: (setq sample (let* ((trees

JAVA程序设计:Lisp 语法解析(LeetCode:736)

耗尽温柔 提交于 2020-02-21 16:16:25
给定一个类似 Lisp 语句的表达式 expression,求出其计算结果。 表达式语法如下所示: 表达式可以为整数,let 语法,add 语法,mult 语法。表达式的结果总是一个整数。 (整数可以是正整数、负整数、0) let 语法表示为 (let v1 e1 v2 e2 ... vn en expr), 其中 let语法总是以字符串 "let"来表示,接下来会跟随一个或多个交替变量或表达式,也就是说,第一个变量 v1被分配为表达式 e1 的值,第二个变量 v2 被分配为表达式 e2 的值,以此类推;最终 let 语法的值为 expr表达式的值。 add语法表示为 (add e1 e2),其中 add 语法总是以字符串 "add"来表示,该语法总是有两个表达式e1、e2, 该语法的最终结果是 e1 表达式的值与 e2 表达式的值之和。 mult语法表示为 (mult e1 e2) ,其中 mult 语法总是以字符串"mult"表示, 该语法总是有两个表达式 e1、e2,该语法的最终结果是 e1 表达式的值与 e2 表达式的值之积。 在该题目中,变量的命名以小写字符开始,之后跟随0个或多个小写字符或数字。为了方便,"add","let","mult"会被定义为"关键字",不会在表达式的变量命名中出现。 最后,要说一下范围的概念。在做计算时,需要注意优先级,在最内层(根据括号

前端要以正确的姿势学习编译原理(上篇)

笑着哭i 提交于 2020-02-21 04:17:08
转自:https://zhuanlan.zhihu.com/p/36301857 前言 最近在我的 timline 上面出现了很多类似《前端为什么要学编译原理》这类文章以及《前端怎么学AST》这类的问题,但是却发现并没有人给大家介绍前端要如何以系统并且正确地学习编译原理,所以我就结合自己的经验以及走过的弯路来给大家分享点心得和经验,希望能让大家少走点弯路。 最后我并不是前端,只是恰好会写点 JavaScript 而已。 目录 上篇: 编译原理为什么难 怎么学好编程语言 代码到底是什么 正则与上下文无关文法 编程语言从 AST 才正式开始 下篇: 静态分析 类型推导 AST 的转换 Conitnuation 字节码虚拟机 编译原理为什么难 大家提起编译原理第一反应都是很难,难到无从下手,但是为什么难呢?说白了,编译原理不就是研究把一门语言解析并且转换成另一门语言的技术吗?这项技术到底有哪些地方成为了阻碍呢?我认为这个最大的阻碍其实就是“编程语言”本身。 我相信在看这篇文章的朋友至少已经学会了 JavaScript 了吧,但是我想多嘴问一句,大家真的懂 JavaScript 吗?能描述出 JavaScript 的语法规则吗?能理解语法所代指的逻辑结构吗?知道 JavaScript 是如何在被解释和执行的吗?所以,大家真的懂 JavaScript 吗?反正我是至今没有底气说自己”精通“