Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
例外:Prelude.head:Haskell中的空列表_Haskell - Fatal编程技术网

例外:Prelude.head:Haskell中的空列表

例外:Prelude.head:Haskell中的空列表,haskell,Haskell,我不明白为什么我会犯这个错误。我已经阅读了关于这个错误的所有问题,我没有这些问题。有人能帮忙吗。注释是给定示例的硬代码,因此我们可以使用自顶向下的方法。当我完成一个函数时,我会注释掉硬代码。我只实现了前两个功能。在ghci中,当您运行文件时,键入“main”,如果它打印为true,则代码正在工作。当我分别测试这两个函数时,它们返回true,但同时返回上述错误 import Data.List ((\\), sort) type Board = [[Int]] inputBoard :: Bo

我不明白为什么我会犯这个错误。我已经阅读了关于这个错误的所有问题,我没有这些问题。有人能帮忙吗。注释是给定示例的硬代码,因此我们可以使用自顶向下的方法。当我完成一个函数时,我会注释掉硬代码。我只实现了前两个功能。在ghci中,当您运行文件时,键入“main”,如果它打印为true,则代码正在工作。当我分别测试这两个函数时,它们返回true,但同时返回上述错误

import Data.List ((\\), sort)

type Board = [[Int]]

inputBoard :: Board
inputBoard = 
    [[5,3,0, 0,7,0, 0,0,0],
     [6,0,0, 1,9,5, 0,0,0],
     [0,9,8, 0,0,0, 0,6,0],
     [8,0,0, 0,6,0, 0,0,3],
     [4,0,0, 8,0,3, 0,0,1],
     [7,0,0, 0,2,0, 0,0,6],
     [0,6,0, 0,0,0, 2,8,0],
     [0,0,0, 4,1,9, 0,0,5],
     [0,0,0, 0,8,0, 0,7,9]]

solvedBoard :: Board
solvedBoard = 
    [[5,3,4, 6,7,8, 9,1,2],
     [6,7,2, 1,9,5, 3,4,8],
     [1,9,8, 3,4,2, 5,6,7],
     [8,5,9, 7,6,1, 4,2,3],
     [4,2,6, 8,5,3, 7,9,1],
     [7,1,3, 9,2,4, 8,5,6],
     [9,6,1, 5,3,7, 2,8,4],
     [2,8,7, 4,1,9, 6,3,5],
     [3,4,5, 2,8,6, 1,7,9]]

type Coords = (Int,Int)
type BoardElement = (Coords,Int)

inputBoardElements :: [BoardElement]
inputBoardElements = 
    [((0,0),5),((0,1),3),((0,4),7),((1,0),6),((1,3),1),((1,4),9),((1,5),5),
     ((2,1),9),((2,2),8),((2,7),6),((3,0),8),((3,4),6),((3,8),3),((4,0),4),
     ((4,3),8),((4,5),3),((4,8),1),((5,0),7),((5,4),2),((5,8),6),((6,1),6),
     ((6,6),2),((6,7),8),((7,3),4),((7,4),1),((7,5),9),((7,8),5),((8,4),8),
     ((8,7),7),((8,8),9)]

inputBoardEmpty :: [Coords]
inputBoardEmpty = 
    [(0,2),(0,3),(0,5),(0,6),(0,7),(0,8),(1,1),(1,2),(1,6),(1,7),(1,8),
     (2,0),(2,3),(2,4),(2,5),(2,6),(2,8),(3,1),(3,2),(3,3),(3,5),(3,6),
     (3,7),(4,1),(4,2),(4,4),(4,6),(4,7),(5,1),(5,2),(5,3),(5,5),(5,6),
     (5,7),(6,0),(6,2),(6,3),(6,4),(6,5),(6,8),(7,0),(7,1),(7,2),(7,6),
     (7,7),(8,0),(8,1),(8,2),(8,3),(8,5),(8,6)]

