【发布时间】:2023-08-15 22:30:01
【问题描述】:
在 Common Lisp 中,我可以有条件地排除或包含不同实现的代码,如下所示:
#+sbcl (use-sbcl-cool-feature)
#-sbcl (use-my-own-not-so-cool-version)
这样我可以通过隔离不可移植的位来编写可移植的代码。
如何在 Scheme 中做到这一点?有没有办法像这样询问 Scheme 解释器或编译器的名称(甚至是它实现的标准)?
(cond ((r6rs?)
(make-eq-hashtable))
((gambit?)
(make-table))
;; other cases here
(#t (make-my-inefficient-hash-table))
我知道我可以将所有可能的不可移植代码段包装在不同的过程中,然后拥有这样的兼容性包:
;; in my-libs-gambit.scm:
(define make-hash-table make-table)
同样适用于 my-libs-[other-schemes-here].scm
这是唯一的方法吗?
我不会尝试在 Scheme 中制作一个完全可移植的应用程序,但如果我可以让我的程序在两个或三个不同的实现中运行,那就太好了。
【问题讨论】:
标签: scheme portability