在没有任何Lisp或函数编程知识的情况下,从头开始学习Emacs Lisp编程是什么感觉?

您所在的位置:网站首页 lisp编译器 在没有任何Lisp或函数编程知识的情况下,从头开始学习Emacs Lisp编程是什么感觉?

在没有任何Lisp或函数编程知识的情况下,从头开始学习Emacs Lisp编程是什么感觉?

2023-04-02 20:32| 来源: 网络整理| 查看: 265

推荐答案1

我这样做了,这太好了!

我在一个PeopleSoft项目上,并继承了一些自定义写的SQR代码,需要升级为PeopleSoft的最新版本.我想要一个可以语法突出显示SQR的编辑器.我唯一能找到的是Emacs,尽管当时我是一个VIM家伙,但我认为我会试一试.当您在VIM中编程多年时,编辑人员很难被编辑吓倒.

SQR在文本字符串中具有SQL语句.我发现自己总是必须复制这些语句以在Oracle数据库上尝试它们,这需要大量的仔细编辑.我厌倦了这一点,并想:"如果我试图写一些LISP做到这一点怎么办?"我写了一些很糟糕的LISP,我想主要是C ++和Java Guy可以写作的内容,但它奏效并节省了很多时间.

我改写了这一点以后再变得更lispy;今天的版本看起来像.然后m-x引用.这为您提供了SQL,然后可以填写参数并在SQLDEVEVEL,TOAD,PL/SQL Developer或其他等工具中执行.如今,从项目到项目和做各种各样的事情.我目前的项目有10,000多行.我不会将其中任何一个部署给客户 - 我的公用事业仅仅是为了帮助我编写可交付成果.我有时会说emacs是我的初级程序员,因为我使用它生成和修改代码.

现在我指出,上面的代码根本不是"功能".在该功能中,SETF函数是设置变量值,通常在功能代码中可能是可变的.另外,我一直在编辑缓冲区.如果您想纯粹的功能,您可能希望以后尝试Clojure,这在Emacs中具有很好的支持.与Emacs LISP合作确实使我有兴趣分支和学习常见的Lisp和Clojure,但是在我的工作中没有太多使用. Emacs对于任何类型的LISP都是非常好的IDE,具有粘液和苹果酒的工具.

这是您可以尝试的另一件简单的东西 - 一种在学习LISP初学者时可能会做的事情.这将罗马数字转换为小数.您输入一串罗马数字,标记它和M-x convert依 - 罗马以在消息中返回值.它没有强制执行有效的罗马数字格式,它只会添加它们.

(defun convert-roman (beg end)  (interactive "r")  (let ((total 0)  (letter 0)  (previous-numeral-value 0)  (current-numeral-value 0)  (value-to-add 0))  (save-excursion  (goto-char end)  (while (>= (point) beg)  (setf letter (char-after (point)))  (setf current-numeral-value  (cond ((or (= letter ?I) (= letter ?i)) 1)  ((or (= letter ?V) (= letter ?v)) 5)  ((or (= letter ?X) (= letter ?x)) 10)  ((or (= letter ?L) (= letter ?l)) 50)  ((or (= letter ?C) (= letter ?c)) 100)  ((or (= letter ?D) (= letter ?d)) 500)  ((or (= letter ?M) (= letter ?m)) 1000)  (t 0)))  (if (> previous-numeral-value current-numeral-value)  (setf value-to-add (* current-numeral-value -1))  (setf value-to-add current-numeral-value))  (setf previous-numeral-value current-numeral-value)  (setf total (+ total value-to-add))  (forward-char -1)))  (message "%d" total))) 

尝试使用McMlxix尝试一下Bryan Adams歌曲的主题.

如果您想进入Emacs和Lisp,我建议您在YouTube上订阅Gavin Freeborn.这更像是一个全能的LISP频道,但他有很多有趣的东西.

好运!

推荐答案2

我无法为常见的LISP回答,但是Emacs LISP对编程的初学者来说不是一个好语言.这是一种自定义emacs的好语言,因为它 是 一种真正的编程语言,但这并不是一个特别容易的一种,您想做的很多事情都与emacs有关作为文本编辑器(和窗口管理器).因此,学习Emacs LISP并不是真正关于学习编程.您需要先学习编程,然后学习Emacs LISP.那是正确的顺序.而且,如果您可以编程,那么学习Emacs LISP并不难.这并不比学习Java或Python以及您真正想要的相关软件包要困难.

,而我的拙见,这就是为什么人们认为从堆栈溢出中剪切和粘贴的原因是一个程序的方式.因为,这些天您需要知道的很多东西都在包装中,并且您正在查找包装API.您必须先拥有模型 - 这是"真实的"编程部分,但是随后您需要弄清楚该模型如何映射到包含的软件包的调用.这就是"堆栈溢出"部分.

举例来说,我正在工作的启动公司有3个主要的软件零件.两个用Rust写的,一个在Java.还有一些C ++代码和其他部分,但它们是偶然的(重要且必要的,但偶然).无论如何,其中一个生锈零件带来了350多个不同的包裹来做它的工作.我不知道直接依赖关系有多少,有多少是间接的(您使用此软件包,需要这些六个软件包).

