Lộn xộn xung quanh với 'chức năng mở rộng' cho mô-đun Danh sách. (Tôi đã dành nhiều thời gian phát triển 'mapfold' - những chủ đề một ắc như lần, nhưng sử dụng nó như một tham số để tạo ra giá trị mới như bản đồ - sau đó phát hiện ra rằng đó là những gì List.scan_left
không)Sản phẩm chéo của hai danh sách
Đối với thế hệ của thử nghiệm dữ liệu, tôi cần phải làm một sản phẩm chéo của hai danh sách, Đây là những gì tôi đã đưa ra:
///Perform cross product of two lists, return tuple
let crossproduct l1 l2 =
let product lst v2 = List.map (fun v1 -> (v1, v2)) lst
List.map_concat (product l1) l2
Đây có phải là bất kỳ tốt, hoặc là đã có một số cách tốt hơn để làm điều này?
Câu hỏi tương tự với bộ phim này:
///Perform cross product of three lists, return tuple
let crossproduct3 l1 l2 l3 =
let tuplelist = crossproduct l1 l2 //not sure this is the best way...
let product3 lst2 v3 = List.map (fun (v1, v2) -> (v1, v2, v3)) lst2
List.map_concat (product3 tuplelist) l3
Xem câu hỏi liên quan tại đây: http://stackoverflow.com/questions/935996/calculating-the-cartesian-product-of-a-list-of-numbers-with-f – Benjol