在使用plai-typed的Racket中,我试图在列表中找到一个元素并删除它找到的第一个元素。然后它将返回列表,其中包含它看到的第一个元素。 这是一个例子:
'(1 2 3 2 5) 过滤掉前两个,你应该得到: '(1 3 2 5)
这就是我目前所做的,但它会返回:'(1 3 5) (filter(lambda(x)(not(equal?x 2)))''(1 2 3 2 5))
因此,当我只想删除第一个时,我正在做的事情会删除所有事件。
答案 0 :(得分:0)
不知道Racket,但也许您可以将其定义为这样的分段函数:
-- Define myFilter of an empty list to be empty
myFilter [] = []
-- Decomposes list into first element and rest of list
myFilter (x:xs)
-- Ignore `x` but include the rest of the list
| x == 2 = xs
-- Include x and apply myFilter on xs
| otherwise = x:(myFilter xs)
(Haskell代码)。
答案 1 :(得分:0)
[edit]如果您不想使用内置功能,可以执行
(define (remove-1st-helper l n)
(cond [(empty? l) empty]
[(= 1 n) l]
[(= 2 (first l)) (remove-1st-helper (rest l)(add1 n))]
[else (cons (first l) (remove-1st-helper (rest l) n))]))
(define (remove-1st-occurence l)
(if (empty? l) empty (remove-1st-helper l 0)))