Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用hunchentoot和sbcl从web获取lisp输入时遇到问题_Lisp_Sbcl_Hunchentoot - Fatal编程技术网

使用hunchentoot和sbcl从web获取lisp输入时遇到问题

使用hunchentoot和sbcl从web获取lisp输入时遇到问题,lisp,sbcl,hunchentoot,Lisp,Sbcl,Hunchentoot,这里有一个口齿不清的问题。在过去的几个月里,我一直在慢慢学习lisp,在尝试从web浏览器获取输入与从REPL获取输入时遇到了一个问题 具体问题是在尝试评估此代码时: 假设sexp是”(向北看) (成员(汽车sexp)’(看-走-下车) 从SBCL中的REPL来看,这工作正常,正如预期的那样。然而,当从HuncTunoOT中获取 EXP> ,尽管 EXP >“看起来”与RePL相同,但似乎永远不能考虑(Cou-EXP)< > >(Skad Fipe Poad Load)< < /C> >

这里有一个口齿不清的问题。在过去的几个月里,我一直在慢慢学习lisp,在尝试从web浏览器获取输入与从REPL获取输入时遇到了一个问题

具体问题是在尝试评估此代码时:

假设
sexp
”(向北看)


(成员(汽车sexp)’(看-走-下车)

从SBCL中的REPL来看,这工作正常,正如预期的那样。然而,当从HuncTunoOT中获取<代码> EXP> <代码>,尽管 EXP >“看起来”与RePL相同,但似乎永远不能考虑<代码>(Cou-EXP)< <代码> > <代码> >(Skad Fipe Poad Load)< < /C> >

我认为当从网络浏览器中抓取时,可能是文件的字符编码,而不是
sexp
的字符编码,但我不知道如何验证这一假设。任何指点都将不胜感激

编辑 我输入的方式是基于康拉德·巴尔斯基的《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.)))
其中,
*允许的命令*
是:

(defparameter *allowed-commands* '(look walk pickup inventory))

我标记为冒犯的行正常工作正常,但当要读取的
字符串是作为请求
的一部分从hunchentoot获取的请求参数时(car sexp)
在任何方面看起来都是一样的,我知道如何看待它,但在
*允许的命令中找不到它*
我从未使用过sbcl或Common Lisp,但这听起来像是一个实习问题。请改为尝试此查询:

(member (intern (car sexp)) '(look walk pickup drop)))

我从未使用过sbcl或Common Lisp,但这听起来像是实习中的问题。请改为尝试此查询:

(member (intern (car sexp)) '(look walk pickup drop)))

你需要确定你得到的是什么输入。它是一种象征吗?CommonLisp具有TYPE-OF、INSPECT和description等功能,可以获取更多数据信息

* (describe 'north)

COMMON-LISP-USER::NORTH
  [symbol]


* (type-of 'north)

SYMBOL
下一个问题是:如果它是一个符号,它在哪个包中

* (symbol-package 'north)

#<PACKAGE "COMMON-LISP-USER">
默认情况下,符号为大写。对于从输入读取的符号,情况不一定如此

现在,您还可以使用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

你需要确定你得到的是什么输入。它是一种象征吗?CommonLisp具有TYPE-OF、INSPECT和description等功能,可以获取更多数据信息

* (describe 'north)

COMMON-LISP-USER::NORTH
  [symbol]


* (type-of 'north)

SYMBOL
下一个问题是:如果它是一个符号,它在哪个包中

* (symbol-package 'north)

#<PACKAGE "COMMON-LISP-USER">
默认情况下,符号为大写。对于从输入读取的符号,情况不一定如此

现在,您还可以使用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

你应该展示你是如何“抓住”输入的。你是对的!更正!你应该展示你是如何“抓住”输入的。你是对的!更正!谢谢这很方便!不幸的是,
描述
类型的
检查
函数都给出相同的输出。。。使用
descripe
我得到一个列表作为类型和
类型的CONS,我认为这是预期的。奇怪的是,在我的
游戏评估
函数中,当我的
成员
函数关键参数
:test
是值
#“string-equal
时,它确实在
*允许的命令*
中找到了成员!但是它没有找到函数,表示函数
LOOK
未定义。快到了!我知道是什么了。事实证明,lisp阅读器不仅是一个包装问题,也是一个让我扫兴的问题。选择这一个作为正确答案,因为它允许我查看所有东西的外观和位置。谢谢!这很方便!不幸的是,
描述
类型的
检查
函数都给出相同的输出。。。使用
descripe
我得到一个列表作为类型和
类型的CONS,我认为这是预期的。奇怪的是,在我的
游戏评估
函数中,当我的
成员
函数关键参数
:test
是值
#“string-equal
时,它确实在
*允许的命令*
中找到了成员!但是它没有找到函数,表示函数
LOOK
未定义。快到了!我知道是什么了。事实证明,lisp阅读器不仅是一个包装问题,也是一个让我扫兴的问题。选择这一个作为正确答案,因为它允许我检查所有东西的外观和位置。