Tôi là một lập trình viên Haskell khá mới và tôi đang cố gắng tìm ra cách để có được một số giá trị thành một kiểu dữ liệu đại số.Khởi tạo kiểu dữ liệu đại số từ danh sách
Tôi có một loại bản ghi dữ liệu:
data OrbitElements = OrbitElements { epoch :: Double,
ecc :: Double,
distPeri :: Double,
incl :: Double,
longAscNode :: Double,
argPeri :: Double,
timePeri :: Double,
meanMotion :: Double,
meanAnomaly :: Double,
trueAnomaly :: Double,
semiMajorAxis :: Double,
distApo :: Double,
period :: Double
}
tôi kéo vào một số thông tin từ một tập tin văn bản, mà kết thúc trong một danh sách các đôi. Có cách nào dễ dàng để khởi tạo kiểu dữ liệu này với danh sách không? Tôi chỉ có thể gọi từng setter riêng lẻ nhưng điều đó có vẻ không hiệu quả khủng khiếp khi tôi đã có tất cả các giá trị trong một danh sách.
let d = [2456382.5,6.786842103348031e-3,0.7184187640759256,3.394660181513041,76.64395338801751,55.2296201483587,2456457.141012543,1.602144936476915,240.4142797010899,239.7408018186761,0.7233278761603762,0.7282369882448266,224.6987721295883]
let o = OrbitElements
let epoch o = d !! 0
let ecc o = d !! 1
-- and so on
Tôi đang thiếu gì?
Thanks, điều này khẳng định nghi ngờ của tôi, và bất kỳ câu trả lời mà bắt đầu ra 'Trước hết, chúng ta định nghĩa hai trình phân tích cú pháp ... "rất tuyệt trong sách của tôi. :) –
Tùy chọn" bằng tay "trở thành một trình cắt nhỏ hơn khi được kết hợp với [' -XRecordWildCards'] (http://www.haskell.org/ghc/docs/7.4 .2/html/users_guide/syntax-extns.html # record-wildcards): 'fromList [epoch, ecc, distPeri, incl, longAscNode, argPeri, timePeri, meanMotion, meanAnomaly, trueAnomaly, semiMajorAxis, distApo, period] = Chỉ OrbitElements {..} '. –