2009-11-02 3 views
4

나는 내 여가 시간에 재미를 나를 판단하지 않습니다 어떻게이기 때문에 디지털 전자 코스에 대한 진실을 테이블 생성기를 만들기 위해 노력하고있어.PLT 구성표 noob : 부울 및/또는 프로 시저가 아닌가요?

됐건, 나는 내가 키와 사업자의 문자열에 해당하고, 값으로 그 사업자에 해당하는 계획 절차에 해시가 거라고 생각.

예.

 
(define operator-table #hash(("+" . or) 
           ("*" . and))) 

그래서 지금은 잘 작동하지 않습니다 아마 위의 실현,하지만 그대로 내가 바로 그것을 얻을 때까지 나는 심지어 어설프게 수 없습니다

(lambda (a b) ((hash-ref operator-table (string-ref input-str i)) a b)) 

같은 것을 할 수있는, 분명히 andor이 Scheme에서 특별하기 때문입니다. REPL에서 not을 입력하면 #<procedure:not>가 응답합니다. 그러나 내가 and 또는 or이라면, 그것은 and: bad syntax in: and를 말한다. and의 절차 버전이 있습니까? 아니면 lambda으로해야하나요? 아니면 전적으로 뭔가를 놓치고 있습니까?

난 그냥 GET-이동에서 람다와 함께하지 않은 유일한 이유는 내가 [나는 (and #t #f #f #t #f #t)뿐만 아니라 (and #t #f)을 수행 할 수 있습니다] 내장 and의 가변 인수에 대응 능력을 잃고 싶지 않아한다는 것입니다.

답변

6

, 당신은 쉽게 그렇게 할 수 있습니다 :

(define (and* . xs) (andmap values xs)) 
(define (or* . xs) (ormap values xs)) 

(values은 (PLT) 체계의 관용 항등 함수입니다.)

3

그래, 그들은 절차가 될 수 없습니다 제도 때문에 (대부분의 언어와 같은)에 "열망"언어 - 절차가 제어되기 전에 절차에 대한 모든 인수 (인수 값을 수신)으로 평가됩니다. andor 필요에 "단락"- 즉시 최종 결과가 알려진대로 인수 평가를 중지 - 그래서 그들은 정기적으로 절차가 될 수 없습니다/어떤 열망 언어 (함수와 같은 하스켈로 "게으른"언어 - 아아, 매우 다른 품종 및 필요 "특별한 형식"구분 대이 "일반 기능"을하지 않습니다 ...하지만, 계획은 단지 아니다 - 때 필요한 경우에 한해 각 인수 평가된다 그 중 하나!). 당신이 가변 인수에 대응 속성을 잃게하지 (그렇지 않은 단락 것이다 제한과) andor의 기능 양식을 사용하려면

+7

일부 메모 : 1. PLT 체계는 어떤 체계와도 같지 않습니다 - 특히 "지연된"체계 방언이 포함됩니다. 여기서'및'과'또는 '및'if '는 일반 함수입니다. 2.이 * 잘못된 * 게으른 언어이 구별을하지 않아도 대답 - 게으른 언어가 특별한 형태를 필요가있는 경우는 확실히있다 - 예를 들어,'where' 하스켈하는 기능은 아직 없습니다. 또한 "엄격한"연산자 (Haskell에 포함되어 있음)를 원한다면이 연산자 자체도 특별한 형식이어야합니다! –

+0

아하! 그건 의미가 있습니다! 나는 단락을 고려하지 않았다. –