我想知道一种方法,如何检查一个对象是否属于某个类,或从中派生出来.例如:
(defclass a nil
nil)
(defclass b (a)
nil)
(defparameter *foo* (make-instance 'b))
(my-function *foo* 'a) ; => t
(my-function *foo* 'b) ; => t
Run Code Online (Sandbox Code Playgroud)
或者,还将理解返回给定对象(或类)的所有基类的列表的函数.
我遇到了一个问题。这两个函数有什么区别:
foldl (\x y -> x*2 + y*2) 0 [1,2,3] = 22
foldr (\x y -> x*2 + y*2) 0 [1,2,3] = 34
foldl (\x y -> x*2 + y*2) 0 [1,2,3] ? f( f( f(0,1),2 ),3 )
foldr (\x y -> x*2 + y*2) 0 [1,2,3] ? f( 3,f( 2, f(1,0) ) )
Run Code Online (Sandbox Code Playgroud)
在哪里 f = \x y -> x*2 + y*2。
我理解的结果foldl:
x = f(0,1) = 2
y = f(x,2) = 8
z = f(y,3) …Run Code Online (Sandbox Code Playgroud) 据说,只有Common Lisp中的特殊变量才能解除绑定.对于所有词汇变量,默认值为nil.我认为类槽存在于封闭之类的东西中,但显然它们不存在.
如果我定义一个没有:initform参数的CLOS插槽(希望它们将被绑定nil)并且在创建实例时不提供值,我将获得一个带有未绑定插槽的实例.为什么会这样?这不方便.
我想使用 Emacs 访问HyperSpec(Common Lisp ANSI 标准的 html 页面)。
这是我所做的:
~/.emacs.d/HyperSpec/;/usr/share/emacs/site-lisp/;(setq common-lisp-hyperspec-rooot "~/.emacs.d/HyperSpec/")在我的.emacs文件中添加了一行;slime-hyperspec-lookup RET do* RET。输入此命令后,我收到以下错误:
找不到可用的浏览器
虽然我很喜欢Emacs,用了大概两年,但是我没有用它浏览任何东西,所以不知道错误信息说的是什么类型的浏览器。
我该如何解决问题?
我必须计算正确解码位复制n次数的概率.以下公式应该是答案:

在Haskell中,我将其编码如下:
fac 1 = 1
fac n = fac (n-1) * n
--prob :: (Integral b, Fractional b) => (b, b) -> b
--prob :: (Int,Int) -> Double
prob (n, k)
| n==k = (0.01**k)
| otherwise = factor (n, k) * (0.01 ** k) * (0.99**(n-k)) + prob (n, (k+1))
where
factor (n, k) = (fac n / ((fac k)* (fac n-k)))
Run Code Online (Sandbox Code Playgroud)
1 - prob (3,2)给出结果0.99992575,这是不正确的,应该是0.99970.有谁知道我哪里出错了?
我发现自己写了这样的东西:
myFnc (MyDataType0 x y z) = someFunction0 (MyDataType0 x y z)
myFnc (MyDataType1 x y) = someFunction1 (MyDataType1 x y)
...
Run Code Online (Sandbox Code Playgroud)
即我需要对某些数据构造函数进行模式匹配,然后使用整个实例.我目前的方法是匹配数据类型,获取其所有字段,然后在函数体中重建它.有没有更好的办法?