给定一个值列表,如果所有元素都不是NIL,我想将列表减少到T,否则就是NIL.这给了我一个错误:
(apply #'and (get-some-list))
Run Code Online (Sandbox Code Playgroud)
就像这样:
(reduce #'and (get-some-list))
Run Code Online (Sandbox Code Playgroud)
这是我提出的最好的:
[11]> (defun my-and (x y) (and x y))
MY-AND
[12]> (reduce #'my-and '(T T T T T))
T
[13]> (reduce #'my-and '(T T T T NIL))
NIL
Run Code Online (Sandbox Code Playgroud)
为什么"#"和"无效?在Common Lisp中有更惯用的方法吗?
编写Common Lisp代码时我真正想念的一件事是访问Python库,包括标准库和第三方模块.CLPython提供了有限的Python功能子集,它排除了大多数库的使用,因此对我来说并不是真的有用.我希望能够从Common Lisp调用Python代码,使其在CPython或PyPy等Python VM中运行.
也就是说,按顺序评估子表单并返回最后评估值的表单,例如
(do (println "Hello World") 3) => 3
Run Code Online (Sandbox Code Playgroud) 如果我能够以自动方式(最好是在Python脚本中)从FileMaker Pro数据库中提取有用信息,我的工作将更容易,或者至少不那么乏味.我正在使用Linux机器,FileMaker数据库位于OS X机器上运行的同一LAN上.我可以从我的机器登录webby界面.
我对SQL非常方便,如果有人能指出一些可以让我对FileMaker中的数据进行SQL访问的FileMaker插件,我会很高兴.我发现的一切只有另一种方式:让FileMaker从SQL源获取数据.没有用.
这不是我的第一选择,但如果手头有Perl-y解决方案,我会使用Perl而不是Python.
注意:XML/XSLT服务(如某些人所建议的)仅适用于FM Server,而不适用于FM Pro.否则,这可能是最好的解决方案.ODBC变得非常难以开始工作.设置时,FM绝对没有反馈,因此您必须深入了解/var/log/system.log并解析模糊的错误消息.
结论:我通过在通过ODBC连接查询FM数据库的机器上本地运行python脚本来实现它.该脚本实际上是一个TCPServer,它接受来自LAN上其他系统的套接字连接,运行查询,并通过套接字连接返回数据.我必须这样做才能绕过FM Pro仅在本地接受ODBC连接这一事实(外部连接需要FM服务器).
我很好奇几年来可靠而安全地保存源代码.根据我的研究/经验:
光学媒体,例如刻录的DVD-R随着时间的推移丢失了一些数据.几年之后,我没有把所有的文件都拿走了.读错等
硬盘驱动器是机械的,并且由于昂贵的数据恢复费用而导致故障/过时,这几乎不会使您的数据保密(您将其发送给某公司).
磁带存储:见#2.
在线存储受到一些数据存储中心的突发奇想,安全性或缺乏安全性,以及公司折叠等的可能性.加上它的价格昂贵,而且你无法保证它们不会偷看.
我发现随着时间的推移,由于这些问题,我已经丢失了我已完成的旧项目的源代码.还有其他解决方案吗?
答案摘要:
1.使用多种方法进行冗余.
2.以文本或条形码的形式打印出您的源代码.
3. RAID阵列更适合本地存储.
开源你的项目将使它永远持续下去.
5.加密是安全的答案.
6.磁带存放是耐用的.
7.分布式/保证在线存储便宜且可靠.
8.使用源代码管理来维护历史记录,并备份repo.
我正在寻找一种以浅层方式克隆CLOS对象的方法,因此创建的对象将是每个插槽中具有相同值的相同类型,但是是一个新实例.我发现最接近的是标准函数复制结构,它为结构执行此操作.
我正试图以Accept一种特定的方式处理一个没有标题的请求,但是不管我做什么,泽西岛似乎都在努力填写一个请求,所以它总是看起来像请求有一个Accept标题,即使它没有.
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import static org.junit.Assert.assertEquals;
public class JerseyTestTest extends JerseyTest {
@Path("hello")
public static class HelloResource {
@GET
public String getHello(@Context HttpHeaders httpHeaders) {
String acceptHeader = httpHeaders.getHeaderString(HttpHeaders.ACCEPT);
return acceptHeader != null ? acceptHeader : "No Accept Header";
}
}
@Override
protected Application configure() {
return new ResourceConfig(HelloResource.class);
}
@Test
public void test() {
final String hello = target("hello").request()
.header(HttpHeaders.ACCEPT, null) …Run Code Online (Sandbox Code Playgroud) 我有一段看起来像这样的C代码:
const char (*foo)[2] = bar();
Run Code Online (Sandbox Code Playgroud)
现在bar()是一个返回a的函数(const void *).我如何正确地投射这个const指针?该代码从GCC产生此警告:
"initialization discards qualifiers from pointer target type".
Run Code Online (Sandbox Code Playgroud)
以下是我不成功的一些尝试:
const char (*foo)[2] = (const char *)bar();
const char (*foo)[2] = (const void **)bar();
Run Code Online (Sandbox Code Playgroud)
原始代码确实有效,我只是无法通过正确转换返回值来消除警告.
编辑:有人建议:
const char (*foo)[2] = (const char (*)[2])bar();
Run Code Online (Sandbox Code Playgroud)
它似乎是正确的,但GCC给出了这个警告:
"cast discards qualifiers from pointer target type"
Run Code Online (Sandbox Code Playgroud)
这几乎与原始警告相同.
编辑2:好的,我想我已经知道了.这里真正的问题是( const void * )定义bar().的const在定义(const char( * )[2])指的是阵列的元件,而不是指向数组.这种类型定义本质上是一个数组,当由void指针表示时不是 const.真正的答案是,在施放时( const void * …
BlueCloth与Rails 3兼容吗?我不能让它工作,也许有人使用它?
在要求'bluecloth'之后,应该在视图中提供一个名为'markdown'的帮助器,但这似乎不可用.
我对Common Lisp场景很新鲜,我似乎无法找到一个快速的方法从列表中获取第n个元素并同时从列表中删除它.我已经完成了,但它并不漂亮,我真正喜欢的是像"pop"这样的东西,但又采用了第二个参数:
(setf x '(a b c d))
(setf y (popnth 2 x))
; x is '(a b d)
; y is 'c
Run Code Online (Sandbox Code Playgroud)
我很确定"popnth"必须是一个宏,以防参数为0并且它必须表现得像"pop".
编辑:这是我的垃圾第一版:
(defmacro popnth (n lst)
(let ((tempvar (gensym)))
`(if (eql ,n 0)
(pop ,lst)
(let ((,tempvar (nth ,n ,lst)))
(setf (cdr (nthcdr ,(- n 1) ,lst)) (nthcdr ,(+ n 1) ,lst))
,tempvar))))
Run Code Online (Sandbox Code Playgroud)