相关疑难解决方法(0)

LISP:关键字参数,提供-p

目前我正在通过Peter Seibel的"Practical Common Lisp"工作.

在"实用:简单数据库"(http://www.gigamonkeys.com/book/practical-a-simple-database.html)一章中,Seibel通过以下示例解释了关键字参数和提供参数的用法:

(defun foo (&key a (b 20) (c 30 c-p)) (list a b c c-p))
Run Code Online (Sandbox Code Playgroud)

结果:

(foo :a 1 :b 2 :c 3)  ==> (1 2 3 T)
(foo :c 3 :b 2 :a 1)  ==> (1 2 3 T)
(foo :a 1 :c 3)       ==> (1 20 3 T)
(foo)                 ==> (NIL 20 30 NIL)
Run Code Online (Sandbox Code Playgroud)

因此,如果我在参数列表的开头使用&key,我可以使用3个参数名称,默认值和第三个参数列表,如果参数是否已提供.好.但是看看上面例子中的代码:

(list a b c c-p)
Run Code Online (Sandbox Code Playgroud)

lisp解释器如何知道cp是我的"提供的参数"?

lisp common-lisp

10
推荐指数
2
解决办法
1401
查看次数

Scheme默认对象的Common Lisp等价物是什么?

我正在将一些Scheme代码转换为Common Lisp.我不知道Scheme.我知道一点Common Lisp.

这是Scheme代码:

(define (close-enuf? h1 h2 #!optional tolerance scale)
    (if (default-object? tolerance)
       ...))
Run Code Online (Sandbox Code Playgroud)

我将该Scheme代码转换为此Common Lisp:

(defun close-enuf? (h1 h2 &optional tolerance scale)
    (if (xxx tolerance)
        ...))
Run Code Online (Sandbox Code Playgroud)

除此之外xxx,这看起来不错吗?

现在,关于xxx什么是Common Lisp等价物default-object?

我找到了这个定义default-object?:

The predicate default-object?, which is true only of default objects, can be used to determine which optional parameters were supplied, and which  were defaulted.
Run Code Online (Sandbox Code Playgroud)

我不确定那是什么意思.是否说default-object?如果参数的值是默认值(不是传入的值),则返回true?

scheme common-lisp

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

标签 统计

common-lisp ×2

lisp ×1

scheme ×1