Scheme 默认对象的 Common Lisp 等价物是什么?
What is the Common Lisp equivalent of the Scheme default-object?
我正在将一些 Scheme 代码转换为 Common Lisp。我不知道方案。我知道一点 Common Lisp。
方案代码如下:
(define (close-enuf? h1 h2 #!optional tolerance scale)
(if (default-object? tolerance)
...))
我将该 Scheme 代码转换为这个 Common Lisp:
(defun close-enuf? (h1 h2 &optional tolerance scale)
(if (xxx tolerance)
...))
除了 xxx
之外,这样看起来对吗?
现在,关于 xxx
,default-object?
的 Common Lisp 等价物是什么
我找到了 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.
我不确定那是什么意思。如果参数的值是默认值(不是传入的值),它是说 default-object?
returns 为真吗?
规范的 Ordinary Lambda Lists 部分对此进行了介绍:
lambda-list::=
(var*
[&optional {var | (var [init-form [supplied-p-parameter]])}*]
[&rest var]
[&key {var | ({var | (keyword-name var)} [init-form [supplied-p-parameter]])}* [&allow-other-keys]]
[&aux {var | (var [init-form])}*])
&optional
参数可以是单个符号或包含两个或三个元素的列表。
在这种情况下,第二个值是默认值。
第三个值命名一个包含布尔值的变量:当且仅当绑定到 var
的值由调用者提供时,它才为真。
否则,NIL
表示该值为默认值。
例如:
(defun foo (&optional (x 1 xp))
(list x xp))
没有提供参数:
(foo)
=> (1 nil)
带有显式参数:
(foo 2)
=> (2 T)
使用与默认值无法区分的参数:
(foo 1)
=> (1 T)
在你的情况下,那将是:
(defun close-enough-p (h1 h2 &optional (tolerance nil tolerance-p) scale)
(if tolerance-p
<supplied>
<default>))
请注意,&key
个参数也是如此。
我正在将一些 Scheme 代码转换为 Common Lisp。我不知道方案。我知道一点 Common Lisp。
方案代码如下:
(define (close-enuf? h1 h2 #!optional tolerance scale)
(if (default-object? tolerance)
...))
我将该 Scheme 代码转换为这个 Common Lisp:
(defun close-enuf? (h1 h2 &optional tolerance scale)
(if (xxx tolerance)
...))
除了 xxx
之外,这样看起来对吗?
现在,关于 xxx
,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.
我不确定那是什么意思。如果参数的值是默认值(不是传入的值),它是说 default-object?
returns 为真吗?
规范的 Ordinary Lambda Lists 部分对此进行了介绍:
lambda-list::=
(var*
[&optional {var | (var [init-form [supplied-p-parameter]])}*]
[&rest var]
[&key {var | ({var | (keyword-name var)} [init-form [supplied-p-parameter]])}* [&allow-other-keys]]
[&aux {var | (var [init-form])}*])
&optional
参数可以是单个符号或包含两个或三个元素的列表。
在这种情况下,第二个值是默认值。
第三个值命名一个包含布尔值的变量:当且仅当绑定到 var
的值由调用者提供时,它才为真。
否则,NIL
表示该值为默认值。
例如:
(defun foo (&optional (x 1 xp))
(list x xp))
没有提供参数:
(foo)
=> (1 nil)
带有显式参数:
(foo 2)
=> (2 T)
使用与默认值无法区分的参数:
(foo 1)
=> (1 T)
在你的情况下,那将是:
(defun close-enough-p (h1 h2 &optional (tolerance nil tolerance-p) scale)
(if tolerance-p
<supplied>
<default>))
请注意,&key
个参数也是如此。