2013-02-17 2 views
3

수업에서 저는 SICP 과제를 해결하기 위해 이전 R5RS Scheme 표준을 사용하고 있습니다. 저는 첫 번째 개발 테스트를하고 싶습니다. 그래서 유닛 테스트 프레임 워크가 좋을 것 같았고 작은 테스트를 작성하기 위해 SchemeUnit을 선택했습니다.SchemeUnit에서 R5RS 코드를 사용할 수 있습니까?

출력 (문자열, 숫자 등)에서 프리미티브를 테스트하기 만하면되지만, 목록을 테스트 할 때로드 블록을 쳤습니다. 아마 테스트를 실행하는 데 사용되는 계획 방언의 차이 함께 할 수있는 뭔가가 :

foo.scm :(define a-list (list 2))

foo는-tests.scm 다음을 실행(check-equal? a-list (list 2))

결과 테스트 :

Unnamed test 
FAILURE 
name:  check-equal? 
location: tester.scm:22:3 
actual:  {2} 

expected: (2) 

테스트 스위트 실행되도록하려면, 나는 F의 상단에 "#lang scheme/base를 추가해야 oo-tests.scm 및 require 구성표 패키지 foo.scm에서 상단에 #lang r5rs(#%provide (all-defined))이 있어야합니다.

나는 R5RS와 "scheme/base"에서 어떻게 든 다르게 구현되어 있다고 생각한다. 함께 일할 수있는 방법은 없나요? 그리고 왜 실패합니까 ({} 대())?

답변

4

예를 들자면, 목록은 #lang r5rs#lang scheme/base에서 다르게 구현됩니다. r5rs의 foo-tests.scm에 테스트를 작성할 수 있다면 혼란을 피할 수 있습니다.

foo-tests.scm 파일 상단에이 작업을 수행 할 수 있어야합니다.

테스트 스위트가 동일한 언어로 작성되면 구문 --- 및 특히 목록 표현이 일치해야합니다. 위의 테스트가 잘 통과해야합니다.

r5rs 목록과 #lang scheme (및 #lang racket)의 차이점을 자세히 설명하려면 다음과 같습니다. Racket은 불변의 cons 쌍을 사용하여 목록을 나타냅니다. 변경 불가능한 죄수 쌍은 r5rs의 set-car!set-cdr! 함수를 지원하지 않으므로 #lang r5rs 언어의 기본 제공 불변 쌍을 사용하는 표준에 충실하지 않습니다. r5rs 표준을 지원하기 위해 Racket은 별도의 mutable pairs 데이터 유형을 포함하고 r5rs 내에서 일관되게 사용합니다. 그러나 라켓의 표준 쌍과 변경 가능한 쌍은 동등하게 비교되지 않습니다.

+0

훌륭한 답변을 보내 주셔서 감사합니다. 필자는 "Planet"이 Java 세계에서 Maven과 같은 일종의 종속성 관리 응용 프로그램이라는 것을 이해합니다. 방금 구성표 단위뿐만 아니라 실제로 테스트를 실행하고 결과를 표시하기 위해 텍스트 러너가 필요합니다. (require (planet schematics/schemeunit : 3/text-ui))에 해당하는 (#require) 부분에 무엇을 추가할까요? – oligofren

+0

현대적인 라켓에서는 단위 테스트 프레임 워크가 라켓의 표준 라이브러리와 함께 제공됩니다. 참조 : http://docs.racket-lang.org/rackunit/index.html. 실제로 '랙 유닛 (rackunit)'의 조상이기 때문에 PLaneT에서 사용하지 마십시오. 'check-equal? ​​'것을 사용한다면 명시 적 테스트 러너가 필요하지 않습니다. 테스트 모듈을 실행하는 것만으로도 테스트를 수행 할 수 있습니다. 보다 정교한 테스트를 위해 명시적인 테스트 러너가 필요한 경우 나머지 http://docs.racket-lang.org/rackunit/quick-start.html을 참조하십시오. 그러나 r5rs에서 당신이하고있는 것에 대해, 나는 가치있는 복잡성을 보지 못합니다. – dyoo

+0

감사합니다. 필요한 구문이 (# % require schemeunit/text-ui) 발견되었습니다. 그런 다음 #lang r5rs (# % 랙 유닛 필요) (# % rackunit/text-ui 필요) (# %는 "foo.scm"이 필요함)으로 변경하여 라켓의 내장으로 업그레이드했습니다. 테스트. 내가 원하는 것처럼 일하는 것 같아. 고마워. 이 정보를 답안에 추가하면 궁금합니다. – oligofren

관련 문제