F #에서 하스켈의리스트 차이 연산자 \\
에 해당하는 연산자가 있습니까?F #에서 하스켈리스트 차이 연산자
답변
가 반송되었다, 그러나 나는 그것이 가치가있다 생각 여기서 (/-/)
(F # 버전의 하스켈의 \\
) 구현을 작성하려면
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
이것은 하스켈의 \\
으로 작동하므로 (xs @ ys) /-/ xs = ys
이됩니다. 예 : (7 :: [1 .. 5] @ [5 .. 11]) /-/ [4 .. 7]
은 [1; 2; 3; 5; 7; 8; 9; 10; 11]
으로 평가됩니다. 내가 이것을 사용하고
Nope ... 특수 문자 집합을 사용하여 중선 연산자로 작성하면됩니다. 백 슬래시 (\
)는 아래 목록에 없으므로 중위 연산자로 사용할 수 없습니다.
중위 조합 : =
or || & && <OP >OP $OP = |OP &OP ^OP :: -OP +OP *OP /OP %OP **OP
접두사 조합 다음 manual보기 당신이 정말로보다는 기존의 차 집합을 원하는 =
!OP ?OP ~OP -OP +OP % %% & &&
이 가정을 이상한 주문 -하지만, Haskell이 제공하는 명백하게 정렬되지 않은 멀티 세트 뺄셈은 내장 된 set
함수를 사용하여리스트를 세트로 변환 한 다음 내장 된감수의 세트에서
> set [1..5] - set [2..4];;
val it : Set<int> = seq [1; 5]
중복 된 내용을 올바르게 처리하지 못합니다. –
편집 내용이 여전히 중복을 올바르게 처리하지 못합니다. \\ 연산자는 차 집합 동작을 제공하지 않고 백 차이 동작을 제공합니다. – ScottWest
@Scott : 고마워. 그것은 충실한 번역을하는 것이 가치가없는 것처럼 보입니다. 나는 그 누구도 그 기능을 원할 것 같지 않다 ... –
필터 항목 : 예를 들어
set xs - set ys
:운영자는 설정의 차이 계산하기
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]
"// 중온 연산자로 작동합니다". 아닙니다. 그것은 F #의 한 줄짜리 주석입니다. –