На страничке OEIS
A106487 есть программа на Lisp-подобном языке Scheme. С этим языком я не то что не знаком, даже и названия не слышал.
Я зашёл на сайт JDoodle (
https://www.jdoodle.com), там есть онлайн-компилятор Scheme и небольшая демонстрационная программка, показывающая, что компилятор работает. Вместо неё вставил программу из OEIS. Столкнулся с двумя вопросами:
1) Как выводить результаты? Вот так:
(display (A106487 12))вычисляет и выводит A106487(12). Примитивно, но Вы наверняка найдёте что-то более удобное.
2) Программа в исходном виде выдаёт ошибку:
*** ERROR: unbound variable: |1+|Я не знаю, что значит «неограниченная переменная», но понял, что надо сделать. В двух местах программы встречается сомнительная конструкция
(1+ i), я заменил её на
(+ 1 i).
В итоге программа вместе с тестовыми запросами (вычислить A106487 для
) приобрела такой вид:
(define (A106487 n) (cond ((zero? n) 1) (else (apply + (map A106487 (map shr (on-bit-indices n)))))))
(define (shr n) (if (odd? n) (/ (- n 1) 2) (/ n 2)))
(define (on-bit-indices n) (let loop ((n n) (i 0) (c (list))) (cond ((zero? n) (reverse! c)) ((odd? n) (loop (/ (- n 1) 2) (+ 1 i) (cons i c))) (else (loop (/ n 2) (+ 1 i) c)))))
(display (A106487 0)) (newline)
(display (A106487 1)) (newline)
(display (A106487 2)) (newline)
(display (A106487 3)) (newline)
(display (A106487 4)) (newline)
(display (A106487 5)) (newline)
(display (A106487 6)) (newline)
(display (A106487 7)) (newline)
(display (A106487 8)) (newline)
(display (A106487 9)) (newline)
(display (A106487 10)) (newline)
Все ответы правильные. Мне кажется, это ещё более удивительное совпадение.
Пожалуйста, прежде всего, проверьте, что для всех
до 101 программа выдаёт правильные результаты.