1

SCHEME を使用して、'(2 1 3) & '(abc) などの 2 つの引数を取り、リスト '(bac) を与えるコードを作成しようとしています。コードが再帰的または反復的に機能していません。どんな助けでも!!

(define project 
(lambda (list1 list2 list3 n b index)
(define n (length(list1)))
   (let ((i n))
     (for-each (i)
        (cond 
            ((null? list1) (display "empty"))
            (else
                (define n (car list1))
                (define index (- n 1)) 
                (define b (list-ref list2 index)) 
                (define list3 (cons list3 b)) 
                (define list1 (cdr list1)) 
                list3 ))))))
4

4 に答える 4

1
(define (rearrange order l)
  (cond ((number? order) (rearrange (list order) l))
        ((list?   order) (map (lambda (num) (list-ref l (- num 1))) order))
        (else 'bad-order)))

順序を「複雑」にする必要がある場合 ( のように'(1 (2 3) 4))、これを使用します。

(define (listify thing)
  (cond ((null? thing) '())
        ((pair? thing) (apply append (map listify thing)))
        (else (list thing))))

> (listify 10)
(10)
> (listify '(1 (2 3) 4))
(1 2 3 4)
> 

その後

(define (rearrange order l)
  (map (lambda (num) (list-ref l (- num 1)))
       (listify order)))
于 2013-06-26T14:11:28.797 に答える
0

最初に頭に浮かんだのは:

(define (rearrange order symbols)
  (define (element i list)
    (if (= i 1) 
      (car list)
      (element (- i 1) (cdr list))))
  (define (iter order output)
    (if (null? order) 
      output
      (iter (cdr order) 
            (append output (list (element (car order) symbols))))))
  (iter order '()))

より良い解決策:

(define (rearrange order symbols)
  (define (nth-element i list)
    (if (= i 1)
      (car list)
      (nth-element (- i 1) (cdr list))))
  (map (lambda (x) (nth-element x symbols)) order))
于 2013-06-26T12:33:41.350 に答える