powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Суммир. по (прямоуг) таблице Пифагора Common Lisp
25 сообщений из 25, страница 1 из 1
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234445
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.
Задача: реализовать алгоритм подсчета произведений в приямоугольной таблице Пифагора,
с использованием одной рекурсивной функции.

Я смог сделать с помощью 2-х.
Может я не вижу какой-нибудь простой способ, как обойтись одной функцией?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
(defun calc-line (val n)
  (if (= n  0 )
       0 
      (+ (* val n) (calc-line val (- n  1 )))))


(defun test(x y)
   (if (or (= x  0 ) (= y  0 ))
         0 
        (if (> y x)
          (+ (test (- x  1 ) y) (calc-line x y))
          (+ (test x (- y  1 )) (calc-line y x)))))
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234610
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru,

Прочитай про labelsи вообще что - нибудь почитай уже ;), если тебе не в падлу логику оставлять, как у тебя есть сейчас :)
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234637
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дак я читаю и смотрю.
Просто только начал, ещё все в переди.
Когда все прочитаю, и вопросов подобных не будет.
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234645
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru,

Тады ладно :)

labels(один из способов создания замыканий) позволяет объявлять рекурсивные функции в локальном окружении, так что, не переделывая логику, можешь выйти из положения.
Но я бы советовал все переписать.
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234680
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

Про замыкания слыхал. Сейчас поищу применительно к лиспу.
Вопрос больше был даже не про CL, а вообще про алгоритмичность.
Можно ли сделать рекурсивную функцию для прямоугольной области ВООБЩЕ,
или есть какие-то принцип. ограничения?

На мехматах к сож. не обучался.
Подразумевается, то нельзя использовать глобальные переменные и передовать в параметрах, что-либо, кроме x y.
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234716
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru,

И я не обучался на мехматах :)
Вечером будет время - напишу свой вариант :)
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234757
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru пишет:

> Я смог сделать с помощью 2-х.
> Может я не вижу какой-нибудь простой способ, как обойтись одной функцией?

Да, FLET или LABEL.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234766
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_Lamer пишет:

> labels(один из способов создания замыканий) позволяет объявлять
> рекурсивные функции в локальном окружении, так что, не переделывая
> логику, можешь выйти из положения.

Да нифига подобного.
labels, flet позволяют объявлять локальные функции в других
функциях. Они не обязаны быть ни замыканиями, ни рекурсивно
вызываться. Это -- просто локальные функции.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36234768
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Не обязаны. Это одна из возможностей :)
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36235035
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А все таки при использовании flet локальная функция может быть рекурсивной?

Переписал вот так.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
(defun test2(x y)
 (flet ((c-line (val n)
          (if (= n  0 )
            0 
           (+ (* val n) (c-line val (- n  1 ))))
         ))

   (if (or (= x  0 ) (= y  0 ))
         0 
        (if (> y x)
          (+ (test2 (- x  1 ) y) (c-line x y))
          (+ (test2 x (- y  1 )) (c-line y x))))
 )
)

Ругается.
Код: plaintext
1.
2.
The function STUDY::C-LINE is undefined.
   [Condition of type UNDEFINED-FUNCTION]

У меня SBCL.

А вот так выполняется
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
(defun test3(x y)
 (flet ((c-line (val n)
          (if (= n  0 )
            0 
            1 
         )))

   (if (or (= x  0 ) (= y  0 ))
         0 
        (if (> y x)
          (+ (test3 (- x  1 ) y) (c-line x y))
          (+ (test3 x (- y  1 )) (c-line y x))))
 )
)

Это что ограничение, или нельзя влож. фу-ию использовать рекурсивно?
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36235056
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА все таки при использовании flet локальная функция может быть рекурсивной?

labels, знаю - может
а flet - по ходу - то - же, что и labels.
flet не использовал никогда.
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36235345
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru пишет:

> А все таки при использовании flet локальная функция может быть рекурсивной?
>

В лиспе любая функция может быть рекурсивной.

> Переписал вот так.
>
> (defun test2(x y)
> (flet ((c-line (val n)
> (if (= n *0*)
> *0*
> (+ (* val n) (c-line val (- n *1*))))
> ))
>
> (if (or (= x *0*) (= y *0*))
> *0*
> (if (> y x)
> (+ (test2 (- x *1*) y) (c-line x y))
> (+ (test2 x (- y *1*)) (c-line y x))))
> )
> )

