小编gsl*_*gsl的帖子

从命令行与本地长时间运行的Common Lisp映像(可能是守护进程)进行交互

如何从命令行与本地长时间运行的Common Lisp映像(可能是守护进程)进行交互?

我知道可以从终端命令提示符运行Common Lisp函数,我也知道这一点.

我需要做类似的事情,但是使用本地的,已经长时间运行的 Common Lisp映像,能够从CLI或shell脚本中轮询可用的函数.

有没有办法从CLI执行此操作,例如从bash脚本调用函数,并接收函数返回的任何内容?

例如,我可以创建一个原始的Web服务,可能使用wooHunchentoot,调用函数并通过curl或获取返回值wget,但感觉有点复杂.

当然,这是Emacs的SLIME的众多功能之一,但我需要从CLI调用函数,而不需要调用Emacs.

也许有一种方法可以在SLIME之外达到一个swank后端?

如果可能的话,那会是什么样的lisp惯用方法呢?

我会感激任何指针.


更新

附加说明

许多年前,我对能够远程运行长期运行的LISP图像感到好奇(我相信在这种情况下,大写名称应该没问题).如果我没记错的话,可以在prompt.franz.com上找到.一篇文章,以某种方式连接:telnet用于远程访问正在运行的应用程序

Telnet当然是非常不安全的,但无论出于何种原因,能够以这种方式访问​​Lisp应用程序的用处都不能过分夸大,至少对某些人来说是这样.

一些额外的指针,谢谢

我要感谢Basile Starynkevitch的精心和彻底的答案,特别是在理论方面.我正在寻找一个更实用的方向,特别是连接到Common Lisp.不过,他的回答非常有启发性.

我已准备好开始编写本地服务器,可能使用一个优秀的Common Lisp库,例如:

但是,多亏了Stanislav Kondratyev,我没有必要.他指出了一个已经存在的解决方案很好地回答了我的问题,ScriptL:Shell脚本编写了类似Lisp的问题

我在Linux,FreeBSD和OS X上成功测试了它,只需确保首先在POSIX系统调用上安装瘦包装器.在许多功能(参见自述文件)中,它允许公开所选功能,正确处理安全性,甚至提供自定义C客户端,它作为ASDF加载操作的一部分构建,并支持许多新功能,例如I/O代替netcat.

lisp common-lisp command-line-interface swank

8
推荐指数
2
解决办法
907
查看次数

导出到乳胶时如何将 CUSTOM_ID 属性作为自定义 \label 传递?

一旦导出到 LaTeX,我曾经能够将CUSTOM_ID属性作为自定义传递\label。像这样的片段:

* Introduction
  :PROPERTIES:
  :CUSTOM_ID: custom_label
  :END:
Run Code Online (Sandbox Code Playgroud)

将导出到:

\section{Introduction}
\label{sec-1}
\label{custom_label}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Org-mode 版本 8.2.7c,但情况不再如此,上面的 org-mode 片段导出到:

\section{Introduction}
\label{sec-1}
Run Code Online (Sandbox Code Playgroud)

因此,我需要在任何地方添加自定义标签,例如:

* Introduction
  :PROPERTIES:
  :CUSTOM_ID: custom_label
  :END:
  \label{custom_label}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方式以CUSTOM_IDorg-latex-export-as-latex方式传递财产?

或者,更一般地说,PROPERTIES在导出到 LaTeX 时是否有系统的方法来传递任何内容?

感谢您提供我可以使用的任何帮助或指针。

emacs org-mode

5
推荐指数
1
解决办法
693
查看次数

使用Common Lisp替换文件中的正则表达式

我正在尝试使用就地修改文件编写Python的正则表达式搜索和替换的Common Lisp版本:

import fileinput, re

for line in fileinput.input(inplace=1, backup='.bak'):
    line = re.sub(r"foo", "bar", line, re.M)
print (line)
Run Code Online (Sandbox Code Playgroud)

这是我能够想到的Common Lisp代码:

(require :cl-ppcre)

(defun in-place-subst (file)
  (with-open-file (stream file :direction :io :if-exists :overwrite)
    (loop for line = (read-line stream nil)
       while line do
         (write-line (cl-ppcre:regex-replace-all "foo" line "bar") stream))))
Run Code Online (Sandbox Code Playgroud)

它有效.现在,替换文本将附加在文件的末尾.我当前的问题是我无法弄清楚如何替换内容.

为了更好地解释,如果file.txt包含:

1 foo
2 bar
3 foobar
Run Code Online (Sandbox Code Playgroud)

打电话后

(in-place-subst "file.txt")
Run Code Online (Sandbox Code Playgroud)

我明白了:

1 foo
2 bar
3 foobar
1 bar
2 bar
3 barbar
Run Code Online (Sandbox Code Playgroud)

而不是正确的替代品:

1 bar
2 …
Run Code Online (Sandbox Code Playgroud)

lisp file-io idiomatic common-lisp in-place

3
推荐指数
1
解决办法
395
查看次数

阐明Perlis格言,“ LISP程序员知道一切的价值,而一无所获。”

我一直在思考玻璃市的格言,

LISP程序员知道一切的价值,却一无所获。

我可以找到一些提示和简短的解释,但对于引号的真正含义却无法获得清晰,有见地的解释,尤其是对于Lisp程序员而言。

您能先描述简单的单词,CS初学者容易理解的内容,再解释更多技术方面的内容,再通过描述代码所暗示的相关结构,操作或情况(可能使用代码或伪代码示例)来解释Perlis的命令吗?

lisp

0
推荐指数
1
解决办法
84
查看次数