Переписать строку без % и And - Lisp

Узнай цену своей работы

Формулировка задачи:

(if(and (zerop(% x 3))(zerop(% x 5))) ----- подозреваю что and надо заменить на cond, но % без понятия как

Решение задачи: «Переписать строку без % и And»

textual
Листинг программы
(defconstant *fizzbuzz*
  '("FizzBuzz" nil nil "Fizz" nil "Buzz" "Fizz"
    nil nil "Fizz" "Buzz" nil "Fizz" nil nil))
 
(defun foo ()
  (loop with tmp for i from 1 to 100 do
        (setf tmp (nth (mod i 15) *fizzbuzz*))
        collect (cond (tmp) (i))))
 
> (foo)
(1 2 "Fizz" 4 "Buzz" "Fizz" 7 8 "Fizz" "Buzz" 11 "Fizz" 13 14 "FizzBuzz" 16 17
 "Fizz" 19 "Buzz" "Fizz" 22 23 "Fizz" "Buzz" 26 "Fizz" 28 29 "FizzBuzz" 31 32
 "Fizz" 34 "Buzz" "Fizz" 37 38 "Fizz" "Buzz" 41 "Fizz" 43 44 "FizzBuzz" 46 47
 "Fizz" 49 "Buzz" "Fizz" 52 53 "Fizz" "Buzz" 56 "Fizz" 58 59 "FizzBuzz" 61 62
 "Fizz" 64 "Buzz" "Fizz" 67 68 "Fizz" "Buzz" 71 "Fizz" 73 74 "FizzBuzz" 76 77
 "Fizz" 79 "Buzz" "Fizz" 82 83 "Fizz" "Buzz" 86 "Fizz" 88 89 "FizzBuzz" 91 92
 "Fizz" 94 "Buzz" "Fizz" 97 98 "Fizz" "Buzz")

Объяснение кода листинга программы

В этом коде используется язык программирования Lisp. Он определяет константу fizzbuzz, которая является списком строк. Затем он определяет функцию foo, которая использует цикл loop для прохода по числам от 1 до 100. Для каждого числа, функция проверяет, делится ли оно на 15 без остатка (это делается с помощью функции mod). Если да, то она берет соответствующий элемент из списка fizzbuzz и сохраняет его в переменной tmp. Затем она добавляет число в результат, если tmp не равно nil. Результатом работы функции foo является список чисел, для которых выполняется условие.

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы