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)].
如果你想使用的功能,形式and和or(与他们不会短路限制),而不是失去的可变参数数量的财产,那么你可以很容易地做到这一点:
(define (and* . xs) (andmap values xs))
(define (or* . xs) (ormap values xs))
Run Code Online (Sandbox Code Playgroud)
(values是(PLT)Scheme中的惯用身份功能.)
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |