1

スキームは私を夢中にさせようとしています。以下のコードでは、 repl に指定された文字列を実際のリストに解析しようとしています。代わりに、解析されたリストであると思われるものを印刷すると、正しい親のリストだけが得られます! 次のサイトを使用してコードをテストしています: 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 に答える