推荐答案3

LISP的主要课程是代码是数据结构.描述LISP的语法如何匹配LISP的文字数据结构的语法是: Homoiconicity - Wikipedia

代码是数据,可以处理和生成以及评估(执行).

也值得学习,LISP及其ITS ILK(方案,Clojure,球拍)支持与C/C ++" PRECOSERSOR"概念的根本不同的宏模型,不幸的是,该概念以相同的名字为单位.

在C和大多数旧形式的汇编语言中,宏是相当简单的文本替换功能,对参数粘贴有所支持(类似于模板渲染,但通常不那么复杂).

在LISP中,宏是挂入语言代码处理中的代码单位(与其执行引擎不同). LISP宏取 S-expressions (数据结构)并将其转换为其他S-表达.换句话说,他们引入了由程序员自定义的代码处理(将代码视为数据).从本质上讲,LISP允许程序员创建对语言的扩展,并(在某些局限性上)引入其他语法. (这是对此的一些讨论: How far can LISP macros go? )

关键点是LISP宏没有修改源代码文本.他们正在处理结构化数据.

推荐答案4

在理查德·斯塔尔曼(Richard Stallman -bottom:1em;边界宽度:0px;边界色:透明; padding-left:1em;">

构建扩展的语言不应被视为一种编程语言事后;它应该被设计为一种编程语言.实际上,我们发现为此目的的最好的编程语言是LISP.

是伯尼·格林伯格(Bernie Greenberg)发现了这一点.他在Mutics MacLisp中撰写了Emacs版本,并以直接的方式在MacLisp中写下了自己的命令.编辑本身完全写在LISP中. Multics Emacs被证明是一个很大的成功 - 编程新的编辑命令非常方便,以至于他办公室中的秘书也开始学习如何使用它.他们使用了某人写的手册,该手册展示了如何扩展emacs,但并没有说这是一个编程.因此,秘书认为他们无法进行编程,但并不害怕.他们阅读了手册,发现他们可以做有用的事情并学会了编程.

所以伯尼看到了一个应用程序 - 对您有用的程序 - 具有LISP它的内部及其可以通过重写LISP程序来扩展的,实际上是人们学习编程的好方法.它使他们有机会编写对他们有用的小程序,在大多数领域,您可能无法做.他们可以鼓励自己的实际用途 - 在最难的阶段 - 他们不相信自己可以编程的阶段,直到到达他们是程序员的地步.

那时,人们开始怀疑他们如何在没有全面服务LISP实施的平台上获得这样的东西. Multics MacLISP拥有编译器和解释器 - 这是一个成熟的LISP系统 - 但人们想在尚未撰写Lisp编译器的其他系统上实施类似的内容.好吧,如果您没有LISP编译器,则无法在LISP中编写整个编辑器 - 如果必须运行解释的LISP,它将太慢,尤其是重新播放.因此,我们开发了一种混合技术.这个想法是将LISP解释器和编辑器的下层部分编写在一起,以便编辑器的部分是内置的LISP设施.

可以在此处阅读整个内容: My Lisp Experiences and the Development of GNU Emacs

in

我如何进行计算 ,理查德·史塔尔曼(Richard Stallman)写道,

最强大的编程语言是LISP.如果您不知道LISP(或它的变体,方案),那么您就不知道编程语言强大而优雅的意义.一旦学习了LISP,您将看到大多数其他语言中缺少的内容.

在本文中, emacs lisp ( https://www.iro.umontreal.ca/~monnier/hopl-4-emacs-lisp.pdf )作者开始说:

,而Emacs的支持者在很大程度上同意它是世界上最伟大的文本编辑器,但它几乎是伪装成编辑器的LISP机器.确实,其主要吸引力之一是它可以通过其自己的编程语言ELISP(或Emacs LISP)进行编程,这是经典传统中的LISP.在本文中,我们介绍了该语言的历史,其历史是在其30多年的发展中.自1985年成立以来,它的核心一直保持稳定,在很大程度上是为了保留与许多第三方套餐的兼容性.尽管如此,ELISP仍在发展并继续这样做.

我在Quora上说Emacs是一个基于LISP的基于LISP的文本处理框架是演示程序.但是,也许我一直在限制范围太多,这确实是一台伪装成编辑的LISP机器.

推荐答案5 LISP具有任何语言中最简单,最常规的语法. LISP运行的速度与任何现代语言一样快,例如Java,C#,并且甚至在大多数情况下.和OO范式. lisp是您本质上可以扩展语言或创建特定于应用程序的语言的少数语言之一.在LISP中,您可以编写自己的" For Loop",您拥有" If"语句,您自己的"函数定义"语法等.创建宏或创建特定于应用程序的语言.使用LISP宏(而不是创建程序),开发人员可以创建一个创建程序的程序! LISP对许多常见数据结构(例如列表)(例如,阵列,散列物和结构.除了常见的数据类型支持外,LISP还具有许多数据类型,大多数语言(例如比率和任意大型整数)都没有支持. 常见的LISP是一种可靠的ANSI标准语言跨度>


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3