String 如何在Scheme中定义字符串-我选择的任何字符串?
鉴于:String 如何在Scheme中定义字符串-我选择的任何字符串?,string,syntax,scheme,String,Syntax,Scheme,鉴于: (define output "") 或者 (define output "goodInput") 当我在代码中运行这些定义时,我得到: ERROR: In procedure memoization: ERROR: Bad define placement (define output ""). 为什么呢 编辑: ; Formal function of the code (define (double->sum myString) (define myVector 0)
(define output "")
或者
(define output "goodInput")
当我在代码中运行这些定义时,我得到:
ERROR: In procedure memoization:
ERROR: Bad define placement (define output "").
为什么呢
编辑:
; Formal function of the code
(define (double->sum myString)
(define myVector 0)
(set! myVector (breaking myString))
(define output "")
(define returnValue (checkLegit myVector)) ; check the number of legitimate characters ,they need to be either numbers or "."
(define flag 0)
(if (not(= returnValue (vector-length myVector))) (set! output "Input error") (set! flag (+ flag 1)))
(define i 0) ; the length of the vector
(define count 0) ; the value of all the numbers in the vector
(if
(= flag 1)
(do ()
((= i (vector-length myVector))) ; run until the end of the vector
(cond
((char=? (vector-ref myVector i) #\.) ; check if we found a dot
(set! output (appending output count)) (set! output (appendingStrings output ".")) (set! count 0)
)
(else (set! count (+ count (char->integer(vector-ref myVector i)) )) (set! count (- count 48))
); end of else
) ; end of cond
(set! i (+ i 1)) ; inc "i" by 1
); end of do
) ; end do
; if flag = 1 , then the input is in a correct form
(if (= flag 1) (set! output (appending output count)))
(if (= flag 1)
output
"Input error")
) ; END
问题不在字符串定义本身(没有奇怪的字符或类似的东西),而是在代码中定义的地方:您在一个过程中,过程中的最后一行不能是
定义
。尝试在定义之后返回一些内容,它应该可以正常工作
我猜您刚刚开始编写过程,只需继续按照定义编写其余的代码。目前,在末尾使用占位符值,这样口译员就不会抱怨:
(define (double->sum myString)
(define myVector 0)
(set! myVector (breaking myString))
(define output "")
'ok)
还有一个风格问题——尽管可以这样定义和设置变量,但使用let
表达式定义局部变量更为惯用。这就是我的意思:
(define (double->sum myString)
(let ((myVector (breaking myString))
(output ""))
'ok))
这样,您就不必使用set代码>,它变异了变量,与Scheme中首选的函数式编程风格背道而驰。问题不在于字符串定义本身(没有奇怪的字符或类似的东西),而是在代码中定义发生的地方:您在一个过程中,并且过程中的最后一行不能是define
。尝试在定义之后返回一些内容,它应该可以正常工作
我猜您刚刚开始编写过程,只需继续按照定义编写其余的代码。目前,在末尾使用占位符值,这样口译员就不会抱怨:
(define (double->sum myString)
(define myVector 0)
(set! myVector (breaking myString))
(define output "")
'ok)
还有一个风格问题——尽管可以这样定义和设置变量,但使用let
表达式定义局部变量更为惯用。这就是我的意思:
(define (double->sum myString)
(let ((myVector (breaking myString))
(output ""))
'ok))
这样,您就不必使用set代码>,它会对变量进行变异,与Scheme中首选的函数式编程风格背道而驰。在您发布的代码行之前有代码行吗?你能添加它吗?在你发布的那行之前有代码吗?你能加上吗?奥斯卡,我下面还有很多代码。。。请参阅编辑后的帖子。@ron这并没有改变我的答案,问题仍然是一样的,define
不能是过程中的最后一行。还要确保括号是正确的,可能就这么简单。不,代码的最后一行不是define。请参阅上面的完整代码,edited@ron如果代码缩进正确,会有很大帮助,因为它很难阅读。请不要把右括号当作大括号来对待,不要把它们放在单独的一行,而是放在同一行。您一直试图在Scheme中进行编程,就好像它是一种类似C的语言一样,这是problem@ron正如@ChrisJester-Young指出的,这个问题是因为在您的方案实现中,所有的定义都必须放在第一位,在您的代码中有一个集合代码>在开始的两个定义之间,所以这就是问题所在。如果定义只引用一个过程的本地值,那么将其声明为全局值不是一个好主意。请注意,按照我在解决方案中建议的方式使用let
,这一切都不会发生。。。请参阅编辑后的帖子。@ron这并没有改变我的答案,问题仍然是一样的,define
不能是过程中的最后一行。还要确保括号是正确的,可能就这么简单。不,代码的最后一行不是define。请参阅上面的完整代码,edited@ron如果代码缩进正确,会有很大帮助,因为它很难阅读。请不要把右括号当作大括号来对待,不要把它们放在单独的一行,而是放在同一行。您一直试图在Scheme中进行编程,就好像它是一种类似C的语言一样,这是problem@ron正如@ChrisJester-Young指出的,这个问题是因为在您的方案实现中,所有的定义都必须放在第一位,在您的代码中有一个集合代码>在开始的两个定义之间,所以这就是问题所在。如果定义只引用一个过程的本地值,那么将其声明为全局值不是一个好主意。请注意,按照我在解决方案中建议的方式使用let
,这一切都不会发生。