0

( (1 (8 3)) ( 2(4 5 7)) ( 3 ( 6 7))) という形式の list1 があります。

また、形式 ( 2 3 ) の list2 があります。

最初の要素がlist2にあるlist1のすべてのペアの2番目の要素をすべて含むリストが必要です。

この場合、結果は ( 4 5 7 6 7) になります。

私はこのように考えていますが、私は完全に混乱しています!

  (define (returnlist l1 l2)
  (

   cond(( equal? (map car l1)) (car l2)) (  cdr(car l1)))
         (else  (returnlist  l1 (cdr l2)    )
   )


    ))
4

2 に答える 2

0

再帰的なバージョンは次のとおりです。

(define (returnlist l1 l2)
  (if (empty? l1)
      '()
      (let* ((c (car l1)) (c1 (car c)))
        (if (member c1 l2)
            (append (cadr c) (returnlist (cdr l1) l2))
            (returnlist (cdr l1) l2)))))

それから

(returnlist '((1 (8 3)) (2 (4 5 7)) (3 (6 7))) '(2 3))
=> '(4 5 7 6 7)
于 2013-11-13T20:47:30.053 に答える
0

このソリューションにはいくつかの手順があります。

  1. キーが属する要素をフィルタリングしますlist2(これに使用filterします)
  2. 各キーに対応するリストを取得する (map役に立つでしょう)
  3. 答えを含む単一のリストを作成します ( apply+appendはその日を節約します)

これが私が意味することです:

(define (returnlist l1 l2)
  (apply append                   ; step 3
         (map cadr                ; step 2
              (filter (lambda (e) ; step 1
                        (member (car e) l2))
                      l1))))

結果は期待どおりになります。

(define list1 '((1 (8 3)) (2(4 5 7)) (3 (6 7))))
(define list2 '(2 3))
(returnlist list1 list2)
=> '(4 5 7 6 7)
于 2013-11-13T20:40:23.223 に答える