我寻求实现的GNU Common Lisp包forkpty(); openpty()也将是一个很大的优势,login_tty()并将成为我可以忍受的奢侈品.(Duckduckgo,谷歌等没有任何帮助.)有这样的吗?哪里?
给定内容为1的变量,我知道它是至少五种类型的成员:
1 (let* ((fred 1))
2 (princ (typep fred 'bit)) (terpri)
3 (princ (typep fred 'integer)) (terpri)
4 (princ (typep fred 'fixnum)) (terpri)
5 (princ (typep fred 'rational)) (terpri)
6 (princ (typep fred t)) (terpri))
T
T
T
T
T
Run Code Online (Sandbox Code Playgroud)
这里有两个问题.
给定具有任意内容的变量,如何确定其超类型路径?
我在哪里可以在文档中找到答案?
我目前正在尝试获得... \hlineGNU Common lisp 2.49 的输出,但我无法使格式工作.这是我到目前为止尝试获得一个反斜杠:
(format nil "\ ") => " "
(format nil "\\ ") => "\\ "
(format nil "\\\ ") => "\\ "
Run Code Online (Sandbox Code Playgroud)
我认为双反斜杠会使它工作,为什么反斜杠不会逃避另一个反斜杠?
我有Mac OSX 10.8.4.我已经克隆了gcl的git repo,根据自述文件,我运行了./configure.
但是,我收到以下错误:
configure: error: Cannot build with randomized sbrk. Your options:
- upgrade to a kernel/libc that knows about personality(ADDR_NO_RANDOMIZE)"
- recompile your kernel with CONFIG_COMPAT_BRK (if it has that option)"
- run sysctl kernel.randomize_va_space=0 before using gcl
Run Code Online (Sandbox Code Playgroud)
尝试了第三种选择(对于其他人我是无能为力的,即使在谷歌搜索后也没有得到任何解决方案).任何人都可以告诉我应该如何安装gcl或者去获取开发环境lisp?
在Ubuntu存储库中有两个Lisp实现:GCL和CLISP.它们之间有根本区别吗?哪一个更接近行业标准?
如果在REPL我输入:
(type-of (make-array 5))
Run Code Online (Sandbox Code Playgroud)
然后我得到了答复:
(SIMPLE-VECTOR 5)
Run Code Online (Sandbox Code Playgroud)
很公平.所以如果在REPL我进入:
(type-of (make-array (list 5 3 2)))
Run Code Online (Sandbox Code Playgroud)
然后我得到了答复:
(SIMPLE-ARRAY T (5 3 2))
Run Code Online (Sandbox Code Playgroud)
我有两个问题.
T告诉我什么?如果NIL相反,那会告诉我什么?我从shell脚本调用了一个Lisp函数(以及其他一些东西).为简洁起见,以下是脚本的相关部分:
./gcl -load /tmp/calendrica-3.0.cl-batch -eval'(格式T"~a"(CC3 :: sunset(CC3 :: fixed-from-gregorian)(CC3 :: gregorian-date 1996 CC3 :: 2月25日))CC3 ::耶路撒冷))'728714.7349874675
上面的代码工作正常,但我必须为每个使用的符号附加包名CC3; 这使得代码难以操作且难以输入.
我尝试简化它,使用use-package:
./gcl -load /tmp/calendrica-3.0.cl-batch -eval'(格式T"~a"(使用包"CC3")(日落(固定自格里高利(gregorian-date 1996年2月25日))耶路撒冷))'
更容易阅读和打字,但遗憾的是它不起作用.我已经尝试了各种方法来包含该use-package指令,但到目前为止还没有成功.
是否可以在use-package通过GNU Common Lisp(gcl)加载指令启动Lisp程序时包含指令?
更新: 解决方案是根据接受的答案建议使用多个evals.
./gcl -load /tmp/calendrica-3.0.cl-batch -eval'(use-package"CC3")' - eval'(格式T"~a"(日落(固定自格里高利)(gregorian-date 1996 2月25日))耶路撒冷))'
我最近一直在玩LISP,我想通过缓存它的输出来尝试优化一个非常低效的递归函数,所以它只运行一次参数的每个组合.我想将结果保存到哈希表中,使用(LIST a b)或(CONS a b)作为键.我的问题是,这甚至可能吗?我读过的文档会让我相信它,因为我读到的文档定义key为"对象",并将"对象"定义为构造的东西cons.所以我试了一下.
(defparameter *table* (make-hash-table))
(setf (gethash (list 1 2) *table*) 123)
(format t "~S~%" (gethash (list 1 2) *table*))
Run Code Online (Sandbox Code Playgroud)
它给了我NIL,当我期待123.如果我更换(list 1 2)了cons它仍然无法正常工作,但是当我使用一个普通的整数,它工作正常.
我正在使用GCL 2.6.12
handler-case 是在 Common Lisp 中处理条件的关键,但 Ubuntu 18.04 上的 GCL 2.6.12 认为它是一个未定义的函数:
>(handler-case (error "test") (error (condition) condition))
Error: UNDEFINED-FUNCTION :NAME HANDLER-CASE
Fast links are on: do (si::use-fast-links nil) for debugging
Signalled by EVAL.
UNDEFINED-FUNCTION :NAME HANDLER-CASE
Broken at EVAL. Type :H for Help.
1 Return to top level.
>>
Run Code Online (Sandbox Code Playgroud)
对于 也是如此handler-bind。
GCL 手册中唯一与处理条件或错误相关的函数是 GCL 特定的universal-error-handler.
如何在 GCL 中处理条件,最好以其他 Lisps 支持的方式处理?
lisp common-lisp gnu-common-lisp condition-system ansi-common-lisp
我们的任务是以这种方式打印出Pascal三角形中的值
(pascal 2)
(1 2 1)
(pascal 0)
(1)
Run Code Online (Sandbox Code Playgroud)
我将定义为二项式的代码复制到了互联网上的某处,定义如下:
(defun choose(n k)
(labels ((prod-enum (s e)
(do ((i s (1+ i)) (r 1 (* i r))) ((> i e) r)))
(fact (n) (prod-enum 1 n)))
(/ (prod-enum (- (1+ n) k) n) (fact k))))
Run Code Online (Sandbox Code Playgroud)
现在,我试图根据我的pascal函数中的值创建一个列表:
(defun pascal (start end)
(do ((i start (+ i 1)))
((> i end) )
(print (choose end i) ))
)
Run Code Online (Sandbox Code Playgroud)
如果使用(pascal 0 2)进行测试,该函数将产生1 2 1 NIL。如何消除NIL并创建列表?
有没有办法打印出函数的所有调用来调试递归程序?
考虑这个属性列表:
(defvar *some-variable* (list :foo "fooval" :bar "barval"))
Run Code Online (Sandbox Code Playgroud)
这个简单的电话:
(getf *some-variable* :foo)
Run Code Online (Sandbox Code Playgroud)
收益率"fooval"如预期.我定义了一个宏应该做同样的事情,除了我可以传递任何属性的名称来检索:
(defmacro my-macro (property-name)
`(getf *some-variable* :,property-name))
Run Code Online (Sandbox Code Playgroud)
不幸的是,这样称呼它:
(my-macro 'foo)
Run Code Online (Sandbox Code Playgroud)
结果FOO.为什么?
common-lisp ×12
gnu-common-lisp ×12
lisp ×9
clisp ×4
batch-file ×1
debugging ×1
macros ×1
shell ×1
ubuntu ×1