球拍在列表中的“ n”个元素的打印长度

塔可乐

我需要一些帮助来理解尾递归

    #lang racket

   (define (lista x)
   (printf(length(cons x (lista (read)))))
   )

   (lista (read))

我不知道如何结束链表的循环,然后获取长度并打印此数字。

因此,例如,如果我输入了

  2
  1
  3
  5
  7
  5
  10

它必须打印7,但是编译器始终会显示消息超时,因此我不知道我是否在正确读取输入内容,或者还有另一种方法?

凯文

您正在做的事情没有任何意义(我将在下面解释原因)。如果使用length,则可以立即返回列表的长度。之所以具有无限循环,是因为您没有停止条件(即,当列表null?结束递归时)。

我想这是一项作业,需要您手动执行,因此不使用length

(define (lngth lst)
  (if (null? lst) ; Did we checked the whole list already?
      0           ; This will put an end to the recursion !
      (+ 1        ; Tail recursive call, we add 1 because we call ourselve recusrively with the cdr of the list (hence with a list that is one shorter)
         (lngth (cdr lst)))))

现在您可以调用此过程,(lngth '(1 2 3 4 5))将返回5。


(define (lista x)
  (printf
   (length
    (cons x 
          (lista (read))))))

您的尝试有一些问题。最大的问题是它缺少停止条件,这是循环不断的原因(循环不断提示用户输入)。现在lista,由于,您将始终会一次又一次地递归调用自身(define (lista x) ... (cons x (lista ...)))

就像我在上面说的,其余的代码实际上没有任何意义。您正在使用cons而不是cdr遍历列表,并且正在使用length而不是为(+ 1 (recursive call))列表的当前元素添加一个

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在球拍中打印列表的替代元素吗?

按球拍列表中的元素排序

使用递归从字符列表中打印n个长度的组合

如何垂直打印一个列表元素?球拍

返回球拍ISL中数字列表中的最小元素?

如何同时在列表中打印第n个元素?

在“球拍”列表中查找出现次数最多的元素

球拍/方案-根据位置替换列表中的元素

如何仅获取球拍中列表的特定元素

如何减去球拍中的任意2个列表?

球拍/方案-用非固定列表中的另一个元素替换项目

如何删除球拍第二个列表中的所有元素?

OCaml - 无法打印列表的第 n 个元素

Python:计算具有不同长度的列表中第n个元素的平均值

球拍-查找在2D列表中具有相同元素的列表

球拍/方案-将功能应用于列表列表中的每个元素

当我的列表中有 3 个元素时,为什么它会打印列表 1 的长度

如何获取列表中每个项目的第n个元素,该元素本身是未知长度的向量

为什么在球拍中的一组(或列表)以#0#作为唯一数据打印?

第一:球拍/方案中的合同违规错误,用于打印列表程序的组合

球拍中的功能可交换符号列表中的两个符号

给定一个长度为N的整数排序列表,确定元素x是否在列表中

球拍-如何为列表分配长度

如果嵌套列表中存在元素,使用 for/fold 检查的正确方法是什么;球拍?

如何将2个列表合并到一个球拍中

两个空白列表是否保证为“ eq”?在球拍中?

(球拍)解释Seq以返回列表中的最后一个表达式

用三个参数在球拍中执行reduce过程:函数,基数和列表

如何从球拍的单词列表中随机选择一个单词?