Tôi đang làm việc phân tích cú pháp tệp CSV thành loại CSV là danh sách Bản ghi là danh sách Trường, chỉ là Chuỗi. Sau khi chèn một hàng mới và sau đó cố gắng truy cập vào csv tôi nhận được lỗi tràn ngăn xếp c. Tôi đã đọc lỗi này có thể đến từ quá lớn một "thunk" bằng cách sử dụng đệ quy đuôi nhưng tôi không nghĩ rằng đó là những gì tôi đang làm sai?"ERROR - C tràn ngăn xếp" trong Haskell bằng cách sử dụng Hugs
type CSV = [Record]
type Record = [Field]
type Field = String
run :: IO()
run =
do
inFile <- readFile "myFile.csv"
let csv = parse inFile
let csv = (insertRow "abc,def,ghi" csv)
putStr (show csv)
insertRow :: String -> CSV -> CSV
insertRow newRow csv = csv ++ [toRecord newRow]
parse :: String -> CSV
parse file = map toRecord (parseLines file "" [])
toRecord :: String -> Record
toRecord line = parseWords line "" []
-- parseLine input partialCSV records
parseLines :: String -> String -> [String] -> [String]
parseLines [] partial records = records ++ [partial]
parseLines ('\r':xs) partial records = parseLines xs [] (records ++ [partial])
parseLines (x:xs) partial records = parseLines xs (partial ++ [x]) records
-- parseWords input partialRecord fields
parseWords :: String -> String -> [String] -> [String]
parseWords [] partial fields = fields ++ [partial]
parseWords ('"':xs) partial fields = parseQuotes xs partial fields
parseWords (',':xs) partial fields = parseWords xs [] (fields ++ [partial])
parseWords (x:xs) partial fields = parseWords xs (partial ++ [x]) fields
parseQuotes :: String -> String -> [String] -> [String]
parseQuotes ('"':xs) partial fields = parseWords xs [] (fields ++ [partial])
parseQuotes (x:xs) partial fields = parseQuotes xs (partial ++ [x]) fields
Không liên quan đến vấn đề của bạn, bản phát hành cuối cùng của cái ôm là hơn năm tuổi. Ngôn ngữ phát triển hơn nữa, còn ghci thực hiện tốt hơn (và đi kèm với trình biên dịch;). Mặc dù rất buồn, tôi khuyên bạn không nên sử dụng những cái ôm nữa (cho đến khi ai đó hồi sinh nó). –