我正在上一门编程语言原理课,教授在课上讲到了使用Lisp (Precisly,Elisp)的宏语言。然而,他并没有教我们如何编写这种语言。因此,我正在努力学习自己。 但是,关于Lisp中"tick“(')的用法,我就是不能理解。然而,我理解它的基本用法。例如,如果我们有(cdr '(a b c)),它会给我们一个列表(b c)。如果没有刻度符号,(a b c)将作为一个函数进行计算。 在我的教授写的代码中,我注意到了一个奇怪的"tick“符号的用法,我不能真正理解它的用法: ; not sure why there is a "'" i
给定一个值列表,如果所有元素都不为NIL,我想将该列表缩减为T,如果不为NIL,则为NIL。这给了我一个错误:
(apply #'and (get-some-list))
如下所示:
(reduce #'and (get-some-list))
这是我想出的最好的:
[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
为什么
我对defun宏是如何工作的感到困惑,因为
(defun x () "hello")
将创建函数x,但仍将取消绑定符号x。
如果我将一些lambda绑定到x,那么x将有一个值,但它不会被解释器视为如下形式的函数:
(x)
我认为这与defun应该在全局环境中定义函数的事实有关,但我不确定它到底是什么意思。为什么我不能在当前环境中隐藏它?
如果一些lambda绑定到符号上,有没有办法强制解释器将符号视为函数?例如:
(setq y (lambda () "I want to be a named function"))
(y)
附言:我使用的是SBCL。
我正在通过工作。
我有一个适用于的解决方案,但我不能理解解决方案:
(fn [b]
(some (fn [p] (first (keep #(if (apply = p %) p)
`(~@b ; <- What is that ` and ~@?
~@(apply map list b) ;
~(map get b [0 1 2])
我需要一个函数,它将接受一个带有单词的列表,并将该列表拆分为两个列表,如果在任何点上找到单词'FOO‘。我想出了一个递归的解决方案,可能不是最好的,但我有一点麻烦。我只需要传递一个参数,要分析的列表,但我不知道如何建立第二个列表。有什么建议吗?谢谢!
;Splits a list into 2 if the word 'FOO' is present
;----------------------------------------------------------------------
;LOAD FILE: (load "C:\\split.lisp
我尝试用LISP创建Euklid算法。我的代码:
(defun euklid( x y)
(cond
((= x y) x)
((> x y) (euklid((- x y) y)))
)
我得到一个错误In the form (#1=(- X Y) Y), #1# is not a symbol or lambda expression.如何才能纠正这个错误?我知道这个错误存在于我的代码中。
早期的步骤与宏和寻求澄清。
(defmacro nil! (x)
(list 'setf x nil))
保罗·格雷厄姆在ANSI CL的p169上写文章
nil!、ntimes和while都必须编写成宏,因为它们都必须控制它们的参数的计算方式。
我看着nil!,想,等一下,我想试着把它写成一个函数。事实证明他是对的,就像预期的那样,但他想找出原因。如果我做了
(defun nil!f (x)
(setf x nil))
(setf a 9)
(nil!f a)
; a is still 9, not nil
在强迫自己这样做之后,我注意到这是一个函数的奇
我有这个类的子弹,我想从我的英雄位置发射一颗子弹到鼠标光标位置。
下面是Bullet类:
public class Bullet extends Entity {
private float bulletSpeed = 1.2f;
private float dx, dy;
public Bullet(Handler handler, float x, float y, int width, int height) {
super(handler, x, y, width, height);
}
@Override
pu
我正在努力理解关键字‘乐趣’在Coq的含义。
有类型all和function:
Inductive all (X : Type) (P : X -> Prop) : list X -> Prop :=
| all_nil : all X P []
| all_cons : forall (x:X) (l: list X) , P x -> all X P l -> all X P (x::l).
Fixpoint forallb {X : Type} (test : X -> bool) (l : list X) : bool :=
match l w
我试着在SBCL的顶端做这样的事情:
CL-USER> (defvar space " ")
我所犯的错误是
Lock on package COMMON-LISP violated when
globally declaring SPACE SPECIAL while in package
COMMON-LISP-USER.
[Condition of type SYMBOL-PACKAGE-LOCKED-ERROR]
Restarts:
0: [CONTINUE] Ignore the package lock.
1: [IGNORE-ALL] Ignor
下面是将符号添加到中的Python包。那些用过Lisp/Scheme的人能告诉我怎样才能在Python中利用这种类型吗?
它可以用于将来自外部(来自web)的字符串与内部代码隔离吗?
$ sudo easy_install SymbolType
$ ipython
不幸的是,您不能使用符号将值作为kwargs传递:
In [7]: X = s('X', __name__)
In [9]: a = {X: 10}
In [12]: Y = s('Y', __name__)
In [13]: a.update({Y: 20})
In [14]: a
Out[14]:
我的问题与词性、标记和分析自然语言句子的后处理有关。具体来说,我正在编写一个Lisp后处理程序的组件,该组件以一个语句解析树(例如,斯坦福分析器产生的一个)为输入,从该解析树中提取为生成解析而调用的短语结构规则,然后生成一个规则和规则计数表。输入和输出的一个例子如下:
(1)判刑:
John said that he knows who Mary likes
(2)分析输出:
(ROOT
(S
(NP (NNP John))
(VP (VBD said)
(SBAR (IN that)
(S
(NP (PRP he))