|
|
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
День добрый. Задача: реализовать алгоритм подсчета произведений в приямоугольной таблице Пифагора, с использованием одной рекурсивной функции. Я смог сделать с помощью 2-х. Может я не вижу какой-нибудь простой способ, как обойтись одной функцией? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 10:48:18 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru, Прочитай про labelsи вообще что - нибудь почитай уже ;), если тебе не в падлу логику оставлять, как у тебя есть сейчас :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 11:46:18 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
Дак я читаю и смотрю. Просто только начал, ещё все в переди. Когда все прочитаю, и вопросов подобных не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 11:54:37 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru, Тады ладно :) labels(один из способов создания замыканий) позволяет объявлять рекурсивные функции в локальном окружении, так что, не переделывая логику, можешь выйти из положения. Но я бы советовал все переписать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 11:58:16 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
Спасибо. Про замыкания слыхал. Сейчас поищу применительно к лиспу. Вопрос больше был даже не про CL, а вообще про алгоритмичность. Можно ли сделать рекурсивную функцию для прямоугольной области ВООБЩЕ, или есть какие-то принцип. ограничения? На мехматах к сож. не обучался. Подразумевается, то нельзя использовать глобальные переменные и передовать в параметрах, что-либо, кроме x y. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 12:09:05 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru, И я не обучался на мехматах :) Вечером будет время - напишу свой вариант :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 12:20:08 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru пишет: > Я смог сделать с помощью 2-х. > Может я не вижу какой-нибудь простой способ, как обойтись одной функцией? Да, FLET или LABEL. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 12:35:48 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
SQL_Lamer пишет: > labels(один из способов создания замыканий) позволяет объявлять > рекурсивные функции в локальном окружении, так что, не переделывая > логику, можешь выйти из положения. Да нифига подобного. labels, flet позволяют объявлять локальные функции в других функциях. Они не обязаны быть ни замыканиями, ни рекурсивно вызываться. Это -- просто локальные функции. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 12:37:38 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Не обязаны. Это одна из возможностей :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 12:39:07 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
А все таки при использовании flet локальная функция может быть рекурсивной? Переписал вот так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Ругается. Код: plaintext 1. 2. У меня SBCL. А вот так выполняется Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Это что ограничение, или нельзя влож. фу-ию использовать рекурсивно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 14:02:22 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
авторА все таки при использовании flet локальная функция может быть рекурсивной? labels, знаю - может а flet - по ходу - то - же, что и labels. flet не использовал никогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 14:10:39 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 15:29:59 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
SQL_Lamer пишет: > А все таки при использовании flet локальная функция может быть рекурсивной? > labels, знаю - может > а flet - по ходу - то - же, что и labels. > flet не использовал никогда. FLET и LABELS для функций -- это как LET и LET* для переменных. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2009, 15:30:52 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
Ура. Получилось. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 16:06:20 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
А как в CL засечь время выполнения чего-нибудь. Типа (setf t1 xxxxxx) (что-то делаем) (setf dur (- xxxxxx t2)) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 16:11:47 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru пишет: > А как в CL засечь время выполнения чего-нибудь. > Типа > (setf t1 xxxxxx) > (что-то делаем) > (setf dur (- xxxxxx t2)) (time (myform)) Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 16:13:50 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
Спасибо. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Сорри, может вопрос глупый. Но как так кол-во процессорных циклов не целое число? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 16:15:42 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
Сразу попутный вопрос. Сложений 2-х чисел занимает 1-2 проц. цикла. А моя функция от параметров 5,5 15-25 циклов. Разьве не должна быть хоть сколько-то линейная зависимость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 16:19:07 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGruСразу попутный вопрос. Сложений 2-х чисел занимает 1-2 проц. цикла. А моя функция от параметров 5,5 15-25 циклов. Разьве не должна быть хоть сколько-то линейная зависимость? Может потому, что рекурсивно сделано, а в цикл не развернуло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 16:58:02 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
zloy den, Что-то есть подозрение, что не особо изменится кол-во циклов (скорее всего вообще не изменится). Можно подумать, если рекурсия дак, мы некоторые пары не умножаем, а получаем уже готовый результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 17:16:33 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru пишет: > Сорри, может вопрос глупый. Но как так кол-во процессорных циклов не > целое число? А ты вообще представляешь, что такое кол-во процессорных циклов ? Я, например, нет, хотя я инженер-системотехник, хрен знает сколько лет стажа, знаю (точнее, конечно, знал) ассемблеры как минимум 3 архитектур ЭВМ, и представляю себе, как теоретически работает процессор. Но что вот сейчас под этим понимается, я не имею ни малейшего понятия. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2009, 19:13:57 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
MasterZiv AlexGru пишет: > Сорри, может вопрос глупый. Но как так кол-во процессорных циклов не > целое число? А ты вообще представляешь, что такое кол-во процессорных циклов ? Я, например, нет, хотя я инженер-системотехник, хрен знает сколько лет стажа, знаю (точнее, конечно, знал) ассемблеры как минимум 3 архитектур ЭВМ, и представляю себе, как теоретически работает процессор. Но что вот сейчас под этим понимается, я не имею ни малейшего понятия. А может есть связь между циклами и тактами. Ну скажем, один цикл это n тактов. Для решения задачи требуется m тактов. Тогда 1-n x-m x=m/n вполне себе может дробное число получиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 06:33:08 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru, Эмм... автор 100.00% CPU 1,344 processor cycles 100.00 - это число с дробной частью = 0, разделитель междуцелой и дробной частью - точка 1,344 - это одна тысяча триста сорок четыре, запятая отделяет тысячи от сотен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 09:29:10 |
|
||
|
Суммир. по (прямоуг) таблице Пифагора Common Lisp
|
|||
|---|---|---|---|
|
#18+
AlexGru пишет: > А может есть связь между циклами и тактами. Я думаю, на эти цифры надо в относительном выражении только смотреть. SBCL многоплатформенный, даже многопроцессорный, там может быть это всё и не очень точно сделано. Да и вообще ненужно это. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2009, 09:34:35 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36234645&tid=1344206]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
211ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 549ms |

| 0 / 0 |
