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))

補足: いくつかの初心者用スキームの教科書では、ラムダ バージョンの方が明示的であるため、ラムダ バージョンの使用を推奨しています。

ただし、この場合は、次のようにします。

 (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 に答える