2010-03-13 10 views
7

Ich brauche eine Reihe von Koordinaten in Erlang zu generieren. Gegeben sei eine Koordinate, sagen wir (x, y) Ich muss erzeugen (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). Grundsätzlich alle umgebenden Koordinaten außer der mittleren Koordinate (x, y). Um alle neun Koordinaten zu erzeugen, mache ich das zur Zeit:Erlang Listenverstehen, durchqueren zwei Listen und ohne Werte

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

Aber das erzeugt alle Werte, einschließlich (X, Y). Wie schließe ich (X, Y) aus der Liste mit Filtern im Listenverständnis aus?

Antwort

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

Hinzufügen -- [{X,Y}] wäre wahrscheinlich die einfachste Sache.

2

Ich denke, unterscheiden zwischen den Parametern und erzeugt Werte wird ein wenig helfen:

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

oder sonst

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