私が受けている模擬試験では、リストを取得し、順序を維持しながら古いリストの各要素を 2 つ含む新しいリストを作成する手順を作成するよう求める問題があります。彼らが提供する例:
(double-duplicate (list 1 2 3 4 4 5))
生産する
(1 1 2 2 3 3 4 4 4 4 5 5)
map と flatten を使用するソリューションを見つけることができました:
(define (flatten list)
(cond ((null? list) '())
((list? (car list)) (append (flatten (car list)) (flatten (cdr list))))
(else (cons (car list) (flatten (cdr list))))))
(define (double-duplicate ls)
(define (helper list1 list2)
(flatten (map list list1 list2)))
(helper ls ls))
それは機能しますが、3つのパラメーターを取るマップの形式を使用しているため、それが最も効果的なソリューションであるとは感じません。余分な括弧。誰でもこれを行うためのより良い方法を考えることができますか? 他にどのように書けばよいのか、少し迷っています。アイデアをいただければ幸いです。
*注: このすべてに MIT スキームを使用しています。