gpt4 book ai didi

字符串追加不起作用;不断覆盖以前的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:56 26 4
gpt4 key购买 nike

我正在尝试做一个简单的任务,将一个数字多次 append 到一个字符串,并希望这会构建一个字符串。

但它不起作用,每次调用 (string-append ....) 似乎什么都不做。

这是我的代码:

(define myString "")
(string-append (number->string 4) myString)
(string-append (number->string 5) myString)
(string-append (number->string 6) myString)
(string-append (number->string 7) myString)
(display myString)

这显示:

“4”

“5”

“6”

“7”

(display myString)的空行

我做错了什么?

同样,如果我以其他方式进行操作,那么它也不起作用:

(define myString "")
(string-append myString (number->string 4))
(string-append myString (number->string 5))
(string-append myString (number->string 6))
(string-append myString (number->string 7))
(display myString)

感谢您的帮助

最佳答案

表达式 (string-append (number->string 4) myString) 的计算结果为 "4" ,这就是您的代码打印 4 的原因。同样,(string-append (number->string 5) myString) 计算为 "5",依此类推。两者都没有真正改变变量 myString 的值。

要真正改变变量的值,您需要使用 Scheme 的赋值语言形式 set! 赋值给那个变量。 (名称中的 ! 是一个 Scheme 约定,告诉您这是一个破坏性操作——也就是说,一个破坏 myString 中先前值并用新值替换它的操作。)例如,你可以这样写:

(define myString "")
(set! myString (string-append myString (number->string 4))) ;; assigns "4" to myString
(set! myString (string-append myString (number->string 5))) ;; assigns "45" to myString
(set! myString (string-append myString (number->string 6))) ;; assigns "456" to myString
(set! myString (string-append myString (number->string 7))) ;; assigns "4567" to myString
(display myString) ;; prints 4567

但是您可以首先构建您想要的表达式,而不必执行所有这些破坏性操作:

(define myString 
(string-append (number->string 4)
(string-append (number->string 5)
(string-append (number->string 6)
(string-append (number->string 7) "")))))
(display myString) ;; prints 4567

那时,我不会编写如此重复的代码,而是编写 fold-right :

(define myString 
(fold-right (lambda (num str)
(string-append (number->string num) str))
"" (list 4 5 6 7)))
(display myString) ;; prints 4567

如果您必须将 "4567" 分配给一个名为 myString 的全局变量,那么您只需在上述两个代码片段中的任何一个中将 define 替换为 set! 即可。然而,尽管 set! 有时可以派上用场,但惯用的 Scheme 倾向于谨慎使用 set! 和其他破坏性操作。我喜欢将感叹号视为“谨慎行事!”的意思。

关于字符串追加不起作用;不断覆盖以前的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com