Используйте цикл WHILE, чтобы ... подождите, дерьмо.
Хорошо, используйте цикл FOR, чтобы ... э-э ...
Честно говоря, у меня был бы помощникфункция, которая сравнивает длины каждого списка, а затем добавляет звездочки в конец более короткого, пока он не станет того же размера.
Итак, псевдокод, потому что я не могу вспомнить все особенности схемы:
(define helperFunction(list1, list2)
first = list-length(list1)
second = list-length(list2)
if(first > second)
asteriskPopulate(list2, first-second)
else if(second > first)
asteriskPopulate(list1, second-first)
)
Редактировать для дополнительной ясности:
(define list-length
(lambda (l)
(cond
((null? l) 0)
(#t (+ 1 (list-length (cdr l)))))))
Редактировать для объяснения (Извините!):
Функция helperFunction принимает два списка возможных неодинаковых длин и наборовдве переменные firstLength и secondLength для представления длин двух списков.Это достигается с помощью кода длины списка (взято с благодарностью из Схема обучения ).Этот код работает через встроенную рекурсию, рекурсивно отбрасывая элементы CDR и добавляя их к конечному результату.
Когда у нас есть две длины, которые мы можем сравнить, вызывается отдельная функция asteriskPopulate с более коротким из двух списков и разницей в длинах.Внутри этой функции мы просто добавим серию звездочек, пока наша разностная переменная (первая минус вторая или вторая минус первая) не станет равной 0. Я оставляю вам право написать эту функцию, она должна быть быстрой и информативной.
Инаконец, когда у нас есть списки равной длины, вы можете использовать MAP соответствующим образом.