2012-04-02 3 views
2

Scheme에서 배열과 같은 데이터 구조를 만들려고합니다. 자주 참조해야하고 변경해야하기 때문에 이름을 지정하고 싶습니다. 그러나 다양한 튜토리얼 사이트에서 읽은 것부터 나중에 참조 할 수 있도록 목록 이름을 지정하는 유일한 방법은 define입니다. 그것은 괜찮을 것입니다. 단 한번 define으로 목록을 초기화하면 더 복잡해 지거나 목록에 추가되는 것처럼 보입니다. 예를 들어, 단지 내가 할 수 없을 것 같습니다 (append wordlist (element)), 나는 어떤 방식이 필요합니다! 쾅.Scheme의 목록 이름을 지정하십시오.

기본적으로 내 질문은 다음과 같습니다. define은 목록을 명명하기위한 유일한 희망입니까? 그렇다면, 나는 그 요소를 바꾸는 농구를 뛰어 넘고 있습니까? 감사.

답변

0

(append wordlist (element))은 새로운 목록을 생성합니다. 원하는 것은 set!을 사용하여 참조를 새 목록으로 리디렉션하거나 define 같은 기호의 이름을 사용하여 새 목록을 참조하는 것입니다.

2

예, define 스키마에서 이름 지정 방법입니다. Scheme의 일반 목록은 변경 불가능하기 때문에 요소를 변경할 수 없습니다. 이는 기능적 데이터 구조로 작업 할 때 함께 배우는 것 중 하나입니다. 물론 요소를 추가하거나 해당 요소를 제거 할 수 있지만 해당 작업은 목록을 생성하므로 요소를 내부에서 변경할 수 없습니다.

다른 옵션은 일반 목록 대신 변경 가능한 목록을 사용하는 것이지만 Scheme을 사용하는 법을 배우는 경우 먼저 불변 목록을 고수하고 변경 불가능한 데이터 측면에서 작업을 수행하는 Scheme 방법을 배우는 것이 좋습니다 .

+0

AFAIK와

참조 SICP 2.5 빌딩 시스템, 계획 목록은 변경할 수 없습니다. 요소를 변경하는 데 필수적인 명령이 있습니다. – Vincent

+0

그래, 도와 줘서 고마워. 나는 뒤의 대신에 정면에 새로운 요소를 추가하면 더 쉽게 일을 할 수 있다고 생각합니다. – AmberWolfe

+0

@AmberWolfe 맞아요! 단일 링크 목록의 맨 앞에 요소를 추가하는 것이 가장 쉽고 가장 효율적인 방법입니다. 앞에서 추가 할 때'cons'를 사용하고, 새 목록을 만들고, 원래 목록을 수정하지 않으며, 다시 저장해야합니다. –

1

예, define은 Scheme에서 "할당"(실제로 명명 됨)하는 방법입니다. 비록 당신이 어떤 종류의 패키지를 작성한다면, 함수의 전체를 래핑 한 다음 let을 사용하여 참조하는 것을 정의하는 것을 고려할 수 있습니다.

그런 다음 당연히 "패키지"내부의 기능을 해제하기 위해 일종의 추상화가 있어야합니다. 일반 운영

http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-18.html#%_sec_2.5

관련 문제