• ベストアンサー

schemeのプログラムについて

schemeで同じ長さの2つのリストの要素を交互に並べる関数はどのように書くのでしょうか? 例えば、関数名をabcとして、 (abc '(1 3 5 7 9) '(2 4 6 8 10)) と入力すると (1 2 3 4 5 6 7 8 9 10) のように表示されます

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

例えばこんな感じですか? (define (abc ls0 ls1)  (let loop ((ls0 ls0) (ls1 ls1) (acc '()))   (if (= (length ls0) (length ls1))     (if (null? ls0)       (reverse acc)       (let ((a (car ls0)) (b (car ls1)))        (loop (cdr ls0) (cdr ls1)           (if (> a b)             (cons a (cons b acc))             (cons b (cons a acc))))))     (error "リストの長さが違います: " ls0 ls1)))) ;; 実行例 > (abc '(1 3 5 7 9) '(2 4 6 8 10)) '(1 2 3 4 5 6 7 8 9 10) > (abc '(1 3 5) '(2 4)) . . リストの長さが違います: (1 3 5) (2 4) >

cdwkndw
質問者

お礼

ありがとうございます!

関連するQ&A

専門家に質問してみよう