저는 Julia에서 ProjectEuler의 쉬운 문제 중 일부를 반복하여 Julia를 배우려고합니다. 지금까지이 모든 실망스러운 문제에 봉착 할 때까지 모든 것이 정말 부드럽습니다. 난 내 코드를 디버깅 시간을 소비하고, 여기에 내가 무엇을 발견 :Julia가 과제로 이상한 일을하고 있습니다
function is_abundant(n::Int) #just a function
return prod(map(x->int((x[1]^(x[2]+1)-1)/(x[1]-1)),factor(n))) > 2 * n
end
abundants=[12] #there should be a better way to initialize an Array
for i=13:28120
if is_abundant(i)
push!(abundants,i)
end
end
le=abundants; #The following lines are the problems
ri=abundants;
d=length(abundants)
println(d)
pop!(le)
shift!(ri)
println(le==ri, " ", endof(ri), " ", endof(abundants))
내가 얻을 출력은 (다행스럽게도 필자는 여기에 정말 멍청한 짓 실종 아니에요) 을 :
6964 true 6962 6962
을하는 줄리아가 le
,및 abundants
의 세 세트를 모두 pop!
및 shift!
명령으로 변경했음을 의미합니다. 내가 처음에 기대했던
le=map(x->x,abundants)
ri=map(x->x,abundants)
지금 출력이 변경 다음과 같습니다 :
6964 false 6963 6964
내 질문이있는 경우이며, 내가 바보 같은 별도의 ID 매핑을 사용하여이 버그/문제를 해결 할 수 있었다 이것은 버그가 아니며, 줄리아가 le
, ri
및 abundants
사이의 등가 관계를 유지하는 이유는 무엇입니까? 또한, 누구든지이 동작을 재현 할 수 있습니까? 나는 Julia "Version 0.3.0-rc3 + 14 (2014-08-13 16:01 UTC)"를 우분투 14.04에서 사용하고 있습니다.
하나의 배열 만 있습니다. 많은 참조를 만들고있는 중입니다. 관련 항목 : http://julia.readthedocs.org/ko/latest/manual/faq/#i-passed-an-argument-x-to-a-function-modified-it-inside-that-function-but-on - 외부 변수 인 x는 여전히 변하지 않은 이유입니다. – StefanKarpinski