0 / 0 / 0
Регистрация: 07.10.2021
Сообщений: 11
|
||||||
1 | ||||||
Вычислить (1+x/(2+x/(3+x(./(n+x).)07.10.2021, 21:41. Показов 1088. Ответов 17
Метки нет (Все метки)
Вычислить (1+x/(2+x/(3+x(.../(n+x)...)))
P.S. я новичок и до конца не могу понять специфику данного языка на данном этапе. Помогите.
0
|
Автор канал по Лиспу
24 / 22 / 2
Регистрация: 10.08.2021
Сообщений: 357
|
|
07.10.2021, 23:02 | 2 |
Moonissia, Вам нужно конкретно на Racket? Примут ли Common Lisp?
Давайте рассмотрим пример попроще. Что делает цикл? Он выполняет некое действие, и в зависимости от того, выполняется заданное условие или нет, либо снова производит это действие (причём часто бывает, что с небольшим отличием), либо прекращает. А чем можно представить это однообразное действие? Конечно функцией! Как нам реализовать повторение? Просто функция должна вызвать сама себя! А если нам нужно передать следующему вызову некоторый дополнительный параметр? Просто вызывайте не эту же самую функцию, а подобную с дополнительным(и) аргументом(и), специально написанную для многократного вызова. Она и будет вызывать сама себя. Присмотритесь к формуле! Что мы можем вычислить сразу, не выполняя ни одной итерации? Отметьте, из каких похожих частей состоит формула? Как нужно изменить некоторые параметры, чтобы получить следующую часть? Я дал вам некоторые подсказки, а вы посидите спокойно подумайте, ни на что не отвлекаясь, и попробуйте написать код. Будет непонятно, задавайте дополнительные вопросы. Обращаясь к остальным Лисперам: пожалуйста, дайте человеку решит задачу самому, прошу, не давайте ему готового решения, но направьте к нему. Благодарю.
0
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
08.10.2021, 10:15 | 4 |
сам он ее не решит
1
|
0 / 0 / 0
Регистрация: 07.10.2021
Сообщений: 11
|
|
08.10.2021, 10:49 [ТС] | 5 |
у меня серьезные проблемы с использованием циклов
хочу использовать while, но он не работает, for вообще непонятный по синтаксису, может есть и другой вариант в данном языке, который можно использовать, но от примеров гугла легче не стало.... Подскажите, пожалуйста, что в данном случае можно использовать для вызова функции n раз?
0
|
202 / 197 / 8
Регистрация: 09.06.2019
Сообщений: 230
|
||||||
08.10.2021, 11:16 | 6 | |||||
Moonissia, самый естественный путь это рекурсия.
Добавлено через 20 минут вот пример рекурсии
пустой список в параметрах функции завершает рекурсивный цикл, с результатом 0(называется базовый случай) параметр рекурсивного вызова-итерации (rest lst) определяет шаг рекурсивного цикла.
1
|
0 / 0 / 0
Регистрация: 07.10.2021
Сообщений: 11
|
||||||
09.10.2021, 15:16 [ТС] | 8 | |||||
Сдаюсь... Рекурсия не работает так, как задумано. И вообще выполняет действия как-то странно...
0
|
155 / 135 / 9
Регистрация: 21.10.2012
Сообщений: 413
|
|
09.10.2021, 15:42 | 9 |
Я вообще формулу не понял до конца.
К примеру x = 1 i = 3 Тогда формула разворачивается в (1+1/(2+1/(3+1))) Это так верно?
0
|
0 / 0 / 0
Регистрация: 07.10.2021
Сообщений: 11
|
|
09.10.2021, 15:48 [ТС] | 10 |
да, по идее оно должно работать именно так, но в итоге получается, что срабатывает алгоритм только раз (не совсем понятно почему). Но еще более удивительно то, что если значение i менять, то и результат меняется, хотя сама формула от него не зависит....
0
|
Автор канал по Лиспу
24 / 22 / 2
Регистрация: 10.08.2021
Сообщений: 357
|
||||||
09.10.2021, 17:08 | 11 | |||||
Сообщение было отмечено Moonissia как решение
Решение
Moonissia, Уже лучше! Только следите за отступами. А лучше поставьте себе EMACS или сам Racket, чтобы он расставлял отступы за вас. Без них читать код на Лиспе нормально не получится. Я бы кстати советовал вам поменять местами определения функций, да и со скобками там невесть что. Потому наверное и не работает. Исправил:
Добавлено через 1 час 2 минуты Moonissia, Начала ли работать программа? Не по теме: Для того, чтобы ответить конкретному пользователю, необходимо нажать на его ник, тогда ему придёт уведомление
1
|
Автор канал по Лиспу
24 / 22 / 2
Регистрация: 10.08.2021
Сообщений: 357
|
|
09.10.2021, 17:24 | 13 |
Catstail, Ну, думаю даже поверхностное ознакомление может принести пользу.
0
|
Модератор
|
|||||||||||
09.10.2021, 17:46 | 14 | ||||||||||
Regrin1, да, конечно...
Вот мое решение (CL):
3
|
621 / 941 / 150
Регистрация: 10.08.2015
Сообщений: 5,018
|
|
09.10.2021, 19:02 | 15 |
вот тут как раз бы лямбда и пригодилась, а не тошто там
0
|
202 / 197 / 8
Регистрация: 09.06.2019
Сообщений: 230
|
||||||
09.10.2021, 20:15 | 16 | |||||
я приведу свое решение на ракете, три функции, первая считает, вторая генерирует префиксную мат. формул, третья инфиксную, сгенерированную формулу второй функцией можно вновь подать на вход ракету, и получить уже числовой ответ.
2
|
Модератор
|
||||||
10.10.2021, 14:53 | 17 | |||||
Построение выражений:
2
|
155 / 135 / 9
Регистрация: 21.10.2012
Сообщений: 413
|
||||||
10.10.2021, 21:54 | 18 | |||||
Я раньше кодил на Си.
В rakcet на макросе можно использовать такой цикл
Если изучаете racket, имеет смысл поставить среду drRacket - отличная к документация в наличии. https://racket-lang.org
1
|
10.10.2021, 21:54 | |