小编che*_*yst的帖子

常见的lisp:遍历列表对

我有一个列表,其长度可以被2整除,我正在寻找类似于这个问题的答案:

(loop for (a b) on lst while b
      collect (+ a b))
Run Code Online (Sandbox Code Playgroud)

但是元素之间存在重叠:

(1 2 3 4 5) -> (3 5 7 9)
Run Code Online (Sandbox Code Playgroud)

添加1和2,然后添加2和3等.

我在哪里有一个列表(1 2 3 4),我正在寻找类似的东西

((1 2) (3 4))
Run Code Online (Sandbox Code Playgroud)

作为输出.有没有办法在列表上正确地循环步骤?另一种方法.

lisp sbcl common-lisp

4
推荐指数
2
解决办法
859
查看次数

是否有一个let/flet/labels之类的概念用于绑定闭包以避免funcall?

虽然过了让lambda我发生了

(defmacro! dlambda (&rest ds)
  `(lambda (&rest ,g!args)
     (case (car ,g!args)
       ,@(mapcar
           (lambda (d)
             `(,(if (eq t (car d))
                  t
                  (list (car d)))
               (apply (lambda ,@(cdr d))
                      ,(if (eq t (car d))
                         g!args
                         `(cdr ,g!args)))))
           ds))))
Run Code Online (Sandbox Code Playgroud)

他们随后如此调用:

(setf (symbol-function 'count-test)
    (let ((count 0))
      (dlambda
        (:inc () (incf count))
        (:dec () (decf count)))))
Run Code Online (Sandbox Code Playgroud)

是否有像flet/labels/let这样的结构,我可以将结果闭包绑定到,以避免以全局方式使用funcall或setf符号函数?所以我可以这样做:

(with-closures ((counter (let ((count 0))
                          (dlambda
                           (:inc () (incf count))
                           (:dec () (decf count))))))
              (counter :incf))
Run Code Online (Sandbox Code Playgroud)

closures common-lisp function-call

3
推荐指数
1
解决办法
132
查看次数

选择是否存在其他插入?

IF EXISTS (select * from users where username = 'something') THEN
    select id from users where username = 'something';
ELSE 
    insert into users (username) values ('something');
END IF;
Run Code Online (Sandbox Code Playgroud)

mysql

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

让sinatra应用程序从虚拟机提供服务

我在osx 10.8上运行vmware fusion 5,我的客户操作系统是Arch Linux,目前我能够通过ssh 172.16.4.191简单的sinatra应用程序进入客户端.

require 'sinatra'

get '/hi' do
  "Hello world!!!!!!!"
end
Run Code Online (Sandbox Code Playgroud)

ruby hi.rb

2013-04-06 19:45:18] INFO  WEBrick 1.3.1
[2013-04-06 19:45:18] INFO  ruby 2.0.0 (2013-02-24) [x86_64-linux]
== Sinatra/1.4.2 has taken the stage on 4567 for development with backup from WEBrick
[2013-04-06 19:45:18] INFO  WEBrick::HTTPServer#start: pid=426 port=4567
Run Code Online (Sandbox Code Playgroud)

我的主机操作系统无法使用它

curl 172.16.4.191:4567
curl: (7) couldn't connect to host
Run Code Online (Sandbox Code Playgroud)

任何建议都会很棒,当然我会根据需要提供更多信息.

编辑:

选择与我的mac共享,"虚拟机在外部网络上共享Mac的IP地址.mac为虚拟机的网络流量提供NAT"

编辑:

我已经切换到桥接模式,它现在坐在我的局域网上,我仍然可以进入它,仍然没有这样的运气连接到我的sinatra应用程序.

并且iptables没有显示规则

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot …
Run Code Online (Sandbox Code Playgroud)

ruby macos sinatra vmware-fusion

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