solvedBoardElements :: [BoardElement]
solvedBoardElements = 
    [((0,0),5),((0,1),3),((0,2),4),((0,3),6),((0,4),7),((0,5),8),((0,6),9),
     ((0,7),1),((0,8),2),((1,0),6),((1,1),7),((1,2),2),((1,3),1),((1,4),9),
     ((1,5),5),((1,6),3),((1,7),4),((1,8),8),((2,0),1),((2,1),9),((2,2),8),
     ((2,3),3),((2,4),4),((2,5),2),((2,6),5),((2,7),6),((2,8),7),((3,0),8),
     ((3,1),5),((3,2),9),((3,3),7),((3,4),6),((3,5),1),((3,6),4),((3,7),2),
     ((3,8),3),((4,0),4),((4,1),2),((4,2),6),((4,3),8),((4,4),5),((4,5),3),
     ((4,6),7),((4,7),9),((4,8),1),((5,0),7),((5,1),1),((5,2),3),((5,3),9),
     ((5,4),2),((5,5),4),((5,6),8),((5,7),5),((5,8),6),((6,0),9),((6,1),6),
     ((6,2),1),((6,3),5),((6,4),3),((6,5),7),((6,6),2),((6,7),8),((6,8),4),
     ((7,0),2),((7,1),8),((7,2),7),((7,3),4),((7,4),1),((7,5),9),((7,6),6),
     ((7,7),3),((7,8),5),((8,0),3),((8,1),4),((8,2),5),((8,3),2),((8,4),8),
     ((8,5),6),((8,6),1),((8,7),7),((8,8),9)]

main :: IO ()
main = print (sudoku inputBoard == solvedBoard)  

sudoku :: Board -> Board
sudoku [] = []
sudoku b =
    let bde = fst (toElements b)
        cd = snd (toElements b)
        allboards = sudokuElements [bde] cd
    in fromElements (head allboards)

--sudoku b 
    --| b == inputBoard = solvedBoard
    --| otherwise = error "sudoku not implemented"

sudokuElements :: [[BoardElement]] -> [Coords] -> [[BoardElement]]
sudokuElements a [] = a
sudokuElements [] _ = []
sudokuElements (be:bes) (cd:cds) =
    let xs = validVals be cd
        temp = [[(cd,x)] | x <- xs]
    in sudokuElements temp cds

-- | head bes == inputBoardElements && empty == inputBoardEmpty = 
--     [solvedBoardElements]
-- | otherwise = error "sudokuElements not implemented"

validVals :: [BoardElement] -> Coords -> [Int]
validVals bes rc
    | bes == tail solvedBoardElements && rc==(8,6) = [1]
    | bes \\ solvedBoardElements == [] = [1..9]
    | otherwise = []

toElements :: Board -> ([BoardElement],[Coords])
toElements b 
    | b==inputBoard = (inputBoardElements, inputBoardEmpty)    
    | otherwise = error "toElements not implemented"


fromElements :: [BoardElement] -> Board
fromElements bes 
    | sort bes == solvedBoardElements = solvedBoard
    | otherwise = error "fromElements not implemented"
