- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这里有一个口齿不清的问题。在过去的几个月里,我一直在慢慢学习 lisp,并且在尝试从 Web 浏览器获取输入与从 REPL 获取输入时遇到了问题。
具体问题是在尝试评估此代码时:
假设 sexp
是 '(向北看)
。
(member (car sexp) '(look walk pickup drop))
从 SBCL 中的 REPL 来看,这工作正常并且符合预期。但是,当从 hunchentoot 中获取 sexp
时,即使 sexp
“看起来”与 REPL 中的相同,它似乎也永远无法考虑 (car sexp)
'(look walk pickup drop)
的成员。
我认为这可能是文件的字符编码与 sexp
从网络浏览器抓取时的字符编码,但我不知道如何检验这个假设。任何指针将不胜感激!
我输入的方式基于 Conrad Barski 的“Land of Lisp”中的文字冒险游戏,详情如下。
(defun game-read (string-to-read)
(let ((cmd (read-from-string
(concatenate 'string "(" string-to-read ")"))))
(describe cmd)
(flet ((quote-it (x)
(list 'quote x)))
(cons (car cmd) (mapcar #'quote-it (cdr cmd))))))
然后包裹在:
(defun game-eval (sexp)
(if (member (car sexp) *allowed-commands*) ;Offending line
(eval sexp)
'(i do not know that command.)))
其中 *allowed-commands*
是:
(defparameter *allowed-commands* '(look walk pickup inventory))
我标记为冒犯的行正常工作正常但是当 string-to-read
来自作为请求 的一部分从 hunchentoot 获取的请求参数时(汽车sexp)
看起来无论我怎么看都一样,但在*allowed-commands*
中找不到。
最佳答案
您需要确定您得到的输入是什么。它是一个符号吗? Common Lisp 具有 TYPE-OF、INSPECT 和 DESCRIBE 等函数,以获取有关数据的更多信息。
* (describe 'north)
COMMON-LISP-USER::NORTH
[symbol]
* (type-of 'north)
SYMBOL
下一个问题是:如果是符号,在哪个包里?
* (symbol-package 'north)
#<PACKAGE "COMMON-LISP-USER">
你的其他符号在同一个包里吗?
下一个问题是:如果是符号或者字符串,大小写怎么办?
* (symbol-name 'north)
"NORTH"
默认情况下符号是大写的。对于从输入中读取的符号,情况并非如此。
现在您还可以使用 MEMBER 进行纯字符串比较:
* (member (symbol-name '|Foo|)
'(foo bar baz)
:key #'symbol-name :test #'equalp)
(FOO BAR BAZ) ; this is the usual return value,
; the rest list with first item found
关于lisp - 使用 hunchentoot 和 sbcl 从网络获取 lisp 输入时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6737684/
SBCL 可以成功加载 hunchentoot。然而,CCL 报道称: ? (ql:quickload :hunchentoot) To load "hunchentoot": Load 1 ASDF
在我的 webapp 启动后的某个时候,我开始收到 Can't handle a new request, too many request threads already来自 hunchentoot
我正在使用 Cl-who、Hunchentoot 和 Common Lisp 开发一个需要处理客户订单的 Web 应用程序。因为他们显然可以订购不止一件商品,所以我认为 Checkbox 最有意义。但
如何在项目上启动 Hunchentoot?我查看了 Edi Weitz 的指南,一切顺利,直到安装完成。列出的教程要么被破坏,要么略过实际的服务器使用情况。 我有我的 asdf 文件,用 quickl
我网站的 URI 结构最近发生了巨大变化,我需要将所有旧页面重定向到它们对应的新页面。我有一个所有新旧 URI 对的虚线列表。目前我正在尝试为每个循环定义简单的处理程序: (let ((redirec
我想用 Hunchentoot 创建一个网络应用程序,其工作方式如下;客户端告诉服务器应用程序它对数据库中的某个表感兴趣。当表中发生更改时,服务器会推送此信息。我还没有研究过 WebSockets,因
目前,我正在使用 hunchentoot 为我自己的需要开发 2 个基于 Web 的工具。 在开始 hunchentoot 之前,我想用 let 设置一些特殊变量,以便在 hunchentoot 运行
我使用 hunchentoot 网络服务器,并在那里上传文件。它将文件存储到临时位置 (/tmp/hunchentoot/hunchentoot-XX),并将修改和创建日期设置为现在。如何获取收到的文
我正在学习 common lisp 并尝试使用 hunchentoot 开发网络应用。 使用下面的代码,我无法在浏览器上看到 retro-games 函数定义中定义的页面。我希望它由这个函数生成。 我
我知道如何使用 hunchentoot:post-parameter 在 hunchentoot 中处理单个文件上传,但是当我添加属性时 multiple ,即 .我得到了 (hunchentoot
Hunchentoot/cl-who 页面组合 我正在尝试将 hunchentoot 中的几页放在一起作为实验,但我遇到了意想不到的墙。例如,我有以下模板宏。 (defmacro page-templ
我在 hunchentoot 上启用 CORS 时遇到了一些问题: (hunchentoot:define-easy-handler (one-api :uri *one-endpoint*) (
我使用的是装有 Mac OS 10.5 和 SBCL 1.0.29 的 Intel Mac。我之前在这里做过 1.0 之前的 Hunchentoot 开发,所以我已经安装了它(通过 asdf-inst
我尝试基于 Hunchentoot 实现一个简单的帖子示例。 代码如下: (define-easy-handler (test :uri "/test") () (with-html-output
我正在使用 Hunchentoot 作为一个高流量数据库驱动的网络应用程序,它也依赖于网络套接字协议(protocol)和 http ajax 请求。当我使用 apache 基准测试我的应用程序时 a
Hunchentoot 文档指出: "The method for ACCEPTOR tries to serve a static file relative to it's ACCEPTOR-DO
我正在使用 Hunchentoot(在 SBCL 和 Linux 上)开发一个网络应用程序,通常我只是从 Emacs (SLIME) 运行它,但对于部署,我想要更容易自动化的东西。所以我想弄清楚 AS
我一直使用 define-easy-handler。我现在有一个新生成的 ssl 证书和关联的 pem 文件,但无法弄清楚 d-e-h 的 ssl 等价物是什么。 例如,我有: (hunchent
我正在编写一个需要 hunchentoot 网络服务器的网络应用程序。我几乎没有关于 hunchentoot 或任何 Web 服务器的工作知识,我想知道我用 Common Lisp 编写的应用程序如何
我已经用 ssl 设置了一个 hunchentoot 服务器。我希望将常规 http 请求重定向到 https。 似乎是 hunchentoot:define-easy-handler 的某种组合和
我是一名优秀的程序员,十分优秀!