1

リストの n 番目の位置に要素を追加する方法がわかりません。例えば:

(insert-at new k lis)
(insert-at ’N 2 ’(a b c d e f))
=>
’(a b N c d e f)

大丈夫ですか?:

(define (insert-at new k lis)
  (cond (( null? lis)
         (list new))   
        (zero? k   
         (cons new lis))   
        (else       
         (cons (car lis)
               (insert-at new (- k 1) (cdr lis))))))
4

4 に答える 4

4

これは宿題のように見えるので、簡単な答えを出すことはできません。自分で解決策にたどり着いた方がはるかに便利です。空欄を埋める:

(define (insert-at new k lis)
  (cond (<???>       ; if the list is empty
         <???>)      ; return a list with the single element `new`
        (<???>       ; if `k` is zero
         <???>)      ; cons `new` with the list
        (else        ; otherwise
         (cons <???> ; cons the lists' current element and
               (insert-at new <???> <???>))))) ; advance the recursion

ここで、「再帰を進める」とは、リストの残りを渡し、kインデックスを 1 単位減らすことを意味することに注意してください。kインデックスが 0 になるか、リストの最後に到達すると、完了です。手順をテストすることを忘れないでください。

(insert-at 'N 2 '(a b c d e f))
=> '(a b N c d e f)

(insert-at 'N 0 '(a b c))
=> '(N a b c)

(insert-at 'N 3 '(a b c))
=> '(a b c N)
于 2013-03-11T19:54:01.797 に答える
2

2 つの関数がある場合:

  1. take-n - 最初の N 個の要素をリストとして返します。
  2. last-n - 最後の N 要素をリストとして返す

次に、次のように記述できます。

(define (insert-at value index list)
  (let ((len (length list)))
    (assert (<= 0 index len))
    (append (take-n index list)
            (list value)
            (last-n (- len index) list))))
于 2013-03-11T20:11:35.350 に答える
1

(DEFUN INS-ELEM (Nth item list)

(状態

((< Nth 1) (ERROR "Index too small ~A" Nth))

((= Nth 1) (CONSアイテムリスト))

((ENDP リスト) (エラー "インデックスが大きすぎます"))

(T (CONS (FIRST リスト) (INS-ELEM (1- Nth) item(REST リスト))))))

次に、(INS-ELEM 2 'A '(BCDEF)) を呼び出して、自分で結果を表示します。

幸運を!

于 2016-05-04T09:49:11.040 に答える