0

それはすべてスキームとその入力システムに関するものです。始めましょう。私はこの入力を取得しました。プログラムは eof まで読み続けなければなりません。

]=> (getallinput)
22 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()()))))
20 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()())))) 

そして、これが関数です

(define (getAllinput)
  (let ((port console-i/o-port))
    (letrec ((nread (lambda (port)
                      (let ((value (read port)))
                        (let ((tree (read port)))
                          (display (findValor (sum tree) value))
                          (if (not (eof-object? port))
                              (nread port)))))))
      (nread port))))

問題は、コンソールからの読み取りに問題があり、letrec、問題がどこにあるかはわかっていますが、解決方法はわかりません。

(if (not (eof-object? tree)) (nread port)))))))(nread port))))

入力を前後に読んで貼り付けます、よろしくお願いします

4

2 に答える 2

0

trueをeof-object?返すには、コンソールから読み取っている場合、実際にファイルの終わりを送信する必要があります。Unixでは、CtrlD;を押します。Windowsでは、を押してからを押しCtrlZますEnter

于 2013-02-03T15:58:29.357 に答える
0

質問に示されている関数では、(eof-object? port)どれが決して真にならないかをチェック(eof-object? tree)していますが、質問のさらに下に示されているようにチェックする必要があります。または(eof-object? value)

また、findValor関数で読み取った値を使用する前に、次の条件を確認する必要があります。

(define (getAllinput)
  (let ((port console-i/o-port))
    (letrec ((nread (lambda (port)
                      (let* ((value (read port))
                             (tree (read port)))
                        (if (not (eof-object? value))   ; <--
                            (begin
                              (display (findValor (sum tree) value))
                              (nread port)))))))
      (nread port))))
于 2013-02-03T22:22:05.830 に答える