문제

디지털 전자 과정을위한 진실 테이블 생성기를 만들려고 노력하고 있습니다. 왜냐하면 여가 시간에 재미 있고 나를 판단하지 않기 때문입니다.

누구든지, 나는 연산자와 동등한 문자열을 가진 해시와 해당 연산자에 해당하는 체계 절차를 값으로 가질 것이라고 생각했다.

예를 들어

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

그래서 나는 같은 일을 할 수 있습니다

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

이제 나는 위의 것이 아마도 제대로 작동하지 않을 것이라는 것을 알고 있지만, 그것이 제대로 될 때까지 땜질조차 할 수 없습니다. and 그리고 or 특별한 계획이 있습니다. 대체에서 입력하면 not 대답합니다 #<procedure:not>. 그러나 내가 그것을 주면 and 또는 or, 그것은 말한다 and: bad syntax in: and. 절차 버전이 있습니까? and 내가 사용할 수 있습니까? 아니면 하나를 만들어야합니까? lambda? 아니면 내가 완전히 빠진 것이 있습니까?

내가 Get-Go에서 Lambda와 함께 가지 않은 유일한 이유는 내장의 가변 능력을 잃고 싶지 않기 때문입니다. and 내가 할 수있는 (and #t #f) 만큼 잘 (and #t #f #f #t #f #t)].

도움이 되었습니까?

해결책

함수 양식을 사용하려는 경우 and 그리고 or (단락이되지 않는다는 제한 사항으로) 가변 아티리 아티리 속성을 잃지 않으면 쉽게 그렇게 할 수 있습니다.

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

(values (PLT) 체계의 관용 정체성 기능입니다.)

다른 팁

그렇습니다. 제도 (대부분의 언어와 같은)는 "열망"언어이기 때문에 절차가 될 수 없습니다. 절차에 대한 모든 인수는 절차가 제어되기 전에 평가됩니다 (인수 값 수신). and 그리고 or "단락"필요-최종 결과가 알려진 즉시 인수 평가를 중지하십시오. 따라서 각 인수가있는 열망하는 언어 (Haskell과 같은 "게으른"언어로 정기적 인 절차/기능이 될 수 없습니다. 필요에 따라 매우 다른 품종이며 그렇지 않은 경우에만 평가됩니다. 필요 이 "일반 기능"대 "특별한 형태"구별 ... 그러나 아아, 계획은 그 중 하나가 아닙니다!).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top