1

次の関数を使用して、posn のリストをトリプル (posn、posn、symbol) のリストに変換し、後で draw-solid-line で使用できるようにします。

(define (list->triples a-list)
        (cond
          [(= (length a-list) 1) empty]
          [else (cons (list (first a-list) (second a-list) my-color) (list->triples (rest a-list)))]
          )
        )

それを (list (make-posn 10 10) (make-posn 10 20)) に適用すると、

(list (list (make-posn 10 10) (make-posn 10 20) 'black))

予想どおりですが、リストにさらに posns を追加すると、次のようになります。

(shared ((-4- (make-posn 10 20))) (list (list (make-posn 10 10) -4- 'black) (list -4- (make-posn 20 20) 'black)))

私は混乱していると思います。

期待どおりに描画できるため、明らかに必要なリストのように動作しますが、(shared ...) とは何か、関数がこのタイプの値を返す理由がわかりません。

私の唯一の手がかりは、シンボルのリストでは同じ動作が得られないため、リスト内の posns の存在に関連している必要があるということです。

これが関連する場合に備えて: 私は HTDP-advanced 教​​育言語を使用しています。

このタイプの出力が得られる理由を誰かが明確にすることはできますか?

4

1 に答える 1

1

言語設定で「値の共有を表示」設定が有効になっているため、プログラムの結果はこのように印刷されます。このように値を出力したくない場合は、設定のチェックを外すことができます。

共有プリンターは、複数回発生する結果の一部を省略しているだけです。共有の詳細については、racket/sharedのドキュメントを参照してください。

注: 今後の SO 投稿では、問題を簡単に再現できるように、実行しようとしているプログラム全体を提供していただけると助かります。また、使用している言語設定を示していただけると助かります。

于 2013-09-26T17:20:50.827 に答える