나는 파이썬에서 놀고있었습니다. 유휴 상태에서 다음 코드를 사용했습니다.
p = [1, 2]
p[1:1] = [p]
print p
결과는 다음과 같습니다.
[1, [...], 2]
이게 뭐야 […]
? 흥미롭게도 나는 이것을 무한대까지의 목록 목록으로 사용할 수 있습니다.
p[1][1][1]....
원하는만큼 위의 내용을 쓸 수 있으며 여전히 작동합니다.
편집하다:
- 메모리에 어떻게 표현됩니까?
- 그 용도는 무엇입니까? 유용한 경우의 예가 도움이 될 것입니다.
- 공식 문서에 대한 링크는 정말 유용합니다.
답변
내부에 중첩 된 무한 목록을 작성 했으므로 인쇄 할 수 없습니다. p
포함 p
포함하는 p
등등 … 그리고. [...]
표기법은 당신이 알고, 그것이 표현 될 수 없음을 알려 할 수있는 방법입니다! @ 6502의 답변을보고 무슨 일이 일어나고 있는지 보여주는 멋진 그림을보십시오.
이제 편집 후 세 가지 새로운 항목에 대해
답변
이것이 코드가 만든 것입니다
첫 번째 요소와 마지막 요소가 두 개의 숫자 (1과 2)를 가리키고 중간 요소가 목록 자체를 가리키는 목록입니다.
일반 리스프에서 원형 구조 인쇄가 활성화되면 이러한 개체는 다음과 같이 인쇄됩니다.
#1=#(1 #1# 2)
즉 #1=
, 3 개의 요소가있는 벡터 인 객체 (1로 표시됨)가 있고, 두 번째는 객체 자체입니다 (와 역 참조 됨 #1#
).
파이썬에서는 대신 구조가 원형이라는 정보를 얻습니다 [...]
.
이 특정 경우 설명은 모호하지 않습니다 (역순으로 목록을 가리 키지 만 하나의 목록 만 있으므로 해당 목록이어야 함). 그러나 다른 경우에는 모호 할 수 있습니다 … 예를 들어
[1, [2, [...], 3]]
역방향 참조는 외부 또는 내부 목록을 가리킬 수 있습니다. 동일한 방식으로 인쇄 된이 두 가지 구조는
x = [1, [2, 3]]
x[1][1:1] = [x[1]]
y = [1, [2, 3]]
y[1][1:1] = [y]
print(x)
print(y)
그리고 그들은 메모리에있을 것입니다
답변
“무엇을 사용합니까?”라는 질문에 구체적인 예가 있습니다.
그래프 축소 는 컴퓨터 언어를 해석하기 위해 언젠가 사용되는 평가 전략입니다. 이는 특히 기능적 언어의 게으른 평가를위한 일반적인 전략입니다.
시작점은 프로그램이 수행 할 “단계”순서를 나타내는 그래프를 작성하는 것입니다. 이 프로그램에서 사용되는 제어 구조에 따라이은으로 이어질 수있는 순환 또는 그 “깊이”로 알려진 것입니다 사용 재귀 – 프로그램이 “영원히”루프의 일종 포함하고 있기 때문에 (그래프 평가 시간이 아니라에서, graph- 제작 시간) …
이러한 그래프를 나타내려면 눈에 띄는 것과 같이 무한한 “데이터 구조”( 재귀 데이터 구조 라고도 함 )가 필요합니다. 일반적으로 조금 더 복잡합니다.
이 주제에 관심이 있다면, 그 주제에 관한 강의가 여기에 있습니다 :
http://undergraduate.csse.uwa.edu.au/units/CITS3211/lectureNotes/14.pdf
답변
우리는 항상 객체 지향 프로그래밍에서이 작업을 수행합니다. 두 객체가 직접 또는 간접적으로 서로 참조하는 경우 모두 무한 재귀 구조 (또는 보는 방식에 따라 동일한 무한 재귀 구조의 두 부분)입니다. 그렇기 때문에 당신은 이것을 목록처럼 원시적 인 것으로 보지 않는 것입니다. 왜냐하면 우리는 개념을 “무한 목록”보다 상호 연결된 “객체”로 묘사하는 것이 더 낫기 때문입니다.
...
무한 재귀 사전을 사용할 수도 있습니다 . 삼각형의 모서리 사전을 원한다고 가정 해 봅시다. 각 값은 해당 모서리에 연결된 다른 모서리의 사전입니다. 다음과 같이 설정할 수 있습니다.
a = {}
b = {}
c = {}
triangle = {"a": a, "b": b, "c": c}
a["b"] = b
a["c"] = c
b["a"] = a
b["c"] = c
c["a"] = a
c["b"] = b
인쇄 이제 경우 triangle
(또는 a
또는 b
또는 c
그 문제에 대한), 당신은 가득 볼 수 {...}
있는 두 개의 모서리가 서로 다시 언급하고 있기 때문이다.
답변
내가 이해했듯이, 이것은 고정 소수점의 예입니다.
p = [1, 2]
p[1:1] = [p]
f = lambda x:x[1]
f(p)==p
f(f(p))==p
답변
해당 특수 객체의 이름은 줄임표입니다. 필자는 파이썬 인 테프 리터 / VM에서 None과 같은 단일 객체로 구현되어 일종의 센티넬이라고 생각합니다. 보시다시피 파이썬이 그 자체로 목록의 참조를 나타내는 방법입니다.