Trong đoạn mã tổng quát sau:cách mặc định của thực thi mã trong Haskell
nat = [1..xmax]
xmax = *insert arbitrary Integral value here*
setA = [2*x | x <- nat]
setB = [3*x | x <- nat]
setC = [4*x | x <- nat]
setD = [5*x | x <- nat]
setOne = setA `f` setB
setTwo = setC `f` setD
setAll = setOne ++ setTwo
setAllSorted = quicksort setAll
(xin lưu ý rằng 'f' là viết tắt của một chức năng của loại
f :: Integral a => [a] -> [a] -> [a]
đó không phải là đơn giản ++)
cách xử lý Haskell cố gắng in setAllSorted?
nó nhận được các giá trị cho setA và setB, tính setOne và sau đó chỉ giữ giá trị cho setOne trong bộ nhớ (trước khi tính toán mọi thứ khác)?
Hay Haskell giữ mọi thứ trong bộ nhớ cho đến khi nhận được giá trị cho setAllSorted?
Nếu trường hợp sau là trường hợp thì tôi sẽ chỉ định như thế nào (sử dụng các hàm chính, chức năng và tất cả những thứ khác của IO) mà thay vào đó nó thực hiện trước đây?
Tôi có thể cho chương trình biết thứ tự tính toán và thu gom rác thải không? Nếu vậy, tôi sẽ làm như thế nào?
Haskell không xác định cách mã của bạn được thực thi, chỉ có kết quả là gì; câu hỏi này vốn đã được triển khai cụ thể. – ehird