2014-02-16 2 views
1

В Цыпленке это выглядит как я могу (use srfi-9), но в Guile это похоже, что вы говорите (use-modules (srfi srfi-9)), в Ракетке это (require srfi/9). Существует ли стандартизованная форма use-module, которая должна работать во всех реализациях схемы (чтобы я мог писать переносимый код)?Существует ли стандартизованный способ загрузки SRFI?

ответ

3

Да, в R6RS и R7RS, используйте:

(import (srfi …)) 

import является 'стандартной формы' для этого. Проблема в том, что может зависеть от реализации. Таким образом, проблема перемещается на один уровень. Я видел:

(import (srfi :0)) 
(import (srfi srfi-0) 

в различных вариантах осуществления.

1

Для R6RS и R7RS существует способ загрузки библиотек, поэтому это действительно должно быть возможно. Я знаю, что вы можете сделать (import (srfi :9)), и он работает в Ikarus, а также в Racket. Я не уверен, как будто существует стандарт того, что должно означать соглашение об именах, поэтому оно может быть другим в других реализациях. Возможно, вам понадобится сделать обертку для определенных реализаций.

В R5RS вам нужно будет разорвать эталонную реализацию и использовать load. Это вообще не будет использовать оптимизированный код реализации. Я видел проекты, которые создают стандартный файл для реализации, который использует то, что они поддерживают, и добавляет код для тех, кто не получает лучшую производительность.

Смежные вопросы