如何修改这个代码来支持CCL?

它似乎还有执行外部程序,并为下面的SBCL特殊的代码不会得到它的输出NO ANSI标准方式:

(defmacro with-input-from-program ((stream program program-args environment) &body body) "Creates an new process of the specified by PROGRAM using PROGRAM-ARGS as a list of the arguments to the program. Binds the stream variable to an input stream from which the output of the process can be read and executes body as an implicit progn." #+sbcl (let ((process (gensym))) `(let ((,process (sb-ext::run-program ,program ,program-args :output :stream :environment ,environment :wait nil))) (when ,process (unwind-protect (let ((,stream (sb-ext:process-output ,process))) ,@body) (sb-ext:process-wait ,process) (sb-ext:process-close ,process))))))

下面的代码CCL报告“ERROR:值#不是预期的类型(和CCl ::二进制流输入-STREAM)”

#+clozure (let ((process (gensym))) `(let ((,process (ccl:run-program "/bin/sh" (list "-c" (namestring ,program)) :input nil :output :stream :error :stream :wait nil))) (when ,process (unwind-protect (let ((,stream (ccl::external-process-output-stream ,process))) ,@body) ;(ccl:process-wait (ccl:process-whostate ,process) nil) (close (ccl::external-process-output-stream ,process)) (close (ccl::external-process-error-stream ,process))))))

我知道小CCL。 我想知道我可以修改此代码以支持CCL?

任何建议表示赞赏!

--------------解决方案-------------

显然trivial-shell:shell-command不允许正是你想要的(它同步执行外部命令,并返回整个输出)。

你可以看看CCL的run-program 。 看到:

  • 运行程序;
  • 是否存在对共口齿不清运行外部程序标准的方式? (这是一个问题,类似于你的问题);
  • external-program (在上面的问题的答案的一个建议)由Quicklisp支持,它似乎有执行外部程序更好的支持。

你应该用琐碎的壳。

平凡的外壳是一个简单的平台独立的界面到基础的操作系统。

分类:Common Lisp的 时间:2012-01-01 人气:0
本文关键词: Common Lisp的,CCL
分享到:

相关文章

  • Common Lisp的IDE对于C#开发者? 2012-02-29

    UPDATE 我决定使用Clojure去了. LispDev还没有准备好,和Eclipse /风口浪尖不够稳定,让我感觉很舒服. 至于Clojure的,经过漫长的,很无奈,很烦人的过程试图获得的Eclipse / CCW,Netbeans的/ Enclojure和IntelliJ /香格里拉Clojure的工作, 我终于得到了的Eclipse / CCW工作. 其余的仍然大多在破碎状态. (如果我避开它,我会记录什么了,我得到的Eclipse / CCW工作.) 所以现在,我要利用这一点. 我可

  • 如何创建具有Clozure Common Lisp的应用程序(在Microsoft Windows) 2012-04-14

    我是一个新的一个Common Lisp的(使用Microsoft Windows下Clozure Common Lisp的),谁是熟悉之前c和蟒蛇. 所以,也许问题是愚蠢的在这里,但耐心给我一些帮助. 1)什么是是运行Common Lisp的脚本通常的方式? 现在,我的窗户叫CCL EXE(wx86cl.exe)和评估下写一个bat文件(progn (load "my_script_full_path") (ccl:quit))时,我想"跑"我的脚本每次. 这是&q

  • 是否有可能部署的Common Lisp(或其他方言),桌面应用程序的多个平台? 2012-05-27

    我想开发Common Lisp中或其他的Lisp方言的图形应用程序,它可以部署在Mac,Windows和Linux作为提高我的这种语言知识的一种方式. 理想的情况是: 将编译代码 将使用一个通用的图形库 不需要安装运行时环境. 我想作一个小游戏或图形应用程序,并能够用一个简单的安装在计算机中的任何这些操作系统的表现出来. 有人有类似情况的经验或可能指向我图形库和编译器,运行时环境等的最佳选择...... 谢谢! --------------解决方案------------- 我的lispbuil

  • Clozure Common Lisp的 - TCP Socket编程 - 发送回复 2012-12-30

    我有一个可打开一个套接字并接受连接非常小的程序. 然后,它抓住了远程IP和端口. 我想发送短信到远程计算机(远程登录),并关闭连接. 我不能确定哪些功能是将消息发送到Telnet客户端. 该Clozure手动列出调用的函数"发送到",但它说,这是对UDP套接字和我一起工作的TCP套接字. 我希望有人能告诉我应有的功能是什么,或者,如果"发送到"是正确的功能,如何正确地使用它. 谢谢 (setq my-socket (ccl:make-socket :connect

  • 有一些方法来保存的Common Lisp或计划的REPL状态? 2013-01-14

    有一些方法来保存的Common Lisp或计划的REPL状态? 谢谢 --------------解决方案------------- 大多数Scheme实现编译为C或其他中介的格式,所以我知道没有提供用于保存当前图像的状态. 大多数编译的二进制文件的,所以如果这就是你真的后,读你的执行手册. 常见Lisp,另一方面,通常在一个实现定义方式提供此. SBCL有前面提到的保存,口齿不清,和模功能,CCL具有保存应用程序. 这些是仅有的两个的Lisp我使用,因此,如果您使用的是另一种实现方式,一定要检

  • Common Lisp实现兼容Mac,Windows和Linux CFFI和线程的支持? 2013-02-25

    目标:安装Hunchentoot和能够运行Hunchentoot作为后台线程. 这是我做的: 安装Common Lisp的. 安装Quicklisp. (ql:quickload "hunchentoot") (hunchentoot:start (make-instance 'hunchentoot:acceptor :port 4242)) 最后的命令应该开始Hunchentoot,然后返回给解释作进一步的Common Lisp形式. 对于CLISP,SBCL,ABCL,ECL和C

  • Common Lisp的相当于Haskell的主要功能? 2013-09-14

    Haskell的main功能不正是我想要的:评估时,该文件本身加载(如./myfile.hs或runhaskell myfile.hs在任何其他情况下, main当文件被其他文件导入将不会被调用. newLISP也有此功能. 是否有等同的代码,Common Lisp的? 我读了CLISP的源代码. 下面是当用户输入会发生什么clisp myfile.lisp或./myfile.lisp CLISP节省myfile.lisp为p->argv_execute_file CLISP创建表达式(LOAD

  • 编译/从Mac终端运行的Common Lisp 2013-09-14

    有没有办法做到这一点? 我一直在使用煤泥学习Lisp的,我想开始建立,我将不得不开始编写一些.lisp文件较大的项目,这意味着(我认为). --------------解决方案------------- 我认为,为Mac Common Lisp的你最好的赌注是LispWorks个人版或SBCL. 假设你已经安装了SBCL,你可以创建一个使用文本编辑器.lisp文件(Emacs的将是传统的选择): (defun test () "Hi!") 然后你可以运行在一个外壳Lisp解释: bas

  • “没有MAKE-LOAD-FORM”错误与OpenMCL的Common Lisp 2013-09-20

    我试图运行线使用泥与OpenMCL(当然,现在称为CCL)在OS X上的跟踪代码的形式保罗·格雷厄姆的ANSI Common Lisp的 . 在此代码中,有定义的常量,它的值是一个结构,而当我打电话或者煤泥编译并加载文件或粘液-编译- defun函数的使用不断,我得到一个错误信息的任何功能: 没有化​​妆-LOAD-FORM方法被定义为#S(POINT:0 X:Y 0:Z 200)[条件类型简单,错误] 我发现了一个交解释并发症和另一个感叹,但需要采取什么添加到代码谈判OpenMCL该方面? -

  • 编译的二进制文件与Clozure的Common Lisp 2013-11-05

    给定一个简单的程序,如下面,你会如何: 其编译为被执行加载一个单独的图像文件,并且什么命令行参数,你会用它来加载它? 编译为可以被装载和运行为是一个独立的二进制. 注:仅保存有后续的错误时,抛出该应用程序时:我尝试添加"前置内核T". Error: value NIL is not of the expected type REAL. While executing: CCL::<-2, in process Initial(0). 你会如何​​剿欢迎消息? 该程序 (defun

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.357 (s). 10 q(s)