gpt4 book ai didi

list - 方案:列表中的对象

转载 作者:行者123 更新时间:2023-12-01 05:14:19 25 4
gpt4 key购买 nike

我有一个方案中的对象列表,如下所述。例如,从列表中取出第一个元素时,如何调用对象函数?

(define persons false)
(define length 10)

(let loop ((n 0))
(if (< n length)
(begin
(define newp (make-person))
(send newp setage (- 50 n))

(cond
((= n 0)
(set! persons (list newp)))
(else
(set! persons (cons persons newp)))
)

(loop (+ n 1))
)
)
)

(define (firstpersonage)
(send (car persons) getage)
)

当调用 firstpersonage 时,我收到错误消息,指出没有这样的方法。有没有办法将第一个对象“转换”为“人”类型?

谢谢!

最佳答案

请先do学会indent Lisp 正确。

其次,你的问题是你已经决定使用一堆副作用来构建 Scheme 中的人员列表(结果,你绊倒了其中一个更好的点列表构造)。

在这种情况下我会做的是写

(define persons
(map (lambda (n)
(let ((newp (make-person)))
(send newp setage (- 50 n))
newp))
(iota 10)))

(define (firstpersonage)
(send (car persons) getage))

也就是说,将person定义为从50岁到41岁的十个人的列表。这样做可以避免许多错误的可能性,包括你刚刚被咬的那个。

如果您绝对不能忍受与您的 set! 分开,则错误似乎在行中

(set! persons (cons persons newp))

cons 不会附加两个列表,它会向列表的头部添加一个新元素。例如

(cons 3 (list 2 1)) => (3 2 1)

如果你以相反的方式进行,你不会完全得到你要找的东西

(cons (list 1 2) 3) => ((1 2) . 3)

关于list - 方案:列表中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8653161/

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