1

计划快要把我逼疯了。在下面的代码中,我只是试图将提供给 repl 的字符串解析为实际列表。相反,当我打印应该是我的解析列表时,我得到的只是一个正确的 parends 列表!我正在使用以下站点来测试我的代码: http ://repl.it/

我完全希望我的代码能够创建如下列表: (+ 1 2) 或者可能是这样,因为我不是类型在方案中的工作方式。("+" "1" "2")

非常感谢我的列表为何如下所示的任何帮助:())))

(define repl
      (lambda (input)
          (define symbol_list (Read input))
          ;(define value (eval symbol_list))
          ;(myprint value)
          ;(print (length symbol_list))
          (print symbol_list)
      )
)

(define Read
      (lambda (input)
          (define symbol (substring input 0 1))
          (cond
              ((string=? ")" symbol) '())
              ((or (string=? "(" symbol) (string=? " " symbol))
                  (Read (substring input 1 (string-length input))))
              (else (cons symbol (Read (substring input 1 (string-length input)))))
          )
  )
)

(repl "(+ 1 2)")
4

1 回答 1

2

该代码正在运行,我在 Racket 中对其进行了测试 - 您用于测试它的解释器可能存在问题。

顺便说一句,您想要做的事情可以使用内置程序来完成,如下所示:

(read (open-input-string "(+ 1 2)"))
=> '(+ 1 2) ; a list of symbols/numbers, not strings
于 2013-04-06T18:42:55.370 回答