如何使用plai-typed从Racket中的列表中筛选出第一个匹配项?

时间:2017-09-03 05:31:38

标签: functional-programming racket

在使用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))

因此,当我只想删除第一个时,我正在做的事情会删除所有事件。

2 个答案:

答案 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)))