小编Mar*_*ark的帖子

检查对象的父类

我想知道一种方法,如何检查一个对象是否属于某个类,或从中派生出来.例如:

(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)

或者,还将理解返回给定对象(或类)的所有基类的列表的函数.

lisp inheritance common-lisp clos

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

如何生成相同系列的伪随机整数?

是否在Clojure中生成或多或少的标准解决方案来生成相同系列的伪随机整数?

我知道用于随机化的三个标准函数:randrand-intrand-nth,但它们似乎没有提供“设置”其内部状态的任何方法。

random clojure

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

Haskell 函数 foldl (\xy -> x*2 + y*2) 0 行为

我遇到了一个问题。这两个函数有什么区别:

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)

haskell fold

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

为什么CLOS插槽可以不绑定?

据说,只有Common Lisp中的特殊变量才能解除绑定.对于所有词汇变量,默认值为nil.我认为类槽存在于封闭之类的东西中,但显然它们不存在.

如果我定义一个没有:initform参数的CLOS插槽(希望它们将被绑定nil)并且在创建实例时不提供值,我将获得一个带有未绑定插槽的实例.为什么会这样?这不方便.

lisp common-lisp clos slot

0
推荐指数
2
解决办法
602
查看次数

使用 Emacs 浏览 HyperSpec 时出现“找不到可用的浏览器”错误

我想使用 Emacs 访问HyperSpec(Common Lisp ANSI 标准的 html 页面)。

这是我所做的:

  1. 下载、解压并复制 HyperSpec 文件到其中~/.emacs.d/HyperSpec/
  2. 下载“clhs.el”并将其放入/usr/share/emacs/site-lisp/
  3. (setq common-lisp-hyperspec-rooot "~/.emacs.d/HyperSpec/")在我的.emacs文件中添加了一行;
  4. 试过M+ x slime-hyperspec-lookup RET do* RET

输入此命令后,我收到以下错误:

找不到可用的浏览器

虽然我很喜欢Emacs,用了大概两年,但是我没有用它浏览任何东西,所以不知道错误信息说的是什么类型的浏览器。

我该如何解决问题?

browser emacs common-lisp

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

多数逻辑解码Haskell

我必须计算正确解码位复制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.有谁知道我哪里出错了?

logic haskell decoding

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

优雅的方式来写模式

我发现自己写了这样的东西:

myFnc (MyDataType0 x y z) = someFunction0 (MyDataType0 x y z)
myFnc (MyDataType1 x y)   = someFunction1 (MyDataType1 x y)
...
Run Code Online (Sandbox Code Playgroud)

即我需要对某些数据构造函数进行模式匹配,然后使用整个实例.我目前的方法是匹配数据类型,获取其所有字段,然后在函数体中重建它.有没有更好的办法?

haskell pattern-matching

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