2011-12-14 1 views
11

따라서 "멱등 원"은 다음과 같이 정의 할 수 있습니다.멱등수 정의

N 번 수행되는 경우 해당 동작은 한 번만 수행하는 것과 같은 효과를냅니다.

알기 쉽습니다.

제 질문은이 정의의 미묘함에 관한 것입니다. 자체적으로 멱등 원으로 간주되는 동작입니까? 아니면 동작에 전달되는 데이터를 고려해야합니까? f(3)만큼 내가로 3 공급으로, 나무 등입니다,

은 가정하자 좀 자원을 업데이트하는 PUT 방식을 가지고, 우리는 분명히 f(x)

를 호출합니다 :

내가 예와 함께 정리해 드리죠 입력. 그리고 똑같이 명백하게, f(5)은 자원의 값을 바꿀 것입니다 (즉, 이전에 그 값이 3이나 다른 값이 아닐 것입니다).

그래서 우리는 멱등수에 대해 이야기 할 때 작업/기능의 일반화 like (즉, f(x)), 또는 우리는 action/function +에 전달되는 데이터 (즉, f(3))를 언급하고 있습니까?

+1

수학 포럼으로 이동하면 안됩니까? (모든 명확성을 위해 : 나는 downvote하지 않았다) –

+0

우리가 공식적인 논리의 정의 또는 웹 프로그래밍의 정의에 대해 이야기하는 경우에 달려있다. 나는 downvoter (not)이 단지 질문이 잘못되었다고 생각했다. –

+1

@Roy - RESTful 웹 서비스에 직접 적용되기 때문에 그렇게 생각하지 않습니다. 예를 들어 쓴 문맥은 – Didaxis

답변

5

좀 자원을 업데이트하는 PUT 방식을 가지고, 우리는 F (x)는 물론

, F (3), 나무 등입니다만큼 내가 입력으로 삼을 공급로 부를 것이다. 그리고 이 똑같이 분명한 경우 f (5)는 리소스 값을 변경합니다 (즉, 은 더 이상 3이 아니거나 이전에 있었던 값이 아닙니다).

이것은 서버 구현이 PUT이이 멱등 원을 존중한다는 점만이 분명합니다. RFC 2616 says HTTP의 문맥에서 :

방법은 N> 0 동일 요청 부작용이있다 (에러 또는 만료 문제 제외 )된다는 점에서 "멱등 원"특성을 가질 수있다 단일 요청과 동일합니다.

토픽 끄기 ... 웹과 같은 분산 시스템에서 commutativity 및 동시 요청을 고려할 수 있습니다. 예를 들어, 동일한 PUT (x1) 요청의 N + 1은 동일한 효과를 가져야하지만 다른 클라이언트가 서로 다른 PUT (x2) 요청을했는지 여부는 알지 못하므로 n PUT (x1) = PUT (x1) 및 m PUT (x2) = PUT (x2) 일 때, 두 세트의 요청은 인터리빙 될 수있다.

+0

따라서이 예에서 PUT은 단일 요청의 컨텍스트에서 멱등 원임을 결론 지을 수 있습니다. 그러나 다른 동시 요청과 인터리브 된 경우에도 첫 번째 연산의 결과가 멱등활 특성을 따랐으므로 여전히 멱등수입니다. –

3

멱등 원이라고 가정하는 것은 서버의 상태가 한 번만 번의 호출로 으로 변경된다는 것을 의미합니다. 대부분의 경우 사람들은이 용어를 사용하여 서버 번호 이 아무런 숫자도 변경되지 않고 번으로 변경되지 않는다는 것을 의미합니다. 이러한 상황에서 두 경우의 차이는 중요하지 않습니다.

+3

그러나 "won ' 전혀 변하지 않는다 "는"무력화 "입니다, 맞습니까? 이것은 GET, HEAD, OPTIONS, TRACE가 될 것입니다. – Didaxis

5

멱등환은 해당 도메인에서 모든 값, 즉 f(f(x)) = f(x) 모두가 x 인 경우 동작이 유지되어야합니다. 그것에 대해 생각하는 또 다른 방법은 연산 자체가 그 연산 인 경우 연산이 멱등수라는 것입니다.

+0

@JonathanM 죄송합니다, 귀하의 요지는 보이지 않습니다. reals 나 복소수에 대해서, 모든'x'에 대해'abs (x)) = abs (x)'를 호출합니다. 'abs '가 내가 말한 것과 일치하지 않는다고 생각한다면, 반례를주십시오. –

3

이것은 멱등수의 정의가 아닙니다. 어떤 항목 x, f (f (x)) == f (x)이면 함수는 멱등수입니다.

PUT은 여기에 f() 함수의 부작용이며 결과는 아닙니다. 가정하자

+0

당신의 정의는 여기에 주어진 것에 반대됩니다 : http://en.wikipedia.org/wiki/Idempotence. 이 페이지는 멱등 함수로'abs()'를 먼저 사이트하지만 사용자 정의에 의한 것이 아닙니다. –

+0

이것은 단순히 잘못된 것입니다. idempotence를 ID 함수와 동일하게 정의했습니다. x에 이미 연산이 수행되었다고 암묵적으로 가정합니다. –

+0

그래, 그게 사실이야, 혼란에 대한 미안 ... – fge

관련 문제