4
Common Lisp中我可以有条件地排除或包括用于这样不同的实施方式的代码:编写便携式Scheme代码的最佳方式?
#+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)
而且侨胞,为我-libs- [其他-schemes-这里] .scm
这是唯一的方法吗?
我不会尝试在Scheme中制作一个完全可移植的应用程序,但如果我可以让我的程序在两个或三个不同的实现中运行,那将会很好。
非常感谢Vijay!我会看看scmxlate - 它似乎很适合我的需求。 – Jay 2009-09-20 11:35:15