0

そうです、私には2つの機能があります。どちらもまったく同じファイル入力を受け取ります。run2D完全に動作しoneRますが、エラーが発生しますPrelude.read: no parse。解析エラーがないということは、通常、入力ファイルに問題があることを意味しますが、明らかに問題がないことを理解しているので、これは私を混乱させます。

run2D :: [String] -> IO()
run2D [file,r] = do
    thefile <- readFile file
    let [v,e,f] = lines thefile
    print(pullChi(eg2D (verticesMake (read v)) (read e) (read f) (read r)) (read r))

oneR :: [String] -> IO()
oneR [file] = do
    thefile <- readFile file
    let [v,e,f] = lines thefile
    print(oneRobot (read v) (read e) (read f))

これが私の入力ファイルの内容です

7
[[0,1],[1,2],[0,2],[1,3],[2,3],[1,4],[2,4],[0,6],[1,6],[1,5],[5,6],[4,5]]
[[0,1,2],[1,2,3],[1,2,4],[0,1,6],[1,5,6],[1,4,5]]

と私のoneRobot関数

oneRobot :: Integer -> [Integer] -> [Integer] -> Integer -- Takes #vertices, list of edges and robots and returns the euler characteristic where number of robots = 1
oneRobot v e f = v - genericLength(e) + genericLength(f)
4

1 に答える 1

4

問題は次のとおりです。ファイルには[[Integer]]、2行目と3行目にの表現があります。

oneRobotこれを反映するように関数のシグネチャと実装を変更します。

oneRobot :: Integer -> [[Integer]] -> [[Integer]] -> Integer

または、整数リストのリストがconcatタスクに適合する場合は、次のようにフラット化します。

print(oneRobot (read v) (concat $ read e) (concat $ read f))
于 2012-11-14T11:13:39.220 に答える