Замена строки * не работает

Я пытаюсь следующий код:

(require-extension srfi-13)
(require-extension regex)
(print (string-substitute* "This is a test" '(("a test" . "NO TESTING ZONE" ) ) ) )

Это работает, со следующим выводом:

This is NO TESTING ZONE

Но следующее не работает:

(print (string-substitute* "This is a test" '(("a test" . (string-append "NO " "TESTING") ) ) ) )

Ниже приводится ошибка:

Error: (string-substitute) bad argument type - not a string: (string-append "NO " "TESTING")

Несмотря на то, что следующее показывает, что вывод действительно является строкой:

(print (string? (string-append "NO " "TESTING")))
#t

Где проблема и как это можно решить?

1 ответ

Решение

Это не имеет ничего общего с string-substitute*,

Вы цитируете список, так (string-append "NO " "TESTING") не оценивается:

> '(("a test" . (string-append "NO " "TESTING")))
'(("a test" string-append "NO " "TESTING"))

Используйте квазицитатуру:

`(("a test" . ,(string-append "NO " "TESTING")

или не цитируйте вообще:

(list (cons "a test" (string-append "NO " "TESTING"))
Другие вопросы по тегам