scheme - 编写可移植 Scheme 代码的最佳方法?

标签 scheme portability

在 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 中制作一个完全可移植的应用程序,但如果我能让我的程序在两个或三个不同的实现中运行,那就太好了。

最佳答案

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

关于scheme - 编写可移植 Scheme 代码的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448342/

相关文章:

scheme - 动态找出功能有多少输入, Racket

algorithm - 尝试在方案中编写超操作

java - 将 Java 应用程序编写为 jar 和 apk

c++ - C++11 中的 checked_array_iterator<T>

dictionary - 通过应用给定的操作将矩阵转换为向量的函数

lisp - 在 Scheme 中如何比较两个字符串并忽略大小写?

lisp - SICP中的一个例子

python - 如何将基于 Python PyQt 的程序转换为 Linux 中的可移植包?

VC 中的复杂 double

c++ - 是否有各种编译器实现的扩展的简洁列表?