这是我发现自己偶尔想做的事情。假设我有一个参数列表。在Lisp中,我可以像这样`(imaginary-function,@args)为了调用将数组从一个元素转换为正确数量的参数的函数。Ruby中是否有类似的功能?或者我只是在这里使用了一个完全错误的成语? 最佳答案 是的!它被称为splat运算符。a=[1,44]p(*a) 关于Ruby:如何将数组拼接成Lisp风格的列表?,我们在StackOverflow上找到一个类似的问题: https://stackov
我已经能够找到:a)用Ruby编写的Lisp解释器(即外部DSL)http://onestepback.org/index.cgi/Tech/Ruby/LispInRuby.redb)作为RubyDSL的Prologhttp://www.kdedevelopers.org/node/2369c)讨论Ruby“作为”一个Lisphttp://www.randomhacks.net/articles/2005/12/03/why-ruby-is-an-acceptable-lisp但奇怪的是,我实际上找不到Lisp的“内部”实现,例如Prolog的实现。我只是不够谷歌,还是还没有人发表过这
看起来Lisp和Clojure程序员经常直接在REPL中开发程序。比照。ClojureDevelopment:IDEorREPL?我的问题是,为什么这种方法在Ruby中不是更常见,通过irb?这仅仅是文化差异,还是有结构(特定于语言)的原因导致以REPL为中心的开发在Lisp中比在Ruby和Python等语言中更常见? 最佳答案 Lisp语法似乎非常适合组合REPL和源文件的方法。当每个表单的文本限制很明确时,以编程方式移动代码片段会容易得多。 关于ruby-为什么REPL风格的开发在R
我对在Ruby中使用动态(而不是词法)作用域变量很感兴趣。似乎没有直接的内置方式,就像Lisp中的let一样。ChristianNeukirchen建议执行动态范围变量的一种可能方法.他在他的Dynamic类中创建了一个“线程本地散列”。我对此并不太着迷。然后我想起来Ruby1.9有一个tap方法。我看到很多人使用tap在命令链中打印调试值。我认为它可以用来很好地模拟动态作用域变量。下面是一个示例,说明了人们希望使用动态作用域变量的情况,以及使用tap的解决方案。如果我有一个博客可以发布此内容并获得一些反馈,我会在那里发布。相反,我来S/O是为了批评这个想法。发表您的评论,我会给获得最
Lisp是否适合Web编程/应用程序(交互式),就像ruby和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common
如何从Rails应用程序调用Lisp程序?...例如,允许最终用户在Rails网络应用程序中输入一段文本,让Lisp程序处理文本并将结果返回给Rails应用程序? 最佳答案 我想到了几种方法:使用Process执行lisp程序.通过标准输入与Lisp程序通信,并让Lisp程序通过标准输出输出其结果。做与上面相同的事情,但通过namedpipes进行通信反而。让你的Ruby代码将数据写入一个命名管道,然后让Lisp程序从那个管道读取数据,然后将数据写入out另一个命名管道,然后你用Ruby读取它应用程序。Lisp程序可以作为守护程序在
我决定用Ruby编写一个小型解释器作为我的下一个项目。我需要具备哪些知识/技能才能成功?我还没有决定要解释的语言,但我正在寻找一种不是玩具语言,但编写解释器相对容易的东西。提前致谢。 最佳答案 你至少要学会:词法分析(将字符分组为标记)解析(将标记组合成结构)抽象语法树(在数据结构中表示程序结构)数据表示(假设您的语言会有变量)“运行”您的程序的评估循环可以在介绍性文本中找到对其中一些主题的精彩介绍StructureandInterpretationofComputerPrograms.那本书中使用的语言是Scheme,这是一种健壮
是否有与lispcar、cdr和cons函数等效的ruby?对于那些不熟悉lisp的人,这是我想从ruby得到的东西:[1,2,3].car=>1[1,2,3].cdr=>[2,3][2,3].cons(1)=>[1,2,3](口齿不清):(car'(123))=>1(cdr'(123))=>(23)(cons1'(23))=>(123) 最佳答案 Ruby数组没有实现为单链表,所以有car和cdr之类的东西没那么有用。如果你真的想,你可以做[1,2,3][0]=>1[1,2,3].first=>1[1,2,3][1..-1
在编程语言中具有原子数据类型的特性有多大用处?一些编程语言有原子或符号的概念来表示各种常量。我遇到的语言(Lisp、Ruby和Erlang)之间存在一些差异,但在我看来,一般概念是相同的。我对编程语言设计很感兴趣,我想知道原子类型在现实生活中有什么值(value)。没有它,Python、Java、C#等其他语言似乎也做得很好。我没有Lisp或Ruby的实际经验(我知道语法,但没有在实际项目中使用过)。我已经足够使用Erlang来适应那里的概念。 最佳答案 Atomsareliterals,constantswiththeirownn
我正在用JavaScript制作一个玩具Lisp解释器。JS没有尾递归消除(TRE),所以我在JS中使用while循环实现了TRE(伪代码):functioneval(exp,env)whiletrueifexpisselfevaluatingreturnexpelseif......elseifexpisafunctioncallprocedure=eval(car(exp),env)arguments=eval_operands(cdr(exp),env)exp=procedure.bodyenv=extend_env(procedure.env,env)continue#tail