8

コンス、ファースト、レスト、エンプティのみの場合、リストの最後 (エンプティの前) に要素を追加するにはどうすればよいですか? および cond 再帰を使用できます

4

2 に答える 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自分で実装できる場合 (簡単です! 試してみてください)、準備完了です。

appendPS実際には、右折りを使用して実装できます。

(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上記は、firstrestempty?で実装できcond、他の手順は必要ありません。

于 2012-10-04T02:07:33.880 に答える