3

私は現在、練習の途中で質問を解決しようとしています。この質問では、2つのリスト(list1とlist2と呼びます)を追加する式を作成するように求められます。list2はlist1の最後に追加する必要があります。関数appendは、このどの時点でも使用できません。私が使用できるのは、 consfilteraccumulatemap、list-ref、およびinumerate-intervalです。私は、次のようなさまざまな形で解決策を見つけようとしました。

(cons list1 list2)

(filter list? (map list (cons list1 list2)))

(list list1 list2)

(map list (list list1 list2)) 

私は無駄な解決策を見つけるために2日間を費やしました。誰かが私を正しい方向に導くことができれば、あるいは何らかの形で私に援助を提供することができれば、私は感謝するでしょう。

また、私はこのサイトを初めて利用するため、コードのフォーマットや質問のマニエリスムについて誤って従っているプロトコルがある場合は、お詫び申し上げます。ありがとうございました。

4

1 に答える 1

2

これは宿題なので、正直に答えることはできません。代わりに、私はあなたにいくつかのヒントを与えます、あなたはあなた自身の質問ファイリングへの答えを見つけることができます-空白で。これは、実装するための標準的な方法appendです。

(define (my-append l1 l2)
  (cond (<???>                          ; if the first list is null
         <???>)                         ; then return the second list
        (<???>                          ; if the second list is null
         <???>)                         ; then return the first list
        (else                           ; otherwise `cons`
         (cons <???>                    ; the first element of the first list
               (my-append <???> l2))))) ; process the rest of the first list

上記のソリューションでは、、、、およびcondを使用します。これらのいずれも使用できず、質問の手順に制限されている場合は、代わりにこれを試してください(右への折り畳みとして定義されていると仮定します)。null?conscarcdraccumulate

(define (my-append l1 l2)
  (accumulate
   <???>   ; what should be used for sticking list elements together?
   <???>   ; what should we return if the list being traversed is empty?
   <???>)) ; this is the list that we want to traverse 

上記のソリューションでは、質問で要求されているように、accumulateとのみを使用します。consアイデアは次のとおりです。リストが使い果たされるまで、要素ごとに最初のリストをトラバースします。その時点で、次の要素が2番目のリストになります。

于 2012-11-18T03:44:24.523 に答える