小编ckl*_*oan的帖子

如何使用列表推导创建多个/不同的自定义类型?

所以我想计算国际象棋比赛的所有可能动作.当我计算它们时,我想将它们存储在一个特殊的数据结构中,因此很容易将所有的动作输出为表格的一个字符串(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] …
Run Code Online (Sandbox Code Playgroud)

haskell

3
推荐指数
1
解决办法
89
查看次数

使用do创建嵌套if else语句的语法是什么

所以我只是抓住了Haskell,并坚持使用Do创建嵌套if-else语句的语法.我不确定,如果我应该使用多个Do或者如果我只用一个就可以完成所有操作.我也不确定是否应该使用return语句,如果所有分号都是必需的.

我尝试添加和删除大括号,返回语句,分号,不同的缩进,不知道还有什么要尝试.

我得到的错误如"•无法匹配预期类型'm0(m0 b0)'与实际类型'Int'•在'do'块的stmt中:a < - getVal"

  1. 这是我想要构建的那种结构,但它给了我错误.您可以将getVal函数想象为任意函数,它返回一个整数:

    func :: Int -> Int
    func val = do {
       if val < 10
          then do {
              a <- getVal0;
              b <- getVal1;
              if (val+a+b) < 0
                 then return 1
                 else return 2}
          else if val > 10 
              then do {
                 a <- getVal2;
                 b <- getVal3;
                 if (val + a +b) < 0 
                   then return 0
                   else return 1}
          else return 99;     }
    
    Run Code Online (Sandbox Code Playgroud)

get val的一个例子是:

    getVal :: Int
    getVal  = 5 …
Run Code Online (Sandbox Code Playgroud)

haskell

1
推荐指数
1
解决办法
105
查看次数

标签 统计

haskell ×2