gpt4 book ai didi

lambda - 在 Racket 中使用 lambda 进行迭代?

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

这可能是一个简单的问题,但我似乎无法弄清楚。在下面的示例中,我想创建一个函数 list-of-obj 以递归方式创建项目列表。

示例:

> (list-of-obj 'a 5)
'(a a a a a)

代码:

#lang racket
(define (list-of-obj obj n)
(letrec ((helper
(lambda (obj n result)
(if (> n 0)
(helper obj (- n 1) (cons obj result))
result))))
helper obj n 0))

然而,这会导致输出 0。任何指针?我是新来的 Racket /计划。

最佳答案

Racket 中最惯用的解决方案是:

(make-list 5 'a)
=> '(a a a a a)

也就是说,如果内置函数可以满足您的需求,您就不应该重新发明轮子。但如果您需要从头开始编写,这应该可以解决问题:

(define (list-of-obj obj n)
(letrec ((helper
(lambda (obj n result)
(if (> n 0)
(helper obj (- n 1) (cons obj result))
result))))
(helper obj n '())))

您的代码有两个问题:

  • helper 的调用必须用 () 包围,因为这就是您在 Scheme 中调用过程的方式。
  • 累加器的初始值必须是一个空列表,因为我们正在构建一个列表作为输出,而不是您所拥有的 0

关于lambda - 在 Racket 中使用 lambda 进行迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38208376/

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