fand ich eine kurze Einführung Online-Schema, und ich bin ein wenig Mühe mit dieser Funktion:Aufruf von Nicht-Prozedur in Funktionsdefinition?
(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"))
Wenn ich es versuche Aufruf, bekomme ich diese:
Error: call of non-procedure: #<unspecified>
Call history:
title-style.scm:6: loop
...
title-style.scm:1: g6 <--
Dieser Fehler kommt von Chicken Scheme, ich bekomme auch die gleichen Ergebnisse in Chez Scheme.
Es einen String in Titel Fall konvertiert und aus den Fehlermeldungen ich früher bekam, es tut: call of non-procedure: "Star Wars Iv: A New Hope"
Ein weiterer Kopf der Verwendung des 'Saiten-> list' und' Listen-> string' Ansatz (im Vergleich zu 'string-ref') ist, dass auf R7RS' string-ref' (und 'string-set!') O (n) sein darf (für Implementierungen, bei denen Strings intern als UTF-8 dargestellt werden, also jedes Zeichen kann eine andere Anzahl von Bytes belegen). –
Danke für die Hilfe. Ich versuche immer noch, meinen Kopf darüber zu wickeln, wie gut Zellen funktionieren, das hilft sehr. – user1610406
Wahrscheinlich unterstützt keine Implementierung dies standardmäßig, wenn das Argument eine String-Konstante ergibt. Chicken, Racket, Gambit, Ikarus zeigt alles undefinierte Verhalten und oft ohne einen Fehler zu signalisieren, wie der Bericht empfiehlt. – Sylwester