gpt4 book ai didi

lisp - 如何在 Common Lisp 中使结构的构造函数按顺序求值?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:47 25 4
gpt4 key购买 nike

我想做类似这样的事情:

(defstruct person
real-name
(fake-name real-name)) ;if fake-name not supplied, default to real-name

但是,Common Lisp 说 变量 REAL-NAME 是未绑定(bind)的。 那么我怎样才能让构造函数按顺序计算它的参数(就像我可以使用函数关键字参数一样),或者我还应该怎么做这样做会更好吗?

最佳答案

一种方法是:

(defstruct (person
(:constructor make-person (&key real-name
(fake-name real-name))))
real-name
fake-name)

您基本上可以根据需要定制构造函数,包括

  • 提供与 make-xxx 不同的名称>
  • 让 Lisp 生成“按参数顺序”(BOA) 构造函数而不是基于关键字的构造函数

考虑

(defstruct (person 
(:constructor make-person (real-name
&optional (fake-name real-name))))
real-name
fake-name)

您甚至可以使用 &aux lambda-list 关键字初始化构造字段:

(defstruct (person
(:constructor make-person (real-name
&aux (fake-name (format nil
"fake-of-~A"
real-name)))))
real-name
fake-name)

关于lisp - 如何在 Common Lisp 中使结构的构造函数按顺序求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7426027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com