Я пытаюсь создать генератор таблиц правды для курса по цифровой электронике, потому что так я получаю удовольствие в свободное время и не осуждаю меня.
В любом случае, я решил, что у меня будет хеш со строковым эквивалентом операторов в качестве ключей, и процедуры Scheme, которые соответствуют этим операторам в качестве значений.
* 1005 Е.Г. *
(define operator-table #hash(("+" . or)
("*" . and)))
Так что я мог бы сделать что-то вроде
(lambda (a b) ((hash-ref operator-table (string-ref input-str i)) a b))
Теперь я понимаю, что вышеупомянутое, вероятно, не будет работать правильно, но, поскольку это так, я даже не могу повозиться с этим, пока не получу это правильно, потому что, очевидно, and
и or
являются особенными в Схеме. На REPL, если я наберу not
, он отвечает #<procedure:not>
. Но если я дам ему and
или or
, там будет написано and: bad syntax in: and
. Можно ли использовать версию процедуры and
? Или я должен сделать один с lambda
? Или я что-то упускаю полностью?
Единственная причина, по которой я не просто пошел с лямбдой с самого начала, заключается в том, что я не хочу терять способности переменной арности встроенного and
[Я могу сделать (and #t #f)
так же как (and #t #f #f #t #f #t)
].