문제

Haskell의 목록 차이 연산자와 동등한 연산자가 있습니까? \\ 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

이것은 Haskell의 \\, 하도록 하다 (xs @ ys) /-/ xs = ys.예를 들어: (7 :: [1 .. 5] @ [5 .. 11]) /-/ [4 .. 7] 으로 평가하다 [1; 2; 3; 5; 7; 8; 9; 10; 11].

다른 팁

아니요...그냥 작성하고 특수 문자 세트를 사용하여 중위 연산자로 만드세요.백슬래시(\)은 아래 목록에 없으므로 중위 연산자로 작동하지 않습니다.참조 수동:

중위 작업 :=

or || & && <OP >OP $OP = |OP &OP ^OP :: -OP +OP *OP /OP %OP

**OP

접두어-op :=

!OP ?OP ~OP -OP +OP % %% & &&

하위 세트에서 항목을 필터링합니다.

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]

Haskell이 제공하는 이상하게 순서는 있지만 정렬되지 않은 다중 집합 빼기 대신 기존 집합 차이를 정말로 원한다고 가정하면 내장된 함수를 사용하여 목록을 집합으로 변환하면 됩니다. set 함수를 사용한 다음 내장된 - 집합 차이를 계산하는 연산자:

set xs - set ys

예를 들어:

> set [1..5] - set [2..4];;
val it : Set<int> = seq [1; 5]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top