Автор | Сообщение |
Яков Замир Кацман
38 сообщений |
#7511 2015-02-28 01:32 GMT+3 часа(ов) |
Почему один фрагмент кода (верхний) прекрасно работает, а второй нет?
Помогите разобраться. Также не понимаю смысла в "лишних" скобках ((x 0 (+ x 0.1))) и ((> x 1)). (defun f_x () отредактировал(а) Яков Замир Кацман: 2015-03-01 02:07 GMT+3 часа(ов) |
|
Море литературы по Лисп-у и смежным технологиям.
|
|
Valko
29 сообщений |
#7514 2015-02-28 02:50 GMT+3 часа(ов) |
do это макрос, он может быть написан на основе loop, если вкратце.
читайте спецификацию. http://www.lispworks.com/documentation/lw60/CLHS/Body/m_do_do.htm |
|
Яков Замир Кацман
38 сообщений |
#7516 2015-02-28 14:37 GMT+3 часа(ов) |
Тогда еще один вопрос:
(defun recursion1 (a) Это рекурсия которой предлагается заменить циклы. Почему "le fin" выводится два раза. отредактировал(а) Яков Замир Кацман: 2015-03-01 02:06 GMT+3 часа(ов) |
|
Море литературы по Лисп-у и смежным технологиям.
|
|
Valko
29 сообщений |
#7517 2015-02-28 15:35 GMT+3 часа(ов) |
Потому что toplevel настроен так, чтобы печатать автоматически. А тут ещё и print вызван вручную. Убери print и будет один раз.
|
|
Яков Замир Кацман
38 сообщений |
#7520 2015-02-28 22:25 GMT+3 часа(ов) |
(defun recursion-main (&optional (x 0) (y 0)) (recursion-main 0.0 0.0) Теперь я не могу превратить это в макрос ![]() отредактировал(а) Яков Замир Кацман: 2015-03-01 02:10 GMT+3 часа(ов) |
|
Море литературы по Лисп-у и смежным технологиям.
|
|
Valko
29 сообщений |
#7521 2015-03-01 01:04 GMT+3 часа(ов) |
Зачем макрос. Пример входных и выходных данных, теги расставь. Какую среду используешь?
|
|
Яков Замир Кацман
38 сообщений |
#7522 2015-03-01 02:02 GMT+3 часа(ов) |
(recursion-main 0.0 0.0 (+ x y)) вот то, что я хочу передать >> (f_x ( + (* y y) (* x x) )) Но хочется сделать через рекурсию и без макросов. Среда LispWorks. выходные данные точки окружности. |
|
Море литературы по Лисп-у и смежным технологиям.
|
|
Valko
29 сообщений |
#7523 2015-03-01 12:09 GMT+3 часа(ов) |
Лучше задай этот вопрос здесь:
http://www.cyberforum.ru/lisp |
|
misha![]()
1275 сообщений |
#7524 2015-03-01 13:23 GMT+3 часа(ов) |
ЦитатаПотому что вы не разобрались с простейшим циклом - do. Как вариант: но лучше поменять условия в циклах. |
|
Яков Замир Кацман
38 сообщений |
#7525 2015-03-01 13:39 GMT+3 часа(ов) |
Да. Спасибо. Это действительно работает.
Немного смущает "r" которое здесь повторяется 6(!) раз. И nreverse, которое используется, как мне кажется, не по назначению. Подобный код с использованием С++ выглядит лучше? В том плане, что мне же нужно максимально простое решение. В любом случае: Спасибо. |
|
Море литературы по Лисп-у и смежным технологиям.
|
|
misha![]()
1275 сообщений |
#7526 2015-03-01 13:40 GMT+3 часа(ов) |
ЦитатаА зачем вам здесь рекурсия и тем более макрос? Используйте функцию, например, (f_x (lambda (x y) ( + (* y y) (* x x)))) |
|
Яков Замир Кацман
38 сообщений |
#7527 2015-03-01 13:43 GMT+3 часа(ов) |
Так ведь: либо Два вложенные друг в друга цикла. Либо рекурсия.
А какие еще варианты перебора декартова произведения? А макрос нужен потому что я хочу вставлять формулу "как она есть" |
|
Море литературы по Лисп-у и смежным технологиям.
|
|
misha![]()
1275 сообщений |
#7528 2015-03-01 13:47 GMT+3 часа(ов) |
ЦитатаЭто простейший цикл, поэтому его достаточно редко используют на практике, предпочитая более удобный loop. ЦитатаЭто самое простое решение, конечно, лучше изменить условия циклов. |
|
misha![]()
1275 сообщений |
#7529 2015-03-01 13:50 GMT+3 часа(ов) |
Лучше используйте циклы, т.к. CL не предусматривает оптимизацию хвостовых вызовов.
|
|
Яков Замир Кацман
38 сообщений |
#7530 2015-03-01 13:58 GMT+3 часа(ов) |
Понятно. Тут скорее всего речь будет идти о том, что бы это проводить расчет на С и вызывать через CFFI. Я как бы был к этому готов, просто меня
интересовали сами границы применимости лисп-а. Я получил ответ. Буду читать Черча, разберемся ![]() |
|
Море литературы по Лисп-у и смежным технологиям.
|
|
misha![]()
1275 сообщений |
#7531 2015-03-01 13:59 GMT+3 часа(ов) |
ЦитатаКстати, а меня вот смущают не связанные переменные: x и y? |
|
Яков Замир Кацман
38 сообщений |
#7532 2015-03-01 14:02 GMT+3 часа(ов) |
Да в этом вы правы. Это скорее aux, чем оptional
|
|
Море литературы по Лисп-у и смежным технологиям.
|
|
misha![]()
1275 сообщений |
#7533 2015-03-01 14:04 GMT+3 часа(ов) |
ЦитатаЯ уже не раз наступал на грабли CFFI, поэтому стараюсь все писать на лиспе. Тем более, что с числами лисп работает гораздо лучше Си. |
|
Яков Замир Кацман
38 сообщений |
#7536 2015-03-07 16:56 GMT+3 часа(ов) |
Работающий вариант:
(do ((x 0 (+ x 0.1))) BNF: (do ({var | (var [init-form [step-form]])}*) (end-test-form result-form*) declaration* {tag | statement}*) ну или такой вариант:
Тему можно закрывать. отредактировал(а) Яков Замир Кацман: 2015-03-07 17:20 GMT+3 часа(ов) |
|
Море литературы по Лисп-у и смежным технологиям.
|