1

書きたいappend!

例:私が持っている場合

(define ml1 (mlist 1 2 3))
(define ml2 (mlist 4 5 6))
ml1
ml2

'#&(#&1 . #&(#&2 . #&(#&3 . #&())))
'#&(#&4 . #&(#&5 . #&(#&6 . #&())))

私はこれを行うことができるようにしたいと思います:

(append! ml1 ml2)
(mlist->list ml1)
;; produces '(1 2 3 4 5 6)
4

2 に答える 2

2

mappendのドキュメントを参照してください。

(require racket/mpair)
(mappend! ml1 ml2)
于 2012-07-12T08:47:52.223 に答える
0

基本的な戦略は、 を繰り返し呼び出して最初のリストの最後に到達し、 をmcdr使用set-mcdr!して最初のリストの最後のコンス セルを 2 番目のリストの先頭に設定することです。

たとえば、定義を使用すると、これは追加ml2するために機能するはずですml1

(set-mcdr! (mcdr (mcdr ml1)) ml2)
(mlist->list m1) ; => '(1 2 3 4 5 6)

あとは、これを任意のサイズの mlists の関数に変換し、空のリストが渡されることを考慮するだけです。

于 2012-07-13T15:25:42.893 に答える