PLT Scheme noob:布尔和/或不是程序?

Dan*_*aro 4 scheme boolean racket

我正在尝试为数字电子课程制作一个真值表生成器,因为这是我在业余时间玩得开心并且不评判我的方式.

Anywho,我想我有一个哈希,字符串等价于运算符作为键,以及与这些运算符对应的Scheme程序作为值.

例如

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

所以我可以做点什么

(lambda (a b) ((hash-ref operator-table (string-ref input-str i)) a b))
Run Code Online (Sandbox Code Playgroud)

现在我意识到上面的内容可能无法正常工作,但是因为在我做对了之前我甚至无法修补它,因为显然and并且or在Scheme中很特别.在REPL,如果我输入not它回复#<procedure:not>.但是,如果我给它,and或者or,它说and: bad syntax in: and.是否有and我可以使用的程序版本?或者我必须制作一个lambda?或者我完全错过了什么?

我不只是从一开始就使用lambda的唯一原因是我不想失去内置的可变性能and[我可以做得(and #t #f)很好(and #t #f #f #t #f #t)].

Eli*_*lay 6

如果你想使用的功能,形式andor(与他们不会短路限制),而不是失去的可变参数数量的财产,那么你可以很容易地做到这一点:

(define (and* . xs) (andmap values xs))
(define (or*  . xs) (ormap values xs))
Run Code Online (Sandbox Code Playgroud)

(values是(PLT)Scheme中的惯用身份功能.)