я нашел краткое введение в схему сети, и у меня немного проблемы с этой функцией:Вызов непроцедур в определении функции?
(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 <--
Это ошибка происходит от Chicken Scheme, я также получаю те же результаты в Chez Scheme.
Он преобразует строку заголовка дела, а также из сообщений об ошибках, которые я получил раньше, он делает: call of non-procedure: "Star Wars Iv: A New Hope"
Добавленная потенциал роста использования 'string-> list' и' list-> string' подход (по сравнению с 'string-ref') - это то, что на R7RS' string-ref' (и 'string-set!') разрешено быть O (n) (для реализаций, где строки представлены внутри как UTF-8, и поэтому каждый символ может занимать другое количество байтов). –
Спасибо за помощь. Я все еще пытаюсь обернуть голову тем, как работают клетки-соты, это очень помогает. – user1610406
Вероятно, никакая реализация не поддерживает это по умолчанию, когда аргумент оценивается константой строки. Курица, Ракетка, Гамбит, Икарус все отображает неопределенное поведение и часто не сигнализирует об ошибке, как рекомендует отчет. – Sylwester