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
,这一切都不会发生。