コンス、ファースト、レスト、エンプティのみの場合、リストの最後 (エンプティの前) に要素を追加するにはどうすればよいですか? および cond 再帰を使用できます
34581 次
2 に答える
6
どのように実装するかを考えてくださいappend
(または、より一般的には、右折りをどのように実装するかを考えてください)。ここで、追加する要素を含むシングルトン リストにリストを追加すると、基本的に要素を追加したことになります。
(明らかに、これは O(n) であるため、この方法で要素を個別に追加しないでください。)
右折りを使用したソリューションは次のとおりです。
(define (append-element lst elem)
(foldr cons (list elem) lst))
およびを使用したソリューションappend
:
(define (append-element lst elem)
(append lst (list elem)))
したがって、リストした操作を使用して、foldr
またはappend
自分で実装できる場合 (簡単です! 試してみてください)、準備完了です。
append
PS実際には、右折りを使用して実装できます。
(define (append lst1 lst2)
(foldr cons lst2 lst1))
しかし、それでもfoldr
自分で実装する必要があります。;-) (ヒント: 簡単です。アイデアを開始するための左折の実装を見てください。)
于 2012-10-04T01:35:36.967 に答える
3
これは宿題のように思えるので、正しい軌道に乗るためのヒントをいくつか示します。空欄を埋めてください。
(define (add-last lst ele)
(cond ((empty? lst) ; if the list is empty
<???>) ; create a one-element list with `ele`
(else ; if the list is non-empty
(cons <???> ; cons the first element in the list
<???>)))) ; with the result of advancing the recursion
cons
上記は、first
、rest
、empty?
で実装できcond
、他の手順は必要ありません。
于 2012-10-04T02:07:33.880 に答える