32 lines
		
	
	
		
			478 B
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			478 B
		
	
	
	
		
			Plaintext
		
	
	
	
pub fn filter(xs: List<a>, f: fn(a) -> Bool) -> List<a> {
 | 
						|
  when xs is {
 | 
						|
    [] ->
 | 
						|
      []
 | 
						|
    [x, ..rest] ->
 | 
						|
      if f(x) {
 | 
						|
        [x, ..filter(rest, f)]
 | 
						|
      } else {
 | 
						|
        filter(rest, f)
 | 
						|
      }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
pub fn unique(xs: List<a>) -> List<a> {
 | 
						|
  when xs is {
 | 
						|
    [] ->
 | 
						|
      []
 | 
						|
    [x, ..rest] ->
 | 
						|
      [x, ..unique(filter(rest, fn(y) { y != x }))]
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
test unique_1() {
 | 
						|
  unique([]) == []
 | 
						|
}
 | 
						|
 | 
						|
test unique_2() {
 | 
						|
  let xs =
 | 
						|
    [1, 2, 3, 1]
 | 
						|
  unique(xs) == [1, 2, 3]
 | 
						|
}
 |