6

DrRacketを使っています。このコードに問題があります:

          (define (qweqwe n) (
                      (cond 
                        [(< n 10) #t]
                        [(>= (lastnum n) (pochtilastnum n)) (qweqwe (quotient n 10))]
                        [else #f]
                        )
                      )
    )
    (define ( RTY file1 file2 )

     (define out (open-output-file file2 #:mode  'text #:exists 'replace))  
    (define in (open-input-file file1)) 
    (define (printtofile q) (begin
                   (write q out)
                   (display '#\newline out)
                   ))
       (define (next) 
          (define n (read in)) 
(cond 
      [(equal? n eof) #t]
      [else (begin
      ((if (qweqwe n) (printtofile n) #f))
      ) (next)]
      )
)
    (next)   
   (close-input-port in)
   (close-output-port out)) 

しかし、( RTY "in.txt" "out.txt" ) を開始すると、 ((if (qweqwe n) (printtofile n) #f)) でエラーが発生します。

    application: not a procedure;
    expected a procedure that can be applied to arguments
    given: #f
    arguments...: [none]

どうしたの?

追加:コードを次のように変更しました:

(cond 
      [(equal? n eof) #t]
      [else
      (if (qweqwe n) (printtofile n) #f)
      (next)]
      )

しかし、問題は残ります。

4

3 に答える 3

0

アルゴリズムの正しさを検討する前に、コードを構文的に正しくする必要があります。つまり、コンパイルする必要があります。Scheme プログラミングの優れた点の 1 つは、インタラクティブな環境により、プログラムを簡単にコンパイルして評価できることです。

多くの構文エラーがあるため、コードがコンパイルされないか、実行されません。これが構文的に正しい(望ましい動作に関する私の推測に基づく)コードです。部分的には、コードを厳密にフォーマットすることにより、構文の正確さに到達します。

(define (qweqwe n) 
  (cond 
   [(< n 10) #t]
   [(>= (lastnum n) (pochtilastnum n)) (qweqwe (quotient n 10))]
   [else #f]))

(define (RTY file1 file2 )
  (define out (open-output-file file2 #:mode  'text #:exists 'replace))  
  (define in  (open-input-file  file1)) 
  (define (printtofile q)
    (write q out)
    (display '#\newline out))

  (define (next) 
    (define n (read in)) 
    (cond 
     [(equal? n eof) #t]
     [else
      (if (qweqwe n) (printtofile n) #f)
      (next)]))
  (next)   
  (close-input-port in)
  (close-output-port out))
于 2013-05-10T14:37:54.703 に答える