4

これの目的は、考慮される文字が数値またはオペランドであるかどうかを確認し、それをリストに出力して、txtファイルに書き出すことです。上で述べたように(リストに書き込んでからそのリストをファイルに書き出す)、手順から直接txtファイルに書き出すのか、どちらのプロセスがより効率的か疑問に思います。私はスキームに慣れていないので、正しい用語を使用していない場合はお詫びします

(define input '("3" "+" "4"))

(define check
   (if (number? (car input))
    (write this out to a list or directly to a file)
    (check the rest of file)))

私が念頭に置いていたもう1つの質問は、チェックプロセスが再帰的になるようにするにはどうすればよいですか?たくさんの質問があることは知っていますが、他のサイトで見つけた方法をチェックすることに少し不満を感じています。私は本当に助けに感謝します!

4

1 に答える 1

3

機能を2つの別々の手順に分割することをお勧めします。1つは文字列のリストを生成するためのもので、もう1つはそれらをファイルに書き込むためのものです。最初の手順では、空白を埋めることができるように一般的なアイデアを示します(これは結局のところ宿題です)。これは、再帰的なソリューションの標準的な構造に従います。

(define (check input)
  (cond ((null? input) ; the input list is empty
         <???>)        ; return the empty list
        ((string->number (car input)) ; can we convert the string to a number?
         (cons "number"  <???>)) ; add "number" to list, advance the recursion
        (else                    ; the string was not a number
         (cons "operand" <???>)))) ; add "operand" to list, advance recursion

2番目の部分では、一般的な考え方は次のようになります。

(define (write-to-file path string-list)
  (call-with-output-file path
    (lambda (output-port)
      (write <???> output-port)))) ; how do you want to write string-list ?

もちろん、上記の手順では、の本体をいじって、lambda文字列のリストから期待どおりの出力を生成できます。たとえば、文字列のリスト、各行の文字列、または1行として出力を生成できます。スペースなどで区切られた一連の文字列を使用します。次のように両方のプロシージャを呼び出します。

(write-to-file "/path/to/output-file"
               (check input))
于 2012-05-06T05:36:11.650 に答える