我得到一个字符串作为输入,我想将它存储在一个数组或 一个向量,所以我可以检查断字符串的值。
在这里,我将字符串分成字符:
(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
的向量?
答案 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")