2012-04-15 2 views
6

저는 비교적 간단한 개념이어야한다고 생각합니다. 동적 인 []이 증분리스트 조작과 관련하여 어떻게 기능하는지 이해하지 못합니다. 다음 내용을 고려하십시오.Mathematica 동적리스트 조작

In[459]:= x={{1,2}}; 
In[462]:= y=First[x] 
Out[462]= {1,2} 
In[463]:= z=First[y] 
Out[463]= 1 

간단한 권리? 이제 x를 변경하면 z가 동적으로 업데이트되기를 원합니다. 내 시도는 다음과 같습니다.

In[458]:= a={{1,2}}; 
In[452]:= b=Dynamic[First[a]] 
Out[452]= {1,2} 
In[449]:= c=Dynamic[First[b]] 
Out[449]= {1,2} 

목록의 값을 변경하면 해당 변경 사항은 b 및 c입니다. 그러나, 나는 각각의 진술이 부품 첫 번째 요소로 기대합니다. 동적 목록에 대한 조작은 수행되지 않습니다.

내 질문에이 동작이 나타나는 이유는 무엇이며 어떻게 연속적인 동적 목록 조작을 적용 할 수 있습니까?

미리 감사드립니다.

답변

5

동적 인 경우 비정상적인 방식으로 작동합니다. 참조 : Why won't this work? Dynamic in a Select

할당 b = Dynamic[First[a]]은 그 표현식이 화면에 가시적으로 표시 될 때까지 Dynamic[First[a]] 리터럴 표현식 이외의 것으로 평가되지 않습니다.

따라서 First[b]을 쓸 때 Dynamic[First[a]] 인 첫 번째 부분은 First[a]입니다.

Dynamic이 내부 기능보다 디스플레이 트릭에 가깝다는 사실은 가볍게 간과해서는 안됩니다. Dynamic의 기능을 잘못하면 혼란과 좌절이 생길 수 있습니다. 이미 예상대로 Dynamic가 작동하지 않는 이유에 대한 답변을 늘어 놓던

b = Dynamic[First[a]] 

c = Dynamic[[email protected][b]] 
+0

당신이 다시 나를 때려 :-) – Heike

+0

@Heike 나는 단지 스크랩을 집어 올리는 줄 알았다. 네가 여기서 질문에 답하고 있다는 것을 나는 몰랐다. :-) –

+1

mma.SE에서 조용하게 체크인하는 경우가 있습니다. – Heike

2

을,하지만 난 추가 할 것입니다 : 그럼에도 불구하고, 당신의 간단한 예를 들어 당신이와 함께, 적어도 시각, 원하는 동작을 얻을 수 있습니다

사용하여
a={{1,2}} 
(* 
==> {{1,2}} 
*) 

b:=First[a];Dynamic[b] 
(* 
==> {1,2} 
*) 

c:=First[b];Dynamic[c] 
(* 
==> 1 
*) 

a={{3,4}} 
(* 
==> {{3,4}} 
-- The displays for b and c now change to {3,4} and 3 
*) 

SetDelayed (:=) 당신은 오히려 한 값보다 bc는 평가 때마다, a의 현재 값이 사용되었는지 확인 : 어떻게 당신이 원하는 (내가 생각하는) 무엇을 달성하기 위해 정의의 시점에서. 그리고 Dynamica이 변경 될 때마다 표시된 값이 다시 평가되는지 확인합니다.