当前位置:  开发笔记 > 大数据 > 正文

如何在方案中获取一个列表(A子列表)?

如何解决《如何在方案中获取一个列表(A子列表)?》经验,为你挑选了3个好方法。

给定一个列表,我如何选择一个包含原始列表切片的新列表(给定偏移量和元素数量)?

编辑:

到目前为止的好建议.SRFI的其中一个没有指定的东西吗?这似乎是一个非常基本的事情,所以我很惊讶我需要在用户土地上实现它.



1> Nathan Shive..:

奇怪的是,slice不具备SRFI-1 ,但你可以把它缩短了使用SRFI-1的takedrop:

(define (slice l offset n)
  (take (drop l offset) n))

我认为我在Scheme中使用的扩展程序之一,如PLT Scheme库或Swindle,会有这种内置功能,但似乎并非如此.它甚至没有在新的R6RS库中定义.



2> dsm..:

以下代码将执行您想要的操作:

(define get-n-items
    (lambda (lst num)
        (if (> num 0)
            (cons (car lst) (get-n-items (cdr lst) (- num 1)))
            '()))) ;'

(define slice
    (lambda (lst start count)
        (if (> start 1)
            (slice (cdr lst) (- start 1) count)
            (get-n-items lst count))))

例:

> (define l '(2 3 4 5 6 7 8 9)) ;'
()
> l
(2 3 4 5 6 7 8 9)
> (slice l 2 4)
(3 4 5 6)
> 



3> Josh Gagnon..:

你可以试试这个功能:

序列开始和可选结束

启动参数的偏移.通过简单地添加start + number-of-elements ,end参数可以很容易地转换为要抓取的元素数.

一个小小的好处是subseq适用于所有序列,这不仅包括列表,还包括字符串和向量.

编辑:似乎并非所有的lisp实现都有subseq,尽管如果你拥有它,它可以正常工作.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有