2011-09-16 4 views
6

저는 새로운 Scheme/Racket 학생입니다. 따라서 뻔뻔한 문법 오류는 용서하십시오. 스키마 : 이상한 형태로 반환되는 세 점선 요소 목록 (중절 연산자와 같은)

그것은 계획 목록 '(a, b, c)가 무효되어야한다고 오늘 수업 시간에 와서, 그러나 우리가 그것을 실행했을 때, 그것은 반환 : 말도 안돼

>'(a . b . c) 
(b a c) 

합니다. Afaik, 통역사는 자동차 'a와 cdr'b와 함께 cons cell을 만들어야하고, c는 무효해야합니다. 즉, 통역사는 여기서 정말로 이상한 일을하고 있습니다. 이 작업은 #lang scheme, #lang racket 및 기타 작업에서 가능합니다. 우리는 DrRacket을 통역사로 사용하고 있습니다.

흥미롭게

,

>'(a . b . c . d) 

예외가 발생하고 죽는다.

나는 매우 호기심이 많아서 언어에 익숙하지 않기 때문에 이것을 이해할 수 있기를 바랍니다. Google은 매우 도움이되지 않았습니다 (아마 검색어가 모호한 것 같습니다) 감사합니다!

편집 : '(a . b . c)은 중온 연산자로 b로 해석 될 수 있습니다. 예 : >(4 . + . 6)은 10을 반환합니다. 아마도 통역사는 연산자와 같이 b를 사용하고 있습니까? 즉, (b a c)(+ 4 6)과 같은 것입니다.

>(define b +) 
>(define a 4) 
>(define c 6) 
>(a . b . c) 
10 

그래서 나는이 문제를 해결할 수 있다고 생각하지만, 나는 아직도 완전히의 사용을 이해하지 않습니다

Expermentation 말한다 "를." 이 경우 연산자. 나는 우리가이 문제를 해결했다고 생각하지만, 더 많은 통찰력이 크게 평가 될 것입니다!

+0

연산자의 양쪽에있는 점들로 Fortran : 1 .LT를 상기시킵니다. 3 – JasonFruit

답변

8

짧은 답변 : 알았습니다. 이 Racket 별 도트 사용에 대한 자세한 내용은 Racket docs의 infix 설명서를 참조하십시오.

4

이것은 라켓 독자의 특별한 특징입니다. (John의 대답을 참조하십시오.)

다른 구현의 경우 대신 readable S-expressions 판독기를 사용하여 중위 표현식을 읽을 수 있습니다. 중괄호를 사용합니다. 예 : {3 + 4}(+ 3 4)으로 표시됩니다. 더 특별한 (라켓 삽입 식 리더보다) {3 + 4 + 5} 또는 {3 + 4 + 5 + 6}을 사용할 수 있습니다. (+ 3 4 5)(+ 3 4 5 6)으로 각각 읽습니다.

+1

Rocket에 대해 읽을 수있는 S-exps 구현을 참조하십시오. http://planet.racket-lang.org/display.ss?package=sweet.plt&owner=asumu –