【问题标题】:Erlang list comprehension, traversing two lists and excluding valuesErlang列表推导,遍历两个列表并排除值
【发布时间】:2010-03-13 04:35:19
【问题描述】:

我需要在 Erlang 中生成一组坐标。给定一个坐标,比如说 (x,y) 我需要生成 (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)。基本上除了中间坐标(x,y)之外的所有周围坐标。为了生成所有九个坐标,我目前这样做:

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

但这会生成所有值,包括 (X,Y)。如何使用列表理解中的过滤器从列表中排除 (X,Y)?

【问题讨论】:

    标签: erlang list-comprehension


    【解决方案1】:
    [{X,Y} || X <- lists:seq(X0-1,X0+1),
              Y <- lists:seq(Y0-1,Y0+1), {X,Y} =/= {X0,Y0}].
    

    【讨论】:

      【解决方案2】:

      我认为区分参数和生成的值会有所帮助:

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

      否则

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

      【讨论】:

        【解决方案3】:

        添加-- [{X,Y}] 可能是最简单的事情。

        【讨论】:

          猜你喜欢
          • 2012-06-13
          • 2012-08-15
          • 1970-01-01
          • 1970-01-01
          • 2010-12-12
          相关资源
          最近更新 更多