我正在使用MITScheme从UCB学习61a。
前几章我一直在使用windows(首先下载cygwin,然后运行XWin类型的emacs&然后我得到我的emacs编辑器和REPL)。
这个工作正常,但我已经切换到Ubuntu,我正在使用MIT Scheme。它一直运作良好,但我最近遇到了一个问题。
[我正在使用Ubuntu上的MIT / GNU Scheme 9.1和Windows上的STk Interperter 4.0.1版本]
我正在尝试编写黑杰克程序。
我把输入作为一手牌(广告8s 5h)[用于ace钻石,8个黑桃,5个心脏]。
要访问'a值,UCB讲座和Windows版本可以正常使用:
(first(first'(ad 8s 5h)))===>一个
当我在Ubuntu MIT Scheme上尝试这个时,我收到错误:
作为参数传递给safe-car的对象广告不是一对。
经过一些测试后,我发现这里的MIT方案将首先用于提取列表的第一项:
(首先'(ad 8s 5h))=====>广告
但它不会首先用作单个词的第一个字母的选择器。
有人可以给我一个建议吗?我想继续在Ubuntu上学习这门课程,因为它在保存和打开文件方面让我的生活变得更加容易。
谢谢,
AJ
答案 0 :(得分: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