Có toán tử tương đương với toán tử khác biệt danh sách của Haskell \\
trong F # không?Toán tử khác biệt danh sách Haskell trong F #
Trả lời
bị dội ngược, nhưng tôi tin rằng nó là giá trị để viết ở đây việc triển khai (/-/)
(phiên bản F # của Haskell's \\
):
let flip f x y = f y x
let rec delete x = function
| [] -> []
| h :: t when x = h -> t
| h :: t -> h :: delete x t
let inline (/-/) xs ys = List.fold (flip delete) xs ys
Điều này sẽ hoạt động dưới dạng \\
của Haskell, sao cho (xs @ ys) /-/ xs = ys
. Ví dụ: (7 :: [1 .. 5] @ [5 .. 11]) /-/ [4 .. 7]
đánh giá thành [1; 2; 3; 5; 7; 8; 9; 10; 11]
.
Không ... Chỉ cần viết nó và biến nó thành một toán tử infix - sử dụng bộ ký tự đặc biệt. Dấu gạch chéo ngược (\
) không có trong danh sách dưới đây, vì vậy nó sẽ không hoạt động như một toán tử kết xuất. Xem manual:
infix-op: =
or || & && <OP >OP $OP = |OP &OP ^OP :: -OP +OP *OP /OP %OP **OP
prefix-op: =
!OP ?OP ~OP -OP +OP % %% & &&
Giả sử bạn thực sự muốn khác biệt thiết lập thông thường chứ không phải là lạ ra lệnh-nhưng -nhiều loại trừ đa số mà Haskell dường như cung cấp, chỉ cần chuyển đổi các danh sách thành các bộ bằng cách sử dụng chức năng được xây dựng trong set
và sau đó sử dụng được xây dựng trong -
điều hành để tính toán độ lệch thiết lập:
set xs - set ys
Ví dụ:
> set [1..5] - set [2..4];;
val it : Set<int> = seq [1; 5]
Điều này sẽ không xử lý các bản sao chính xác. –
Chỉnh sửa vẫn không xử lý các bản sao chính xác. Toán tử \\ không cung cấp một hành vi thiết lập khác biệt, nó cung cấp một hành vi khác biệt túi. – ScottWest
@Scott: Cảm ơn. Có vẻ như nó không đáng làm một bản dịch trung thành. Tôi nghi ngờ bất cứ ai sẽ bao giờ muốn chức năng đó ... –
mục Lọc từ tập các số bị trừ:
let (/-/) xs ys =
let ySet = set ys
let notInYSet x = not <| Set.contains x ySet
List.filter notInYSet xs
Tôi đang sử dụng này:
let (/-/) l1 l2 = List.filter (fun i -> not <| List.exists ((=) i) l2) l1
Nếu bất cứ ai nhìn thấy một vấn đề, cho tôi biết.
Dành cho các danh sách, do đó có thể có bản sao trong kết quả. Ví dụ:
[1;1;2] /-/ [2;3] would be eq to [1;1]
- 1. Danh sách Haskell khác biệt
- 2. Haskell - Đếm số lần mỗi phần tử khác nhau trong danh sách xảy ra
- 3. Toán tử F # "?"
- 4. Trích xuất phần tử đơn từ danh sách trong F #
- 5. Chỉ mục của phần tử trong danh sách trong Haskell
- 6. F # Danh sách SelectMany
- 7. toán tử == và danh sách :: remove()
- 8. đọc danh sách trong F #
- 9. Ghép nối các danh sách trong Haskell
- 10. Toán tử quá tải trong F #: (/)
- 11. Haskell tính danh sách loại
- 12. Sử dụng toán tử toán tử danh sách (a :: b) làm hàm
- 13. Làm cách nào để tạo toán tử trong Haskell?
- 14. Hiệu suất tính toán danh sách song song Haskell
- 15. Toán tử concat (++) tùy chỉnh trong haskell
- 16. Làm cách nào tôi có thể phân biệt $ _ trong các toán tử danh sách lồng nhau trong Perl?
- 17. Sự khác biệt số của danh sách trong Mathematica
- 18. Haskell - các phần tử xen kẽ từ hai danh sách
- 19. Học Haskell: danh sách hiểu trong C#
- 20. danh sách Giáo Hội trong Haskell
- 21. Làm việc trên danh sách các danh sách trong Haskell
- 22. Haskell: Danh sách vs Luồng
- 23. Danh sách tuần hoàn trong F #
- 24. Whats sự khác biệt giữa danh sách [-1:] [0] và danh sách [len (danh sách) -1]?
- 25. F # Toán tử/Chức năng Lẫn lộn
- 26. xóa các phần tử trong một danh sách có trong danh sách khác
- 27. Tìm tối đa danh sách các danh sách theo tổng các phần tử trong Python
- 28. So sánh hai danh sách và trả lại giá trị khác biệt và sự khác biệt
- 29. sao chép danh sách python: có sự khác biệt giữa [cũ] và danh sách (cũ) không?
- 30. LINQ tìm sự khác biệt trong hai danh sách
"// sẽ hoạt động như một toán tử kết xuất". Không nó sẽ không. Đó là nhận xét một dòng trong F #. –