2010-03-13 20 views
7

Necesito generar un conjunto de coordenadas en Erlang. Dada una coordenada, digamos (x, y) Necesito generar (x-1, y-1), (x-1, y), (x-1, y + 1), (x, y-1), (x, y + 1), (x + 1, y-1), (x + 1, y), (x + 1, y + 1). Básicamente todas las coordenadas circundantes EXCEPTO la coordenada media (x, y). Para generar las nueve coordenadas, hago esto actualmente:Erlang lista de comprensión, atravesando dos listas y excluyendo los valores

[{X,Y} || X<-lists:seq(X-1,X+1), Y<-lists:seq(Y-1,Y+1)] 

Pero esto genera todos los valores, incluyendo (X, Y). ¿Cómo excluyo (X, Y) de la lista usando filtros en la lista de comprensión?

Respuesta

12
[{X,Y} || X <- lists:seq(X0-1,X0+1), 
      Y <- lists:seq(Y0-1,Y0+1), {X,Y} =/= {X0,Y0}]. 
1

Agregar -- [{X,Y}] probablemente sea lo más fácil.

2

Creo que distinguir entre parámetros y valores generados ayudará un poco:

[{Xc,Yc} || Xc<-lists:seq(X-1,X+1), Yc<-lists:seq(Y-1,Y+1), Xc=/=X orelse Yc=/=Y] 

o de lo contrario

[{Xc,Yc} || Xc<-lists:seq(X-1,X+1), Yc<-lists:seq(Y-1,Y+1)] -- [{X,Y}] 
Cuestiones relacionadas