我知道如何获取列表中的第一个n
元素,
(define (countup n ls)
(cond
[(zero? n) '()]
[else (cons (first ls) (countup (sub1 n) (rest ls)))]))
但是如何为列表中的最后 n
元素执行此类操作(不使用list-ref)?
如果我致电(countup 3 '(a b c d e))
,我会获得(list a b c)
。我需要输入(counter 3 '(a b c d e))
并获取(list c d e)
。
如果给定的数字n
大于列表的长度,我需要错误消息。
答案 0 :(得分:2)
只需使用内置的take-right
程序,它就能满足您的需求:
(take-right '(a b c d e) 3)
=> '(c d e)
或者您可以使用原始程序从头开始实现它:
(define (counter n lst)
(define (move n lst)
(if (zero? n)
lst
(move (sub1 n) (rest lst))))
(define (trim-left lst rst)
(if (empty? rst)
lst
(trim-left (rest lst) (rest rst))))
(trim-left lst (move n lst)))
它也按预期工作:
(counter 3 '(a b c d e))
=> '(c d e)
答案 1 :(得分:0)
我想我会使用本地fn从左侧切碎项目,然后返回剩余的项目。如果要求返回负数项,则以下内容也会返回'()。您可能也希望将此视为错误。 #f表示输入错误,即尝试获取的项目多于列表
<b-form-input
v-model="name"
@input="$v.name.$touch()"
:state="$v.name.$dirty ? !$v.name.$error : null"
/>