在clisp中,以下代码有效:
(defun hit-history () (shell "tail ssqHitNum.txt"))
Run Code Online (Sandbox Code Playgroud)
但是,在Clozure CL中,shell不支持该功能!
我已经对这个问题进行了一些研究,结果显而易见.在Common Lisp中似乎存在依赖于实现的Unix信号处理方式,但是是否有一个包提供了交叉实现的信号处理方式?
我主要想听听SIGINT并在我的应用程序中正常关机.我在linux上使用Clozure CL 1.7 ...就像提到的那样,对于这个包来说会很棒,但如果我不得不求助于特定于实现的代码,那就没问题.
我也没有完全嫁给使用SIGINT(尽管它是理想的).如果需要,我可以使用另一个信号.
如果这将是混乱的,有没有人有任何其他建议优雅地从应用程序外部关闭lisp应用程序?我有一个想法是创建一个应用程序监视的文件,如果它检测到文件,它会关闭......但是有点hacky.
谢谢!
我正在尝试使用Angstrom Linux在我的BeagleBoard中编译源代码.昨天我能够编译我的代码.但今天我无法编译代码,它说:
ccl: out of memory allocating 268439608 bytes after a total of 405504 bytes
make *** [getimagefromcam1.o] Error 1
Run Code Online (Sandbox Code Playgroud)
我的编译字符串是:
gcc getimagefromcam1.c `pkg-config --cflags --libs opencv` -o getimagefromcam1 -lpthread
Run Code Online (Sandbox Code Playgroud)
代码是:
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
CvCapture* camera = cvCreateCameraCapture(0); // Use the default camera
IplImage* frame = 0;
IplImage img;
cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_WIDTH,2016) ;
cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_HEIGHT,1512);
frame = cvQueryFrame(camera); //need to capture at least one extra frame
frame = cvQueryFrame(camera);
if (frame != …Run Code Online (Sandbox Code Playgroud) 我保存了这个简单的程序
(defun hello-world ()
(format t "Hello, world"))
(defun main ()
(hello-world))
Run Code Online (Sandbox Code Playgroud)
(ccl:save-application "test"
:toplevel-function #'main
:prepend-kernel t
:purify t
:impurify t)
Run Code Online (Sandbox Code Playgroud)
来自Clozure Common Lisp REPL.
在Mac OS X上生成的可执行文件大小为25M.我知道它包含Lisp内核和Lisp系统的内存表示.对于这样一个简单的程序来说,25M仍然有点大.参数purify并impurify没有太大的影响.
我有什么选择来减少可执行文件的大小?有吗?
在常见的lisp中,我可以使用插槽名称/符号来访问结构槽?
我想要的是
(defstruct point (x 0) (y 0))
(defmacro -> (struct slot) `(slot-value ,struct ,slot))
(setf p (make-point))
(setf (slot-value p 'x) 1)
(setf (-> p 'y) 2)
Run Code Online (Sandbox Code Playgroud)
我正在使用clozure cl,并且在clozure cl中这是有效的.但是,AFAIK这是非标准行为(相当于"未定义行为"C++).我不打算切换到另一个CL实现,所以我应该继续使用 slot-value结构,还是有更好的方法来实现它?
我正在尝试使用SLIME和OpenMCL(好吧,现在称为CCL)在OS X上运行Paul Graham的ANSI Common Lisp的光线跟踪代码.在该代码中,有一个常量定义,其值是一个结构,当我在任何使用该常量的函数上调用slime-compile-and-load-file或slime-compile-defun时,我收到一条错误消息:
没有为#S定义MAKE-LOAD-FORM方法(POINT:X 0:Y 0:Z 200)[类型SIMPLE-ERROR的条件]
64位Windows 7
Clozure Common Lisp版本1.9 WindowsX8632
Emacs 24.3.1
史莱姆更改日期2014-06-17
我有一个示例.lisp文件,开头如下:
(ql:quickload 'qt)
(in-package "QT")
Run Code Online (Sandbox Code Playgroud)
程序的其余部分显示一个对话框.当我从命令行运行wx86cl -load helloqt.lisp它时,它似乎工作正常.当我从Emacs Slime(C-x C-k)运行它时,它说没有包"QT".但是,如果我首先单独评估第一行(C-x C-e)然后我可以编译整个事情并且它可以工作,模拟尝试在Windows上的Slime内运行QT线程的正常问题.
我如何制作它以便我可以从emacs编译/运行该文件而无需先手动评估第一行?
另外,为什么不在(in-package ...)Slime会话中更改当前包?如果我想与包内容进行交互,我必须手动更改它.
我有一个非常小的程序,它打开一个套接字并接受一个连接.然后它抓取远程IP和端口.
我想向远程计算机(telnet)发送短信并关闭连接.
我无法确定哪个函数用于向telnet客户端发送消息.
该Clozure手动列出调用的函数"发送到",但它说,这是对UDP套接字和我与TCP套接字的工作.
我希望有人可以告诉我什么是正确的功能,或者,如果"发送到"是正确的功能,如何正确使用它.
谢谢
(setq my-socket (ccl:make-socket :connect :passive :format :text
:local-port 20000 :reuse-address t))
(setq connection (ccl:accept-connection my-socket))
(setq remote-host (ccl:remote-host connection))
(setq remote-port (ccl:remote-port connection))
Run Code Online (Sandbox Code Playgroud) 我想从命令行运行CCL REPL.我该怎么做才能阻止CCL启动那个GUI事物(菜单和监听器窗口)?谢谢.
我想通过 Clozure CL 的外部函数接口调用 Windows API 函数,但我遇到了一些问题,因为我找到的文档相当稀缺。
作为一个足够丰富的示例,我尝试调用SHGetKnownFolderPath。它的签名是
HRESULT SHGetKnownFolderPath(const GUID &rfid, DWORD dwFlags,
HANDLE hToken, PWSTR *ppszPath );
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令来获取函数的入口点:
(open-shared-library "shell32.dll")
> #<SHLIB SHELL32.dll #x1234>
(external "SHGetKnownFolderPath")
> #<EXTERNAL-ENTRY-POINT "SHGetKnownFolderPath" (#x12345) SHELL32.dll #x123456>
Run Code Online (Sandbox Code Playgroud)
以下是我认为调用它的一般步骤,但我不确定每个步骤是如何进行的:
external-call。GUID(第一个参数)viadef-foreign-type或相关构造。CoTaskMemFree来释放 指向的内存*ppszPath。我对最终代码的一般形式的猜测是
(defun get-known-folder (guid)
(let ((ffi-guid (allocate-ffi-memory-from-guid guid))
(ffi-path ffi-version-of-nil)
(path nil))
(external-call "SHGetKnownFolderPath" ...) ;; Pass ffi-guid and ffi-path …Run Code Online (Sandbox Code Playgroud)