Что-то фигня какая-то .
А LABELS если использовать вместо FLET ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36235350
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_Lamer пишет:
> А все таки при использовании flet локальная функция может быть рекурсивной?

> labels, знаю - может
> а flet - по ходу - то - же, что и labels.
> flet не использовал никогда.

FLET и LABELS для функций -- это как LET и LET* для переменных.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36237862
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура. Получилось.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
(defun test3(x y)
 (labels ((c-line (val n)
            (if (= n  0 )
              0 
             (+ (* n val) (c-line val (- n  1 ))))))
   (if (or (= x  0 ) (= y  0 ))
         0 
        (if (> y x)
          (+ (test3 x (- y  1 )) (c-line y x))
          (+ (test3 (- x  1 ) y) (c-line x y))))))
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36237889
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как в CL засечь время выполнения чего-нибудь.
Типа
(setf t1 xxxxxx)
(что-то делаем)
(setf dur (- xxxxxx t2))

?
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36237904
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru пишет:
> А как в CL засечь время выполнения чего-нибудь.
> Типа
> (setf t1 xxxxxx)
> (что-то делаем)
> (setf dur (- xxxxxx t2))

(time (myform))
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36237911
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CL-USER> (time (+  1   3 ))

Evaluation took:
   0 . 000  seconds of real time
   0 . 000000  seconds of total run time ( 0 . 000000  user,  0 . 000000  system)
   100 . 00 % CPU
   1 , 344  processor cycles
   0  bytes consed
  
 4 
CL-USER> 

Сорри, может вопрос глупый. Но как так кол-во процессорных циклов не целое число?
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36237926
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу попутный вопрос.
Сложений 2-х чисел занимает 1-2 проц. цикла.
А моя функция от параметров 5,5 15-25 циклов.
Разьве не должна быть хоть сколько-то линейная зависимость?
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36238029
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGruСразу попутный вопрос.
Сложений 2-х чисел занимает 1-2 проц. цикла.
А моя функция от параметров 5,5 15-25 циклов.
Разьве не должна быть хоть сколько-то линейная зависимость?

Может потому, что рекурсивно сделано, а в цикл не развернуло?
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36238098
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zloy den,

Что-то есть подозрение, что не особо изменится кол-во циклов (скорее всего вообще не изменится).

Можно подумать, если рекурсия дак, мы некоторые пары не умножаем, а получаем уже готовый результат.
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36238359
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru пишет:

> Сорри, может вопрос глупый. Но как так кол-во процессорных циклов не
> целое число?

А ты вообще представляешь, что такое кол-во процессорных циклов ?
Я, например, нет, хотя я инженер-системотехник, хрен знает сколько
лет стажа, знаю (точнее, конечно, знал) ассемблеры как минимум 3 архитектур ЭВМ,
и представляю себе, как теоретически работает процессор. Но что вот сейчас
под этим понимается, я не имею ни малейшего понятия.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36238756
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
AlexGru пишет:

> Сорри, может вопрос глупый. Но как так кол-во процессорных циклов не
> целое число?

А ты вообще представляешь, что такое кол-во процессорных циклов ?
Я, например, нет, хотя я инженер-системотехник, хрен знает сколько
лет стажа, знаю (точнее, конечно, знал) ассемблеры как минимум 3 архитектур ЭВМ,
и представляю себе, как теоретически работает процессор. Но что вот сейчас
под этим понимается, я не имею ни малейшего понятия.


А может есть связь между циклами и тактами.
Ну скажем, один цикл это n тактов.
Для решения задачи требуется m тактов.
Тогда
1-n
x-m

x=m/n вполне себе может дробное число получиться.
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36238926
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru,

Эмм...
автор
100.00% CPU
1,344 processor cycles


100.00 - это число с дробной частью = 0, разделитель междуцелой и дробной частью - точка
1,344 - это одна тысяча триста сорок четыре, запятая отделяет тысячи от сотен
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36238935
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexGru пишет:

> А может есть связь между циклами и тактами.

Я думаю, на эти цифры надо в относительном выражении только
смотреть. SBCL многоплатформенный, даже многопроцессорный,
там может быть это всё и не очень точно сделано.
Да и вообще ненужно это.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Суммир. по (прямоуг) таблице Пифагора Common Lisp
    #36238959
AlexGru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Суммир. по (прямоуг) таблице Пифагора Common Lisp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]