导入数据。列表((\\),排序) 类型板=[[Int]] 输入板 输入板= [[5,3,0, 0,7,0, 0,0,0], [6,0,0, 1,9,5, 0,0,0], [0,9,8, 0,0,0, 0,6,0], [8,0,0, 0,6,0, 0,0,3], [4,0,0, 8,0,3, 0,0,1], [7,0,0, 0,2,0, 0,0,6], [0,6,0, 0,0,0, 2,8,0], [0,0,0, 4,1,9, 0,0,5], [0,0,0, 0,8,0, 0,7,9]] 溶解板 溶解板= [[5,3,4, 6,7,8, 9,1,2], [6,7,2, 1,9,5, 3,4,8], [1,9,8, 3,4,2, 5,6,7], [8,5,9, 7,6,1, 4,2,3], [4,2,6, 8,5,3, 7,9,1], [7,1,3, 9,2,4, 8,5,6], [9,6,1, 5,3,7, 2,8,4], [2,8,7, 4,1,9, 6,3,5], [3,4,5, 2,8,6, 1,7,9]] 类型Coords=(Int,Int) 类型BoardElement=(坐标,Int) inputBoardElements::[BoardElement] inputBoardElements= [((0,0),5),((0,1),3),((0,4),7),((1,0),6),((1,3),1),((1,4),9),((1,5),5), ((2,1),9),((2,2),8),((2,7),6),((3,0),8),((3,4),6),((3,8),3),((4,0),4), ((4,3),8),((4,5),3),((4,8),1),((5,0),7),((5,4),2),((5,8),6),((6,1),6), ((6,6),2),((6,7),8),((7,3),4),((7,4),1),((7,5),9),((7,8),5),((8,4),8), ((8,7),7),((8,8),9)] inputBoardEmpty::[Coords] inputBoardEmpty= [(0,2),(0,3),(0,5),(0,6),(0,7),(0,8),(1,1),(1,2),(1,6),(1,7),(1,8), (2,0),(2,3),(2,4),(2,5),(2,6),(2,8),(3,1),(3,2),(3,3),(3,5),(3,6), (3,7),(4,1),(4,2),(4,4),(4,6),(4,7),(5,1),(5,2),(5,3),(5,5),(5,6), (5,7),(6,0),(6,2),(6,3),(6,4),(6,5),(6,8),(7,0),(7,1),(7,2),(7,6), (7,7),(8,0),(8,1),(8,2),(8,3),(8,5),(8,6)] solvedBoardElements::[BoardElement] solvedBoardElements= [((0,0),5),((0,1),3),((0,2),4),((0,3),6),((0,4),7),((0,5),8),((0,6),9), ((0,7),1),((0,8),2),((1,0),6),((1,1),7),((1,2),2),((1,3),1),((1,4),9), ((1,5),5),((1,6),3),((1,7),4),((1,8),8),((2,0),1),((2,1),9),((2,2),8), ((2,3),3),((2,4),4),((2,5),2),((2,6),5),((2,7),6),((2,8),7),((3,0),8), ((3,1),5),((3,2),9),((3,3),7),((3,4),6),((3,5),1),((3,6),4),((3,7),2), ((3,8),3),((4,0),4),((4,1),2),((4,2),6),((4,3),8),((4,4),5),((4,5),3), ((4,6),7),((4,7),9),((4,8),1),((5,0),7),((5,1),1),((5,2),3),((5,3),9), ((5,4),2),((5,5),4),((5,6),8),((5,7),5),((5,8),6),((6,0),9),((6,1),6), ((6,2),1),((6,3),5),((6,4),3),((6,5),7),((6,6),2),((6,7),8),((6,8),4), ((7,0),2),((7,1),8),((7,2),7),((7,3),4),((7,4),1),((7,5),9),((7,6),6), ((7,7),3),((7,8),5),((8,0),3),((8,1),4),((8,2),5),((8,3),2),((8,4),8), ((8,5),6),((8,6),1),((8,7),7),((8,8),9)] main::IO() main=打印(数独输入板==solvedBoard) 数独::棋盘->棋盘 数独[]=[] 数独b= 设bde=fst(元素b) cd=snd(元素b) allboards=sudokuElements[bde]cd in-fromElements(头部所有板) --数独b --|b==输入板=求解板 --|否则=错误“未实现数独” sudokuElements::[[BoardElement]->[Coords]->[[BoardElement]] Sudokua[]=a 数独元素[].[] 数独元素(be:bes)(cd:cds)= 设xs=validVals为cd 温度=[(cd,x)]| x坐标->[Int] 有效贝斯rc |bes==尾部解算平衡板和rc==(8,6)=[1] |bes\\solvedBoardElements==[]=[1..9] |否则=[] toElements::Board->([BoardElement]、[Coords]) 元素b |b==inputBoard=(inputBoardElements,inputBoardEmpty) |否则=错误“toElements not Implements” fromElements::[BoardElement]->Board frombes |排序bes==solvedBoardElements=solvedBoard |否则=错误“未实现fromElements”
问题是
所有板
/对
sudokuElements
的调用返回一个空列表

如果没有看到整个程序,很难给你一个确切的原因

我建议一般避免使用
head
,因为它是一个局部函数。相反,使用模式匹配

就你而言,这个

fromElements (head allBoards)
可以重写为

case allBoards of
  [] -> error "allBoards returned an empty list." -- Or whatever
  (first:_) -> fromElements first

问题是
allBoards
/对
sudokuElements
的调用返回一个空列表

如果没有看到整个程序,很难给你一个确切的原因

我建议一般避免使用
head
,因为它是一个局部函数。相反,使用模式匹配

就你而言,这个

fromElements (head allBoards)
可以重写为

case allBoards of
  [] -> error "allBoards returned an empty list." -- Or whatever
  (first:_) -> fromElements first

我使用自上而下的方法,所以我还没有为validVals编写代码(尽管我知道它将做什么,以及它的输入和输出是什么)假设您的代码中没有使用
head
,那么您遇到的错误一定来自其他地方,并且您的问题目前无法回答。请将错误来自的代码片段张贴出来,其中必须使用
head
函数。@AlexisKing我单独测试了数独函数,我t没有给我一个错误,所以我假设错误在另一个函数中。我编辑了代码,错误仍然存在。我使用自上而下的方法,所以我没有为validVals编写代码(尽管我知道它将做什么以及它的输入和输出是什么)如果你的代码中没有使用
head
,那么你得到的错误肯定来自其他地方,而你的问题目前无法回答。将错误来自的代码片段张贴出来,其中必须使用
head
函数。@AlexisKing我对数独函数进行了单独和独立的测试