2

たとえばprintf、 list'((2 t r d))でプロシージャを使用すると、出力の最後の行は次のようになります。

'(#<void>)

表示される回数'(#<void>)は、ネストされたリストの数によって異なります。これを説明してもらえますか???

これは私のprintf関数です

(define counting 
  (lambda (lst)
    (if (null? lst)
        '()
        (printf "~a, ~s\n" (car lst) (length (cdr lst))))))

fprintfこのフォームを使用して、他の手順を試してみました

(fprintf (current-output-port) "~a, ~s\n" (car lst) (length (cdr lst)))

同じことが起こります!

4

2 に答える 2

0

「出力の最後の行は'(#<void>)- これは、Scheme 環境が 1) 印刷したい内容と 2) 評価された式の戻り値を表示しているために発生している」とおっしゃいました。例えば

> (list (display 1))
1(#<void>)

「1」が出力され、次にリスト結果が出力されます。対話型セッションで入力しているため、常に戻り値が表示されます。戻り値を実際に隠すことはできませんが、ほとんどのスキームは「未定義」の戻り値を認識し、出力しません。

> (display 1)
1

display上記では、返されたとしても#<void>、インタプリタはそれを表示しないことを知っています。

于 2013-11-06T14:53:17.537 に答える