从方案中的列表中获取元素

1 scheme position element list

我需要创建一个函数,它从给定位置给出的列表中返回一个元素。例如,该列表中第三个位置的元素 (2 4 3 5) 将为 3。

我有这段代码,但它没有运行。

(define (getElement lst pos)
  (if (= pos 0)
      (car lst))
  (if (> pos 0)
      (getElement (cdr lst) (- pos 1))))
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

Ósc*_*pez 5

您正在查找的过程称为list-ref- 请记住索引是从零开始的,因此“第三个”元素将位于 index 2。例如:

(list-ref '(2 4 3 5) 2)
=> 3
Run Code Online (Sandbox Code Playgroud)

现在,如果您想从头开始实施该过程,则必须考虑三种情况,您当前的解决方案离正确不远了。问你自己:

  • 如果列表为空或者给定索引超出输入列表的有效值范围,会发生什么情况?那么你必须返回一个适当的值(例如,#f)或发出错误信号
  • 如果当前位置为零会发生什么?这意味着我们找到了该元素,它是当前的元素
  • 否则,继续遍历列表,并将位置减一

我会给你一些提示,请注意,使用 acond而不是嵌套ifs 更容易编写。填空:

(define (getElement lst pos)
  (cond ((null? lst) <???>)
        ((= pos 0) <???>)
        (else (getElement <???> <???>))))
Run Code Online (Sandbox Code Playgroud)

它的工作原理就像list-ref

(getElement '(2 4 3 5) 2)
=> 3
Run Code Online (Sandbox Code Playgroud)