는 내가 달성하기 위해 시도하고, 당신이 필터의 수정 된 버전을 정의 할 수 있습니다 (min `on` snd)
하나의 술어에 따라 두 목록의 요소를 비교하고 다른 술어에 따라 선택하려면 어떻게합니까?
답변
은 일반적인 경우를 해결하기 위해 만족하는 사람을 선택 ((==) `on` fst)
으로이 조건을 만족 쌍에서 튜플의 두 목록을 비교하는 것입니다 두 술어가 들어있는 튜플을 패턴 매치하고 두 술어가 만족되는지 검사합니다. 첫 번째 조건 odd
두 번째 술어 목록 [(1,2),(2,2),(3,3),(3,4)]
을 평가하는 것
filter' :: ((a->Bool),(a->Bool)) -> [(a,a)] -> [(a,a)]
filter' (pred1,pred2) = foldr f []
where f = (\x acc -> if pred1 $ fst x then
if pred2 $ snd x then x : acc
else acc
else acc
)
even
같이
>> filter' (odd,even) [(1,2),(2,2),(3,3),(3,4)]
[(1,2),(3,4)]
'(++)'로 단일 요소를 추가하여'foldl'을 사용하여 목록을 재구성하는 것은 좋은 생각이 아닙니다. 대신'foldr'와'(:)'를 사용하십시오. 또한 모든 것을 다시 구현할 필요가 없습니다. 'filter '를'filter'와 같은 것으로 재사용 할 수 있습니다. p q = filter (uncurry (&&) .bimap p q)'. – duplode
좋은 지적. 포함 된 내용이 더 낫고/더 간결하지만, 'foldr'을 사용하도록 구현 된 것을 변경했습니다. – mnoronha
당신이 사용하고있는'bimap' 함수는 무엇입니까? – mnoronha
그 가정 것이다 ... 내가하려고 어떤
을 두 개의 튜플 목록을 비교하는 것입니다.
((==) `on` fst)
... 목록의 경우 일반적으로 (==)
에서와 같이 한 목록의 각 쌍을 다른 목록의 해당 쌍과 비교하는 것을 의미합니다. minBy'
를 작성하는 다른 방법에 대한
-- Suggestions of sensible names for this are welcome.
yourSelector :: (Eq a, Ord b) => [(a, b)] -> [(a, b)] -> [(a, b)]
yourSelector ps = fmap (minBy' snd)
. filter (uncurry ((==) `on` fst)) . zip ps
where
minBy' f (x, y) = case (compare `on` f) x y of
LT -> x
_ -> y
GHCi> yourSelector [(1,2),(3,5),(4,7)] [(1,3),(2,2),(4,9)]
[(1,2),(4,7)]
, 참조 : 여기
는 원래의 제안에 가깝게 유지 주로 pointfree (그리고 아마도 약간 불안) 솔루션입니다 Maximizing according to a function.- 1. 프롤로그에서 술어에 따라 목록의 항목을 쌍으로 연결
- 2. 위치의 술어에 따라 필터가 누락 된 배열
- 3. 술어에 따라 std 벡터에서 요소를 효율적으로 제거하는 방법
- 4. 술어에 따라리스트를 정렬하십시오.
- 5. 술어에 다른 함수가 포함 된 필터 함수
- 6. 두 목록의 요소를 비교하고 다른 요소를 추가하십시오.
- 7. 술어에 기반한 정렬을위한 라이브러리 함수
- 8. Prolog에서이 술어에 문제점이 있습니까?
- 9. 하스켈에서 술어에 대한 2 차원 목록 정렬
- 10. 술어에 추가 매개 변수를 전달하려면 어떻게해야합니까?
- 11. 두 목록의 요소를 비교하고 다른 원래 목록의 별도 목록을 반환하십시오.
- 12. 상태가있는 술어에 대한 적절한 용어
- 13. 이유 술어에 인스턴스가 없습니다. (Alloy)
- 14. jquery와 두 요소를 비교하고 결과에 따라 클래스를 변경하십시오.
- 15. 동일한 술어에 대한 절을 그룹화해야 함
- 16. CriteriaBuilder 술어에 대한 문자열을 캐스팅하는 방법
- 17. 술어 # 및 : 내부 술어에 액세스하는 방법은 무엇입니까?
- 18. 술어에 대한 도움말 <T> 대리자
- 19. C/C++ Java 술어에 해당하는 것
- 20. xsl : 변수가 술어에 정의되어 있지 않습니다.
- 21. URL 매개 변수에 따라 선택 필드에서 옵션을 자동 선택하려면 어떻게합니까?
- 22. 두 개의 IEnumerable을 비교하고 비교 결과에 따라 삭제/삽입
- 23. 필요에 따라 구성 요소를 정의하고 싶습니다 (다른 필드의 값에 따라)
- 24. 하나의 쿼리를 사용하여 mysql을 다중 선택하려면 어떻게합니까?
- 25. XPath는이 중 하나의 값에 따라 요소를 선택하려고
- 26. 확률에 따라 하나의 요소를 선택하는 방법은 무엇입니까?
- 27. 목록의 특정 요소를 사용하여 다른 목록의 요소를 비교하고 파이썬에서 중복이 발견되면 특정 요소를 출력하는 방법은 무엇입니까?
- 28. 표현 술어에 변수를 전달하고 점점 예상치 못한 결과가
- 29. 대한 파싱에 PEG의 의미 술어에 대한 확인이 필요
- 30. 동일한 객체의 두 벡터를 비교하고 다른 요소를 얻는 방법
['Data.List'] (https://hackage.haskell.org/package/base-4.9.0.0/docs/Data-List.html)를 확인하십시오. 'groupBy'와'minimumBy'를 찾고 있습니다. – crockeea