2012-02-28 4 views
13

난 그냥 racket에서 set-car!set-cdr! 매우 간단한 코드를 수행하려고하지만 오류 가지고 : expand: unbound identifier in module in: set-car!expand: unbound identifier in module in: set-cdr!set-car!, set-cdr! 라켓에 묶여 있지 않니?

들이 racket에 정의되지 않습니다? 아무도 도와 줄 수 있습니까?

+0

어떤 언어를 선택하십니까? 언어를 R5RS로 설정하십시오. –

+0

처음에'#lang R5RS'를 설정했을 때'#lang racket'을 가지고 있는데,'Module lang : R5RS'라는 에러가납니다 :'모듈 언어 : invalid module text 표준 모듈 이름 해석자 : 콜렉션을 찾을 수 없습니다 : # <경로 : (# <경로 : /home/chengtie/.racket/5.1.1/collects> # <경로 :/usr/share/racket/collects>)' – SoftTimur

+6

'#lang r5rs'를 사용하십시오 - - 소문자. (그러나 r5rs 언어를 사용하면 즐거운 경험을 할 수 없습니다.) –

답변

20

는이 같은 mutable-pairs-6을 가져와야 :

(require rnrs/mutable-pairs-6) 

그 절차는 다른 모듈로 이동 mcons, mcar는, mcdrset-mcar!set-mcdr!, mlist들이 가변 데이터에서 작동한다는 것을 강조하기로 이름이 변경되었다 , 그들의 불변 사본과 달리.

+0

의견을 보내 주셔서 감사합니다 ... 'cadr'은 무엇입니까? 'mcadr'은 존재하지 않는 것 같습니다 ... – SoftTimur

+0

안타깝게도 ('mcadr','mcdar' 등) 절차가 존재하지 않는다면, 수동으로 기능을 구현해야합니다. –

+3

직접 정의하십시오! '(mcadr (compose mcar mcdr)))' –

12

Óscar López의 대답은 정확하지만 일반적인 쌍이 불변 인 이유를 설명하지 않습니다.

Racket (및 이전 버전 인 PLT Scheme, 버전 4 이후)에서는 단점 셀이 기본적으로 불변입니다. 대부분의 Scheme 프로그램은 단점 셀을 수정할 필요가 없으며 불변으로 유지하면 많은 최적화가 가능합니다. 예를 들어 list?length은 둘 다 일정 시간이 될 수 있습니다.

가변성이 필요한 경우에는 mpair가 있고 더 유용하게는 상자가 있습니다.

+6

[필수 참조 자료] (http://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html) –

2

This article은 Racket에서 제거 된 이유를 알려줍니다.

관련 문제