다음 명령형 코드를 하스켈의 기능적 솔루션으로 변환하려고합니다. 세트 s
의 구성원을 s'
의 구성원과 비교하고 비교를 기준으로 t
및 t'
업데이트 세트를 비교하려고합니다. S
가 Data.Set
을 입력이다 나는 기원하고 하스켈 함수의 유형은 무엇인가 등이있다하스켈에서 두 개의 다른 세트를 업데이트하는 동안 두 세트를 반복하십시오.
-- s, s', t, t' are of type Data.Set a
-- foo x y returns a Just a or Nothing
foo :: a -> a -> Just a
-- Initialize t and t' to s and s'
t = s
t = s'
foreach x in s
foreach y in s'
if (foo x y) == Just z
insert z into t
delete x from t
delete y from t'
return (t, t')
,
mergeSets :: S.Set -> S.Set -> (S.Set, S.Set)
mergeSets s s' = ...
와 함수의 결과 한 쌍 될 것입니다 : 여기에 필수적 의사입니다 새 세트 t
및 t'
(또는 t
및 t'
두 세트를 모두 반환하는 다른 방법).
그것은'foo'가 do.'Returns 새로운 요소로 가정된다 알고 도움이 될 것이다 '는 약간 불분명하다. 세트 교차점 또는 노조를 찾으십니까? –
이것은 상당히 이상한 요구 사항입니다. 당신이 정말로하려고하는 것에 대해 더 많이 말한다면 (약간의 맥락은 좋을 것입니다), 우리는 대안적인 접근 방법을 제안 할 수있을 것입니다. –
당신의 의사 코드가 정확하지 않다고 믿는 경향이 있습니다. 그 결과는 두 세트의 순회 순서에 달려 있기 때문입니다. 나에게 그것은 실제로는 데카르트 곱을 만들고, 쌍을 처리 한 다음 결과 집합에서 특정 요소를 제거하려는 것 같다. – us2012