考虑以下功能:
- [color=GREEN];; Group By Function - Lee Mac[/color]
- [color=GREEN];; Groups items considered equal by a given predicate function[/color]
- ([color=BLUE]defun[/color] LM:GroupByFunction ( lst fun [color=BLUE]/[/color] tmp1 tmp2 x1 )
- ([color=BLUE]if[/color] ([color=BLUE]setq[/color] x1 ([color=BLUE]car[/color] lst))
- ([color=BLUE]progn[/color]
- ([color=BLUE]foreach[/color] x2 ([color=BLUE]cdr[/color] lst)
- ([color=BLUE]if[/color] (fun x1 x2)
- ([color=BLUE]setq[/color] tmp1 ([color=BLUE]cons[/color] x2 tmp1))
- ([color=BLUE]setq[/color] tmp2 ([color=BLUE]cons[/color] x2 tmp2))
- )
- )
- ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] x1 ([color=BLUE]reverse[/color] tmp1)) (LM:GroupByFunction ([color=BLUE]reverse[/color] tmp2) fun))
- )
- )
- )
使用适当的谓词函数调用上述函数:
- (LM:GroupByFunction
- '(
- (0 0)
- (1 0.1)
- (2 0.1)
- (3 0.1)
- (4 0.2)
- (5 0.2)
- (6 0.3)
- (7 0.3)
- )
- (lambda ( a b ) (= (cadr a) (cadr b)))
- )
- Returns:
- (
- ((0 0))
- ((1 0.1) (2 0.1) (3 0.1))
- ((4 0.2) (5 0.2))
- ((6 0.3) (7 0.3))
- )
|