如何在Scheme中定义字符串 - 我选择的任何字符串?

时间:2012-12-16 14:55:24

标签: 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)
(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

1 个答案:

答案 0 :(得分:1)

问题不在于字符串定义本身(没有奇怪的字符,或类似的东西),它位于代码中的位置,其中发生了定义:你在里面过程,并且过程中的最后一行不能是define。尝试在定义后返回一些内容,它应该可以正常工作。

我猜你刚刚开始编写程序,继续执行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中首选的函数式编程样式。