如何在数组或向量中存储破解的Scheme字符串?

时间:2012-12-07 12:28:35

标签: arrays string vector char scheme

我得到一个字符串作为输入,我想将它存储在一个数组或 一个向量,所以我可以检查断字符串的值。

在这里,我将字符串分成字符:

(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的向量?

3 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分: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)))

答案 2 :(得分: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")