2013-07-23 6 views
1

Я изучаю 61a из UCB, используя MITScheme.Разница между схемой Ubuntu и схемой XWin

Для первых нескольких глав я использую окна (сначала загружаю cygwin, а затем запускаю XWin-тип emacs &, и я получаю редактор emacs и REPL).

Это нормально работает, но я переключился на Ubuntu, и я использую схему MIT. Он работает хорошо, но я недавно столкнулся с проблемой.

[Я использую Release 9.1 из MIT/Scheme GNU на Ubuntu и СТК Interperter версии 4.0.1 на Windows]

Я пытаюсь написать программу блэк джек.

Я принимаю ввод как руку карт (ad 8s 5h) [для туза бриллиант, 8 лопат, 5 сердец].

Чтобы получить доступ к 'значение, лекции UCB и версию окна отлично с:

(первый (первый' (объявление 8s 5h))) ===> а

Когда я пытаюсь это на схеме MIT Ubuntu, я получаю ошибку:

Объявление объекта, переданное в качестве аргумента для безопасного автомобиля, не является парой.

После некоторого тестирования я вижу, что MIT схема здесь будет использовать первый, чтобы извлечь первый элемент из списка:

(первый «(объявление 8s 5h)) =====> Объявление

Но он не будет использоваться сначала как селектор для первой буквы одного слова.

Может ли кто-нибудь дать мне предложение? Я хотел бы продолжить изучение этого курса на Ubuntu, потому что это облегчает мою жизнь с точки зрения сохранения и открытия файлов, например.

Спасибо,

AJ

+0

Помните, что у вас есть не одна реализация схемы, доступная в Software Center, но более дюжины. В дополнение к 'MIT Scheme' (R5RS) вы имеете:' DrRacket', 'Ikarus',' Gambit', 'Chicken',' Scm', 'Scheme48',' Sigscheme', 'Sisc' (использует JRE),' Tinyscheme', 'Scsh',' Gauche', 'Elk',' Scheme9', 'Stalin',' Scheme2c' и 'Oaklisp'. Два первых в списке поддерживают новейшие стандарты. – Sylwester

ответ

0

Использование first для доступа к первому символу в символе не является переносимым по реализации Scheme. У большинства переводчиков first или car будет только Работа для пар. Для того, чтобы получить доступ к первому символу в символе создать процедуру помощника:

(define (first-symbol sym) 
    (string->symbol    ; 4. convert the string to a symbol 
    (string      ; 3. create a one-character string 
    (string-ref     ; 2. get the first character in the string 
    (symbol->string sym) 0)))) ; 1. convert the symbol to a string 

выше функция использует только стандартные процедуры, он должен работать нормально в любом интерпретатором RXRs. Используйте его следующим образом:

(first-symbol (first '(ad 8s 5h))) 
=> 'a 
+0

Большое спасибо! Оскар Лопес! – Helix

+1

Я выяснил свою проблему: на окнах я использую версию STk Scheme, которая отличается от схемы MIT. Мне пришлось установить STk и настроить мои .emacs для запуска stk-stimply вместо мит-схемы, когда я (MX run-scheme) в EMACS! – Helix

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