1

MITScheme を使用して UCB から 61a を学習しています。

最初の数章では、私は Windows を使用してきました (最初に cygwin をダウンロードし、次に XWin タイプの emacs & を実行すると、emacs エディターと REPL を取得します)。

これはうまくいきましたが、Ubuntu に切り替えて MIT スキームを使用しています。それはうまくいっていますが、私は最近問題に遭遇しました。

[Ubuntu では MIT/GNU スキームのリリース 9.1、Windows では STk Interperter バージョン 4.0.1 を使用しています]

ブラック ジャック プログラムを作成しようとしています。

私はカードのハンドとして入力を受け取ります '(ad 8s 5h) [エースのダイヤ、8 のスペード、5 のハート]。

値にアクセスするには、UCB レクチャーと Windows バージョンで問題ありません。

(first (first '(ad 8s 5h))) ===> a

Ubuntu MIT スキームでこれを試すと、次のエラーが表示されます。

safe-car に引数として渡されたオブジェクト ad はペアではありません。

いくつかのテストの後、ここで MIT スキームがリストの最初の項目を抽出するために最初に使用することがわかりました。

(最初の '(広告 8 秒 5 時間)) =====> 広告

ただし、単一の単語の最初の文字のセレクターとして first は使用しません。

誰でも私に提案をしてもらえますか?たとえば、ファイルを保存して開くという点で私の人生がずっと楽になるので、Ubuntuでこのコースを学び続けたいと思います.

ありがとう、

AJ

4

1 に答える 1

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
于 2013-07-23T18:38:51.400 に答える