1

我得到一个字符串作为输入,我想将它存储在一个数组或一个向量中,这样我就可以检查损坏的字符串的值。

在这里,我将字符串分解为 chars :

(define (dealBreaker str) (string->list str))  ; break the string into chars

但是当我尝试声明一个简单的向量时:

(define (myVector (make-vector 4 (/ 1 2))))

我明白了:#%plain-lambda: not an identifier in: (make-vector 4 (/ 1 2))

如何someVector从上面的方法声明一个为损坏字符调用的向量dealBreaker

4

3 回答 3

3

试试这个,对于一些str字符串:

(define (dealBreaker str)
  (list->vector (string->list str)))

(define myVector (dealBreaker "some string"))

myVector
=> '#(#\s #\o #\m #\e #\space #\s #\t #\r #\i #\n #\g)

以上将从字符串中的字符创建一个新向量,这是您需要的吗?

于 2012-12-07T13:56:21.613 回答
2

这里的问题是define应该是

(define identifier value)

但现在你有

(define (identifier value))

所以试试

(define myVector (make-vector 4 (/ 1 2)))

有点混乱,因为在Scheme中,define是重载的,还有

(define (functionName formals) body)

但这纯粹是语法糖

(define functionName
    (lambda formals body))

旁注:一些初学者方案教科书建议使用 lambda 版本,因为它更明确。

但是,在这种情况下,只需执行以下操作:

 (define myVec (list->vector (dealBreaker str)))
于 2012-12-07T13:10:40.413 回答
1

您遇到的直接问题myVector似乎是由于放错了括号 - 试试这个,看看它是否解决了“plain-lambda”错误:

(define myVector (make-vector 4 (/ 1 2)))

关于将“dealBreaker”字符串转换为向量的问题,您应该能够做到这一点:

(define (someVector dealBreakerList) (list->vector dealBreakerList))

(someVector (dealBreaker "someString"))

或者,如果您希望 'someVector' 作为完整功能:

(define (someVector str) (list->vector (string->list str)))

(someVector "someString")
于 2012-12-07T12:43:24.490 回答