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