Lambda 函数不返回任何值

问题描述 投票:0回答:1

我尝试使用递归函数通过使用 car/cdr 函数的组合来从列表列表中返回对。

y 是一个空列表,它将存储 ev-lst 中的对,然后返回到控制台,ev-lst 是我将用来访问这些对的列表列表。 ev-lst 中的每个子列表的格式为:(整数、整数、对)

从第一个到倒数第二个子列表,程序应在该特定迭代中将“第一个”子列表中的对附加到 y。

之后,它应该将其余的子列表作为参数传递给函数,以便它再次迭代。当它完成最终迭代时,每个迭代的 y 将被返回,然后附加到前一个迭代的 y 直到到达末尾,此时最终 y 将与所有对一起返回到控制台。

当只剩下 1 个子列表时,使用不同的 car/cdr 函数来访问该对并返回它,但这会产生一个错误,表明已违反合同。我尝试更改 car/cdr 功能,但不幸的是它产生了相同的结果。我不知道如何解决它。

代码是:

(define (event-params-lst ev-lst)
  (let ((y (list '() )))
    (if (< 1 (length ev-lst))
      (append y (cddar ev-lst)
       append y (event-params-lst (cdr ev-lst)))
        (
         (caddr ev-lst)
         )
        )
    (y))
  )
recursion scheme racket
1个回答
0
投票

从你的描述中很难理解预期的结果是什么。
我认为主要问题是您正在考虑循环和突变,就好像您正在使用其他语言进行编程,其中这些是基本构建块,并且您正在描述该代码而不是它想要解决的问题解决。

但是,听起来您的实际问题是从三元组列表的每个元素中提取第三个元素。
也就是说,

((a b c) (d e f) (g h i) ...) --> (c f i ...)

这只是

(define (event-params-lst ev-lst)
    (map caddr ev-lst))

或者,在 Racket 中并且更具可读性,

(define (event-params-lst ev-lst)
    (map third ev-lst))
© www.soinside.com 2019 - 2024. All rights reserved.