所以我想计算国际象棋比赛的所有可能动作.当我计算它们时,我想将它们存储在一个特殊的数据结构中,因此很容易将所有的动作输出为表格的一个字符串(Stepts,Start,End)移动的一个例子是"2,1 -1,3-1"步长为2,我们从1-1到3-1.
为此,我创建了自定义数据类型,并希望在列表理解期间创建它们的多个实例,并同时构造不同的数据类型.到目前为止,我不确定,如何修复语法或在Haskell中是否可行.
到目前为止,我能够在列表推导中创建1个自定义数据类型,如下所示:
[ Position x y | x<- [1..5] , y<-[1..5]]
Run Code Online (Sandbox Code Playgroud)
但我想在一个列表理解期间创建多个位置,我认为它将是:
[ Position x y, Position x y | x<- [1..5] , y<-[1..5]]
Run Code Online (Sandbox Code Playgroud)
但结果是:
error: parse error on input ‘|’
Run Code Online (Sandbox Code Playgroud)
这是我定义自定义类型的方式:
data Move = Move{ steps:: Int
, start:: Position
, end :: Position
} deriving (Read, Show, Eq)
data Position = Position{
x_pos:: Int
, y_pos :: Int
} deriving (Read, Show, Eq)
Run Code Online (Sandbox Code Playgroud)
最后我想做这样的事情:
[ Move(x, Position 1 1, Position x y ) | x<- [1..5] , y<-[1..5]]
Run Code Online (Sandbox Code Playgroud)
你有两种可能性:
返回职位列表清单:
[ [Position x y, Position x y] | x<- [1..5] , y<-[1..5]]
Run Code Online (Sandbox Code Playgroud)
然后你可以使用concat以下方法将它们合并到单个列表中
concat [ [Position x y, Position x y] | x<- [1..5] , y<-[1..5]]
Run Code Online (Sandbox Code Playgroud)只需使用do符号:
do
x <- [1..5]
y <- [1..5]
[ Position 1 1, Position x y]
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |