我们如何在任意嵌套列表和数组之间进行优雅转换?
例如
((1 2 3) (4 5 6))
Run Code Online (Sandbox Code Playgroud)
变
#2A((1 2 3) (4 5 6))
Run Code Online (Sandbox Code Playgroud)
反之亦然
如果一个Array包含某个元素,Chai有一个很好的断言方法
expect([1,2,3]).to.include(2);
Run Code Online (Sandbox Code Playgroud)
给定一个对象数组,我想要的是类似的东西:
expect([{a:1},{b:2}]).to.include({b:2});
Run Code Online (Sandbox Code Playgroud)
这可能吗?
有没有人能够使用Hunchentoot使用Heroku Common Lisp Buildpack在Heroku上成功部署应用程序?
我得到了一个
! Heroku push rejected, no Cedar-supported app detected
Run Code Online (Sandbox Code Playgroud)
而且我不确定我做错了什么,或者是否还没有支持
更新:
上述错误是由于缺少heroku-setup.lisp文件.Heroku现在接受推送,但尝试访问该网站会出错.
Mike Travers回答了这个问题:" 不,它目前不支持Hunchentoot,但要添加它并不难. "
我想现在的问题仍然是谁能够添加该功能?
CL-USER> (defclass a () ())
CL-USER> (defclass b (a) ())
CL-USER> (make-instance 'b)
#<STANDARD-CLASS B>
Run Code Online (Sandbox Code Playgroud)
我可以在我的实例b上调用什么谓词函数,如果它继承自?本着:
CL-USER> (instanceof 'a *)
T
Run Code Online (Sandbox Code Playgroud) 假设我们有一个没有的插槽:initform
(defclass foo ()
((x :reader x :initarg x)))
Run Code Online (Sandbox Code Playgroud)
如何检查foo实例的插槽x是否绑定?
有一种方法可以用MOP来做到这一点,我觉得非常难看.有没有更简单的方法?
我宁愿诉诸:
(defclass foo ()
((x :reader x :initarg x :initform nil)))
Run Code Online (Sandbox Code Playgroud)
并检查它是否为零 - 在这种情况下,x可能永远不会为零(模糊).
我最近开始摆弄类型说明符以提高代码效率.这是Common Lisp标准中所有类型说明符号的列表.
我看不到穿过森林的树.
任何人都可以给出(或指向)不同类型说明符的简短描述,并且何时可以使用它们?
虽然我有兴趣了解所有这些,但我直接感兴趣的是数字相关类型之间的差异(fixnum,bignum,float,single-float,short-float等...)
我找不到有关如何基于HTTP方法调度的任何文档(在同一uri上)。我得到的最接近是:default-request-type
的define-easy-handler
-但似乎调度后者,即使我用GET方法:
(define-easy-handler (index :uri "/" :default-request-type :get) ()
(log-message* :info "GET on index ------ ")
(format nil "Hello World"))
(define-easy-handler (echo :uri "/" :default-request-type :post) ()
(log-message* :info "POST on index ------ ")
(format nil "~S" (raw-post-data :force-text t)))
Run Code Online (Sandbox Code Playgroud) 让我们假设:
(defmacro testing (&optional var)
`(list 'this 'is
,@(when (consp var) `('a 'list))))
Run Code Online (Sandbox Code Playgroud)
调用时:
>(testing 2)
(THIS IS)
>(testing (list 1 2))
(THIS IS A LIST)
Run Code Online (Sandbox Code Playgroud)
这就是我想要的。但是现在,当我传递一个列表参数时:
>(defparameter bla (list 1 2 3))
BLA
>(testing bla)
(THIS IS)
Run Code Online (Sandbox Code Playgroud)
我想这是因为宏会检查(consp bla)
bla 在哪里是符号,而不是列表?我如何防止这种情况?
谢谢
我对Common Lisp的破坏性DELETE函数有点困惑.它似乎按预期工作,除非项目是列表中的第一项:
CL-USER> (defvar *test* (list 1 2 3))
*TEST*
CL-USER> (delete 1 *test*)
(2 3)
CL-USER> *test*
(1 2 3)
CL-USER> (delete 2 *test*)
(1 3)
CL-USER> *test*
(1 3)
Run Code Online (Sandbox Code Playgroud) (defvar x '((5 . a) (3 . b) (1 . c) (9 . d)))
> X
(loop for i in x minimize (car i))
> 1
Run Code Online (Sandbox Code Playgroud)
我想要的是得到 C 而不是 1。我尝试使用值,因为它仍然会使用第一个返回值进行最小化,但我不知道是否有办法在此使用多值绑定语境?
(loop for i in x
minimize (values (car i) (cdr i)) into ans
finally (return ans))
Run Code Online (Sandbox Code Playgroud) common-lisp ×9
sbcl ×3
clos ×2
hunchentoot ×2
arrays ×1
chai ×1
heroku ×1
inheritance ×1
javascript ×1
list ×1
loops ×1
macros ×1
mocha.js ×1
performance ×1
splice ×1
testing ×1
typing ×1