2009-09-19 62 views
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中制作一个完全可移植的应用程序,但如果我可以让我的程序在两个或三个不同的实现中运行,那将会很好。

回答

2

Slides of a talk由Dorai Sitaram关于此主题。 按照给定的指示here也可能有所帮助。

+0

非常感谢Vijay!我会看看scmxlate - 它似乎很适合我的需求。 – Jay 2009-09-20 11:35:15