标签: ccl

是否存在在Common Lisp中运行外部程序的标准方法?

在clisp中,以下代码有效:

(defun hit-history () (shell "tail ssqHitNum.txt"))
Run Code Online (Sandbox Code Playgroud)

但是,在Clozure CL中,shell不支持该功能!

shell common-lisp exec ccl

12
推荐指数
2
解决办法
4938
查看次数

(普通)lisp中的Unix信号处理

我已经对这个问题进行了一些研究,结果显而易见.在Common Lisp中似乎存在依赖于实现的Unix信号处理方式,但是是否有一个包提供了交叉实现的信号处理方式?

我主要想听听SIGINT并在我的应用程序中正常关机.我在linux上使用Clozure CL 1.7 ...就像提到的那样,对于这个包来说会很棒,但如果我不得不求助于特定于实现的代码,那就没问题.

我也没有完全嫁给使用SIGINT(尽管它是理想的).如果需要,我可以使用另一个信号.

如果这将是混乱的,有没有人有任何其他建议优雅地从应用程序外部关闭lisp应用程序?我有一个想法是创建一个应用程序监视的文件,如果它检测到文件,它会关闭......但是有点hacky.

谢谢!

lisp signals common-lisp sigint ccl

11
推荐指数
3
解决办法
1766
查看次数

gcc cc1:内存不足分配

我正在尝试使用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)

linux stack gcc ccl

9
推荐指数
1
解决办法
1万
查看次数

如何减小Clozure Common Lisp可执行文件的大小?

我保存了这个简单的程序

(defun hello-world ()
  (format t "Hello, world"))

(defun main ()
  (hello-world))
Run Code Online (Sandbox Code Playgroud)

运用 ccl:save-application

(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仍然有点大.参数purifyimpurify没有太大的影响.

我有什么选择来减少可执行文件的大小?有吗?

size executable common-lisp ccl

8
推荐指数
1
解决办法
1028
查看次数

常见的lisp:defstruct结构的slot-value

在常见的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结构,还是有更好的方法来实现它?

structure accessor common-lisp clos ccl

8
推荐指数
1
解决办法
2359
查看次数

OpenMCL Common Lisp出现"没有MAKE-LOAD-FORM"错误

我正在尝试使用SLIME和OpenMCL(好吧,现在称为CCL)在OS X上运行Paul Graham的ANSI Common Lisp的光线跟踪代码.在该代码中,有一个常量定义,其值是一个结构,当我在任何使用该常量的函数上调用slime-compile-and-load-fileslime-compile-defun时,我收到一条错误消息:

没有为#S定义MAKE-LOAD-FORM方法(POINT:X 0:Y 0:Z 200)[类型SIMPLE-ERROR的条件]

我发现了一篇解释复杂性的帖子,另一篇解释了它,但是需要在代码中添加哪些内容来协商OpenMCL的这个方面?

common-lisp literals ccl

7
推荐指数
1
解决办法
546
查看次数

Common Lisp:如何从Emacs Slime中获取(in-package ...)

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会话中更改当前包?如果我想与包内容进行交互,我必须手动更改它.

emacs common-lisp slime ccl eval-when

7
推荐指数
1
解决办法
922
查看次数

Clozure Common Lisp - TCP套接字编程 - 发送回复

我有一个非常小的程序,它打开一个套接字并接受一个连接.然后它抓取远程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)

sockets common-lisp ccl

6
推荐指数
1
解决办法
2348
查看次数

在Mac OS X上的Clozure CL:摆脱GUI?

我想从命令行运行CCL REPL.我该怎么做才能阻止CCL启动那个GUI事物(菜单和监听器窗口)?谢谢.

macos common-lisp ccl

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

通过 Clozure CL 与 Windows API 交互

我想通过 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)

获取/设置正确的方法签名

以下是我认为调用它的一般步骤,但我不确定每个步骤是如何进行的:

  • 检索 CCL 为此函数生成的签名,以便我知道如何调用它。
  • 使用 为其提供不同的函数签名external-call
  • 定义一个 FFI 结构或类来保存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)

common-lisp ffi ccl

5
推荐指数
0
解决办法
531
查看次数

标签 统计

ccl ×10

common-lisp ×9

accessor ×1

clos ×1

emacs ×1

eval-when ×1

exec ×1

executable ×1

ffi ×1

gcc ×1

linux ×1

lisp ×1

literals ×1

macos ×1

shell ×1

sigint ×1

signals ×1

size ×1

slime ×1

sockets ×1

stack ×1

structure ×1