Есть ли эквивалентный оператор для оператора разметки списка Haskell \\
в F #?Оператор разницы в списке Haskell в F #
ответ
Был подпрыгнул, но я считаю, что это стоит написать здесь реализацию (/-/)
(версия F # 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
Это будет работать как \\
Haskell, так что (xs @ ys) /-/ xs = ys
. Например: (7 :: [1 .. 5] @ [5 .. 11]) /-/ [4 .. 7]
оценивается в [1; 2; 3; 5; 7; 8; 9; 10; 11]
.
Nope ... Просто напишите это и сделайте его инфиксным оператором - используя набор специальных символов. Обратная косая черта (\
) отсутствует в списке ниже, поэтому она не будет работать как инфиксный оператор. Смотрите manual:
инфиксную-оп: =
or || & && <OP >OP $OP = |OP &OP ^OP :: -OP +OP *OP /OP %OP **OP
префикс-оп: =
!OP ?OP ~OP -OP +OP % %% & &&
Предполагая, что вы действительно хотите, обычный набор разницы, а не странно заказал, но -несортированное многозадачное вычитание, которое, по-видимому, предоставляет Haskell, просто преобразует списки в наборы с использованием встроенной функции set
, а затем использует встроенный -
оператора вычислить разность множеств:
set xs - set ys
Например:
> set [1..5] - set [2..4];;
val it : Set<int> = seq [1; 5]
Это неправильно обрабатывает дубликаты. – 2009-06-18 07:20:32
элементов фильтра из набора вычитаемые:
let (/-/) xs ys =
let ySet = set ys
let notInYSet x = not <| Set.contains x ySet
List.filter notInYSet xs
Я использую это:
let (/-/) l1 l2 = List.filter (fun i -> not <| List.exists ((=) i) l2) l1
Если кто-то видит проблему, дайте мне знать.
Для списков, поэтому в результате могут быть дубликаты. Например:
[1;1;2] /-/ [2;3] would be eq to [1;1]
- 1. Haskell карта функция, где оператор в F #
- 2. Haskell Recursion - нахождение наибольшей разницы между числами в списке
- 3. правый ассоциативный оператор в F #
- 4. Оператор привязки Haskell в системе F, включая виды
- 5. Как создать оператор в Haskell?
- 6. Оператор перегрузки в F #: (/)
- 7. Позиция фильтра в списке, Haskell
- 8. Haskell - Square все в списке
- 9. F # в списке элементов
- 10. Оператор & в haskell?
- 11. Оператор Haskell dot: какая разница?
- 12. Haskell шаблон в Списке
- 13. Ошибка Haskell в списке
- 14. Список Haskell в списке в списке
- 15. F # оператор "?"
- 16. Используя условие в списке понимание в Haskell
- 17. В F #, что означает оператор?
- 18. Определить оператор F # '**' в C#
- 19. Что делает оператор! в F #
- 20. Использование? оператор в F # deedle
- 21. Haskell dot (.) Оператор в реализации закона Моргана
- 22. В Haskell есть оператор с фиксированной точкой?
- 23. Haskell списковых охранники F #
- 24. Оператор Foreach в списке
- 25. F # подсчет повторений в списке
- 26. Оператор равенства деревьев в Haskell
- 27. Что означает оператор/= в Haskell?
- 28. haskell - найти пары в списке
- 29. Haskell- найти элемент в списке
- 30. Haskell заменить элемент в списке
«// будет работать как инфиксный оператор». Нет, не будет. Это однострочный комментарий в F #. – 2011-02-12 15:05:09