繁体   English   中英

访问Racket中的存储列表

[英]Accessing a stored list in Racket

有没有办法在Racket中访问存储的列表而不传递新数据? 我正在使用的程序中使用以下代码存储了以往响应的列表。

(define (storage response lst)
  (cons response lst))

这是通过回答问题和上一个列表来创建的。 我不想更改列表中的内容,而只是查看其中的内容。 如果需要其他代码,我将很乐意展示我所拥有的。

按照当前的构造,您创建了一个名为storage的函数,该函数接受响应和一个列表,并返回一个新列表,其中以response为首,lst为尾。

如果您想获取(storage al)的头或尾,则只需调用(car (storage al))(cdr (storage al)) -这只是一个列表。

是的,有一种方法可以访问存储的列表而不将其作为新数据传递。 有关“列表访问”功能的完整列表,请参见Scheme R5RS规范的第25页的6.3.2节。 球拍可能还有更多; 其他Scheme版本可能还有其他版本。

这是一个例子。 要测试是否已经看到“响应”:

  (member response lst)

计算响应数:

  (length lst)

在Racket中访问列表元素的标准方法是使用firstrest过程(或等效的: carcdr )以递归方式遍历列表。 例如,假设您要确定列表是否包含"404"响应:

(define responses '("302" "403" "404" "505"))

(define (find-response lst response)
         ; the list is empty, the element was not found
  (cond ((empty? lst)
         #f)
         ; `first` accesses the first element in the list
        ((equal? (first lst) response)
         #t)
        (else
         ; `rest` advances to the next elements in the list
         (find-response (rest lst) response))))

(find-response responses "404")
=> #t

(find-response responses "201")
=> #f

当然,一旦了解了它的工作原理,就可以移动和使用现有的过程,例如,其他答案中建议的member 请查看可使用的列出程序,您会发现最常用的操作已经实施并且可以使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM