2017-04-09 47 views
-1

我想下面的代碼:字符串替代*不工作

(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 

在哪裏的問題,這可怎麼解決呢?

回答

2

這與string-substitute*無關。

你引用的名單,所以(string-append "NO " "TESTING")未評估:

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

使用quasiquote:

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

或不報價都:

(list (cons "a test" (string-append "NO " "TESTING")) 
+0

爲什麼這個無效:'(print(string-substitute *「this is a test」(list(list)「test」「NO TESTING ZONE」)(list「this」「this」))))' – rnso

+0

@rnso因爲它需要汽車和cdr都是字符串的配對列表,而不是汽車是字符串而cdr是列表的配對列表。 – molbdnilo