Python 使用Lisp/Scheme作为脚本语言是否可行?

Python 使用Lisp/Scheme作为脚本语言是否可行?,python,ruby,scripting,scheme,lisp,Python,Ruby,Scripting,Scheme,Lisp,与Ruby/Python/Perl/(插入公认的脚本语言)相反,用Lisp编写脚本是否可行?我的意思是做一些事情,比如文件处理(打开一个文本文件,计算字数,返回第n行)、字符串处理(反转、分割、切片、删除标点)、原型/快速计算,以及其他通常使用Python的事情,等等。与所选择的Ruby/Python/Perl/脚本语言相比,在Lisp中执行此类任务的效率如何 我问这个问题是因为我想学习Lisp,但也要用它来做一些事情,而不仅仅是为了学习它。我环顾四周,但找不到有关Lisp中脚本编写的更多信息。

与Ruby/Python/Perl/(插入公认的脚本语言)相反,用Lisp编写脚本是否可行?我的意思是做一些事情,比如文件处理(打开一个文本文件,计算字数,返回第n行)、字符串处理(反转、分割、切片、删除标点)、原型/快速计算,以及其他通常使用Python的事情,等等。与所选择的Ruby/Python/Perl/脚本语言相比,在Lisp中执行此类任务的效率如何

我问这个问题是因为我想学习Lisp,但也要用它来做一些事情,而不仅仅是为了学习它。我环顾四周,但找不到有关Lisp中脚本编写的更多信息。如果可行,什么是好的实施方案


谢谢大家!

我知道你问了两个问题:

  • 是否可以从命令行运行方案脚本
  • 这有多有效
  • 我可以回答你的第一个问题,但不能回答你的第二个问题。这在很大程度上取决于您的scheme技能,以及您希望(重新)在scheme中编写多少代码以及它的可行性

    所以我只回答你们的第一个问题:)

    看看这个问题:

    例如,如果您已经安装了(对于许多scheme方言来说,这是一个很好的IDE)作为您的scheme解释器,那么您可以使用shebang行
    #/方案脚本中的usr/bin/env mzscheme

    此测试脚本(
    test.scm


    可以使其可执行(使用
    chmod+x test.scm
    )和执行(使用
    /test.scm
    )。

    我认为Lisp/Scheme可以用于编写小型脚本或大型应用程序。但它们还没有准备好广泛使用

    python/ruby和scheme的最大区别在于python有一个集中在一个地方的巨大模块库。Ruby与python非常相似,都带有RubyGems

    另一方面,Scheme可能有一个分散在internet上的小型模块库。模块的质量并不总是与python和ruby中流行的模块相比

    有人可能会说他们的目标不同,但我要说的是,这个计划刚刚过时,人们开始忘记它,忘记了它是如何作为一种工具,而不仅仅是一门学校课程来使用的

    关于Lisp,我真的说不上来。但是根据你的描述,你可以写你想写的脚本,但是如果你需要一些特定的东西,它可能不在那里,你必须自己重写它


    我只能说,跳进去。成为一个给这种语言带来未来的人。别害怕。这种语言有着光明的未来,你会从中学到很多东西。

    当我第一次开始研究Lisp时,我用它来编写shell脚本。。。我对顺序和一致性有点强迫症,我真的很喜欢Lisp语言,因为它们有更合理的语法(更少的语法规则,没有与特定语法元素相关的随机决策)

    如果您正在研究CommonLisp,那么任何Linux发行版上默认安装的SBCL都可以立即用于CGI脚本编写。SBCL还可以处理命令行参数、访问管道和进程等。如果您不想在不同的Lisp之间实现可移植性,那么我认为您可以这样做。我只是想举例说明我在哪里使用了这个脚本:我们办公室的一个女孩编译并维护了一个单词列表,我必须在我们的应用程序中进一步处理这些单词。该列表以谷歌文档电子表格的形式提供。我的脚本将下载单词表并将其解析为我需要的格式。在编译项目之前,我有一些脚本可以帮助我进行文件操作和预处理(项目不是用Lisp编写的)

    最后,SBCL有自己的方式与FastCGI一起使用,但当然有几个成熟的HTTP服务器,您可以按原样使用,也可以将其置于代理之后。Hunchentoot是历史上最受欢迎的一款,但也有其他的,比如
    CLHTTP
    ,这里还有一些链接:

    将是使用的shebang注释

    此外,我在课堂上使用Common Lisp,只是为了做作业,我想,这就是你在说“打开一个文本文件,数一数单词数,返回第n行”时所追求的。下面是我在《逻辑导论》课程中使用的一个示例:


    既然有人讨论过这件事,这里还有一些事情需要考虑

    通常,脚本语言具有双重性质:它们以低级语言编写,同时向程序员公开高级API。这可能是一种祝福,也可能是一种诅咒。一方面,Python、Ruby、JavaScript等语言具有高度优化的库来处理常见任务,而普通LISP通常类似于C++或java实现Lisp中的所有内容。因此,举例来说,字符串在CL中的复杂度要比JavaScript中低得多:在CL中,它们是简单的字符数组,而在JS中,它们是一种特殊的树,称为rope

    通常,程序员不需要也不期望用脚本语言编写高性能代码。该语言使用基本级别的高度优化的库代码对其进行补偿。不幸的是,一旦程序员真的想从脚本语言中获得尽可能多的性能,他们似乎就没有工具来实现它,因为他们无法深入到实现的底层

    P>另一方面,处理较低层次的细节意味着程序员的生产力将降低,这将需要更多的技能,因为优化代码以符合行业标准的实现需要技巧。 Common Lisp通常属于第二类,但我认为它仍然适合于单行程序和随意编程,因为它有广泛的库和高度开发的宏系统,可以减少冗长
    #!/usr/bin/env mzscheme
    #lang scheme
    (print (+ 40 2))
    
    #!/usr/bin/env sbcl --script