私はオンラインスキームについて簡単に紹介した、と私は、この関数とのトラブルのビットを持っている:関数定義で非手続き呼び出し?
(define (title-style str)
(let loop ((lC#\space) (i 0) (c (string-ref str 0)))
((if (char=? lC#\space)
(string-set! str i (char-upcase c)))
(if (= (- (string-length str) 1) i)
str
(loop c (+ i 1) (string-ref str (+ i 1)))))))
(display "star wars iv: a new hope")
(display (title-style "star wars iv: a new hope"))
私はそれを呼び出すしようとすると、私はこの取得:
Error: call of non-procedure: #<unspecified>
Call history:
title-style.scm:6: loop
...
title-style.scm:1: g6 <--
というエラーが私はChez Schemeで同じ結果を得ています。
それがタイトルケースに文字列を変換し、私が以前持っエラーメッセージから、それがない:call of non-procedure: "Star Wars Iv: A New Hope"
Anがに比べて 'はstring-> list'と'リスト - > STRING'のアプローチを(使用しての逆を追加しました'string-ref')はR7RS上で、' string-ref'(そして 'string-set!')はO(n)であることが許されています(文字列がUTF-異なるバイト数を占めることがあります)。 –
助けてくれてありがとう。私はまだコンスセルがどのように動作するかについて頭を落とそうとしていますが、これは大いに役立っています。 – user1610406
おそらく実装が、引数が文字列定数に評価されるとき、これはデフォルトでサポートされません。 Chicken、Racket、Gambit、Ikarusはすべて定義されていない動作を表示します。 – Sylwester