programing tip

Scala : "any"및 "all"함수

itbloger 2020. 12. 1. 07:45
반응형

Scala : "any"및 "all"함수


내 Haskell *은 약간 녹슬 어서 명백한 것을 놓치고 있다고 상상할 수 있습니다.

def any[A](s: Traversable[A], f: A => Boolean): Boolean = {
    s.foldLeft(false)((bool, elem) => bool || f(elem))
}

이 속성 중 하나가 IT에 적용됩니까?

  1. Scala libs 어딘가에 사전 정의
  2. 상황에 따라 빠르고 한 줄로 작성
  3. 틀렸다 (나는 그것을 테스트하지 않았다, 미안하다;))

* 실제로 SML이지만 99 % 동일하지만 태양 아래서 아무도 알 수 없습니다.


  1. 미리 정의되어 있으며 exists. 그리고 forall당신이 찾고있는 "모든"기능이 될 것입니다.

    scala> Vector(3, 4, 5).exists(_ % 2 == 0)
    res1: Boolean = true
    
    scala> Vector(3, 4, 5).forall(_ % 2 == 0)
    res2: Boolean = false
    
  2. (from ) for과 함께 루프를 사용하여 더 성능을 높일 수 있습니다 . ( 의 표준 라이브러리 구현을 참조하십시오 .)breakscala.util.control.Breaksexistsforall

  3. 맞습니다.


anyall다음 같은 Traversable 특성에 메서드가 있습니다 .

def all[A](xs: Traversable[A], p: A => Boolean): Boolean = xs forall p

def any[A](xs: Traversable[A], p: A => Boolean): Boolean = xs exists p

  1. 아니요 그 이름으로 미리 정의되어 있지 않습니다. existsTraversable 패키지에서 사용할 수 있습니다 .
  2. 구현의 가장 큰 단점은 any이미 답변을 제공 할 수있는 경우에 대한 모든 순회 가능을 소비해야한다는 것 입니다. 동일은 간다 all. 그러나 전체 시퀀스를 평가하지 않도록 쉽게 구현할 수 있습니다. 또 다른 해결책은 이러한 유형의 작업을위한 모나드를 구현하는 것입니다. 그런 다음 전화합니다.

    a and b and c 이는 a.and(b).and(c)

  3. 맞습니다.

BTW, 내가 찾은 또 다른 기능은 sum기능입니다.


어때 exists:

scala> List(1,2,3).exists(_ > 2)
res12: Boolean = true

그것은에의 에 이동 .

참고 URL : https://stackoverflow.com/questions/6390797/scala-any-and-all-functions

반응형