Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755

Как работает цикл do?

11.05.2020, 14:55. Показов 3832. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код отсюда http://lisper.ru/pcl/macros-st... constructs

Lisp
1
2
3
4
5
6
(do ((n 0 (1+ n))
     (cur 0 next)
     (next 1 (+ cur next)))
    ((= 10 n) cur))
 
==> 55
Каким образом получается результат 55, прошу расписать пошагово, что с чем складывается?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.05.2020, 14:55
Ответы с готовыми решениями:

Цикл: как работает цикл в цикле
Не могу понять как работает цикл в цикле например: repeat begin lalalala if что-то1<>100 then begin lalalala2 ...

Цикл работает неправильно, в то время как POST работает
Всем привет! Я хотел написать под php скрипт с авторизацией, брут, на своем сайте(подбор пароля). Написал код на загрузку словаря +...

Цикл while - как работает?
Здравствуйте! Помогите разобраться, почему при условии а меньше либо равно 3, при запуске программа печатает цифру 4? код во вложении.

57
Наивное Существо
 Аватар для vedunasv
666 / 141 / 27
Регистрация: 09.05.2020
Сообщений: 750
Записей в блоге: 15
14.05.2020, 20:35
Студворк — интернет-сервис помощи студентам
helter, возможно, и приду. Но если поверите в то, что всегда бывает что-то в первый раз ))))))
А что там ещё много-много интересного????
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
14.05.2020, 22:51
Ну вот, ляпнул, а теперь писать. Диалектов много, я про Common Lisp.

Лисп не только язык, но и человек программа. Когда вы пишете что-то на лиспе, вы общаетесь с программой - образом лиспа. Можно вычислить значение любого выражения. Определите функцию, отправляете её в образ, и она становится доступна. Переделали её, отправили в образ - и там доступна обновлённая функция. Можно писать программу по частям, и то, что уже написано, будет работать, и можно никогда не перезапускать. Программирование "на живую" - особые ощущения.

В лиспе собраны хорошие вещи из функционального программирования. Нет разделения на утверждения и выражения, есть только выражения, и они всегда возвращают значения и могут быть частями других выражений. Функции являются гражданами первого класса - их можно передавать аргументами в другие функции или возвращать в качестве значений. Поддерживаются замыкания - "упаковка" данных в функцию. Хорошо поддерживается тип данных "список", удобный для функционального программирования.

Но сам по себе язык нельзя назвать функциональным. Присваивание вместе с замыканиями может порождать интересные эффекты: например, функция без аргументов может служить неограниченным источником данных, и не нужны ни "итераторы", ни "генераторы". Кстати, оператор присваивания расширяемый, то есть нет ограничений на "левую часть" присваивания.

Продуманная, проверенная временем библиотека. Кроме списков поддерживается джентльменский набор типов данных, среди которых массивы (в том числе многомерные), ассоциативные массивы, потоки. К традиционным типам относятся конс-ячейки (из которых, в частности, состоят списки) и символы.

Развитая система исключений и рестартов. На участке программы, где может произойти ошибка, можно предусмотреть несколько способов её исправления, и если она произойдёт, можно отправиться к этому месту и выбрать способ исправления. А ещё с помощью этого механизма можно реализовать аналог питоновского yield.

Необычное и мощное ООП, основанное на генеричных функциях и множественной диспетчеризации.

Программа на лиспе обычно состоит из списков, и синтаксис её очень прост. Если привыкнуть к спискам, оказывается, что с их помощью можно не только программировать, а просто записывать, формализовывать что угодно. В лиспе такая запись может стать программой. То есть лисп позволяет программировать в терминах предметной области.

В частности, благодаря синтаксической абстракции - возможность добавлять собственные синтаксические конструкции. В других языках обычно бывает фиксированный набор "ключевых слов". В лиспе программист сам может определить "ключевые слова" с произвольным, нужным ему поведением.

Даже запись языка можно настраивать. Необязательно писать скобками. Процедуру чтения можно настроить так, что программа на питоне будет прочитана как программа на лиспе. (Хотя это, вероятно, непросто, потому что синтаксис питона сложный.)

При этом в лиспе всегда доступен весь язык. Нет никакого препроцессора - лисп сам себе препроцессор.

Вообще, язык с долгой традицией, история которого началась в пятидесятых. У него особый запах. Я думаю, запах - главное.

Добавлено через 19 минут
Common Lisp - абсолютно стабильный язык. В девяностых его стандартизировали, с тех пор стандарт не менялся и не ожидается. Так что можно расчитывать, что написанный сегодня код будет работать и через двадцать лет. Такая стабильность возможна благодаря расширяемости языка. Нет необходимости дожидаться следующей версии, чтобы получить новые фичи. Всё можно сделать библиотекой. Не нравятся стандартные операторы цикла - есть библиотека. Нужна интерполяция строк - есть библиотека. Захотелось сопоставления с образцом - есть библиотека.
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,766
Записей в блоге: 14
15.05.2020, 07:19
helter, да Вы - поэт!!!
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
15.05.2020, 12:36
В лиспе программист сам может определить "ключевые слова" с произвольным..." - напоминает Линукс с открытым исходником. Или это не так? а как совместимость именно по этим новым ключ.словам?Есть у них период стандартиза?
Обычно совместимость проявляется в том, что все определения живут в своих «пакетах», то есть как бы неймспейсах. В другом языке библиотека может содержать определения функций или, скажем, классов. В лиспе библиотека также может содержать управляющие конструкции и целые подъязыки, совместимые с лиспом. Или же библиотека может использовать их для внутренних целей и не экспортировать. В общем, ничем не отличается от определения функций: собственный синтаксис можно определять так же легко, как собственные функции.

Стандартизации, конечно, никакой нет. Стандартизация ― это, вообще, серьёзно, это юридический документ. Не так много языков имеют настоящие стандарты. Есть распространённые библиотеки, которые стали фактически стандартными. Например, если нужны регулярные выражения, вряд ли кто-то будет использовать что-либо помимо cl-ppcre. Но вообще, стандартизация ― ответственное дело, даже если она не юридическая. Если библиотека становится стандартной, ей трудно развиваться дальше. Она же как бы высечена в камне.

Линукс - ну, может, напоминает... А может, и не напоминает. Но, кстати, операционную систему точно напоминает. В «обычном языке» есть границы тому, что можно сделать в рантайме, и поэтому перезапуск программы ― это нормально. В лиспе ограничений рантайма нет: всё можно доопределять, переопределять, инспектировать. Поэтому зачем его перезапускать? Кроме того, в одном образе вполне могут сосуществовать разные системы. Например, если он используется как веб-сервер, то одновременно может обслуживать несколько несвязанных сайтов. Поэтому само собой появляется желание, чтобы один образ лиспа отвечал бы за всё. А это ― бессознательная ностальгия по лисп-машинам. Мало кто их видел, но в древности были компьютеры, построенные для лиспа, и там лисп был насквозь, сверху донизу, от драйверов до пользовательских приложений. Один образ лиспа с единообразной архитектурой и абсолютной интроспекцией. Какая-нибудь ссылка нужна, пусть будет эта: https://groups.google.com/forum/#!searchin/comp.lang.lisp/pitman$20zmacs%7Csort:date/comp.lang.lisp/Ama0ds7VXDg/K00pyGSq724J

Добавлено через 9 минут
Но вообще, всё на любителя, всё индивидуально. Чего в лиспе нет, того нет. Статическая типизация - нет. Ручное управление памятью - нет. Лень - нет. Даже на хвостовую рекурсию рассчитывать не приходится. Конечно, лисп даёт возможность реализовать какие угодно подъязыки в рамках самого лиспа, но писать язык - в любом случае непростое дело, не лучше ли взять другой, готовый? Короче говоря, главное - запах. Кому нравится, кому не нравится.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,766
Записей в блоге: 14
15.05.2020, 13:56
Цитата Сообщение от helter Посмотреть сообщение
Лень - нет.
- можно смоделировать.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
15.05.2020, 14:31
Цитата Сообщение от Catstail Посмотреть сообщение
- можно смоделировать.
Ага, причём несложно, так как замыкания и присваивания есть. Просто остальная часть языка неленивая, а некоторые люди предпочитают всё ленивое. Вопрос вкуса, я думаю.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,766
Записей в блоге: 14
15.05.2020, 14:35
helter, можно и по-другому. Читали в SICP "ленивые потоки"?
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
15.05.2020, 14:58  [ТС]
Цитата Сообщение от helter Посмотреть сообщение
Такая стабильность возможна благодаря расширяемости языка. Нет необходимости дожидаться следующей версии, чтобы получить новые фичи. Всё можно сделать библиотекой.
В Python есть плагин статической типизации. А в Лиспе наверное нету.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
15.05.2020, 15:13
В CL есть декларации типов. Их можно использовать и для скорости, и для дебага. Также компилятор может выводить типы, и SBCL, например, этим активно занимается. То есть CL без явных типов и Python без явных типов - две большие разницы. Но я не великий специалист по типам и никогда не думал, насколько CL в принципе совместим со строгой типизацией. Наверно, есть серьёзные препятствия - во-первых, вероятно, конс-ячейки. Неспроста в функциональных языках с типизацией (Haskell, ML) списки однородные, а ведь это совсем не то. Короче говоря, динамическая типизация - это фича.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
15.05.2020, 15:29  [ТС]
Перенес обсуждение этой особенности в другую тему В Лисп нету плагина статической типизации .
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.05.2020, 16:40

Не по теме:

Цитата Сообщение от helter Посмотреть сообщение
Давайте к нам, лисп учить.
Нафиг-нафиг, я лучше раст поучу. Как раз недавно документацию перевели: https://doc.rust-lang.ru/book/title-page.html



Цитата Сообщение от supmener Посмотреть сообщение
В Python есть плагин статической типизации.
Ха-ха, нет там такого. Есть numba с JIT-компилятором, врущим в клочья по скорости даже с++, есть интерпретатор cython, который скорее подмножество языка.

Но вот чтобы включил - и всё заработало, такого нет.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
15.05.2020, 16:43
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
я лучше раст поучу
Одно другому не мешает. Тем более, лисп и раст не конкурируют.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
15.05.2020, 18:21  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Ха-ха, нет там такого
Знаю, что есть и вроде как их несколько, есть из чего выбирать. В соответствующей теме про утиную... давал ссылки.

Добавлено через 1 час 24 минуты
Цитата Сообщение от vedunasv Посмотреть сообщение
возможно, и приду. Но если поверите в то, что всегда бывает что-то в первый раз ))))))
А что там ещё много-много интересного????
Много мучений в изучении и настройке. Лучше сначала подумайте, зачем Вам это может быть нужно. Сам пришел в Лисп, так как думал, что буду изучать на его основе функциональное программирование. А потом увидел, что ещё в экспертных системах может быть полезным. А вообще при выборе нового языка посмотрел бы в сторону Java и Javascript, как важных частей решений для веба и мобильных устройств.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
15.05.2020, 19:31
Цитата Сообщение от supmener Посмотреть сообщение
Много мучений в изучении и настройке
Они происходят из-за того, что вы пользуетесь Windows XP. Обычно новичку достаточно поставить Portacle, и тот просто работает из коробки. Конечно, Emacs - не самый обычный редактор, но на мышке, стрелочках и бекспейсе в нём можно далеко уехать.

Цитата Сообщение от supmener Посмотреть сообщение
Лучше сначала подумайте, зачем Вам это может быть нужно.
По нашей жизни лисп - одна из прекрасных бесполезных вещей. Не надо искать от него выгоды - ни денежной, никакой. Когда занимаешься чем-то раде "пользы", то чувствуешь, что вкладываешь во что-то своё время, то есть платишь временем за то, чтобы что-то приобрести. А занятие, соответственно, что-то "должно" принести в ответ. Если отдача не соответствует ожиданиям, наступает разочарование. Говорят - охота пуще неволи. Стоит заниматься лиспом, что называется, из любви к искусству. А нет желания - можно заняться чем-то другим.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
15.05.2020, 19:58  [ТС]

Не по теме:

Изучать язык нужно или специальный для работы по профессии или специфический для определенного хобби или из серии детских учебных или такой, который требуют в учебном заведении. Если не хватает денег, то такой, который даст возможность заработать. Затем, после изучения вышеперечисленного, можно выбрать язык для расширения кругозора. Мы не знаем, на каком уровне человек находится. Для Sicp Schema или Python при знании английского нужен. Кому то Pascal из ностальгии может хотеться изучать по старой интересной книге.



Добавлено через 16 минут
Кое-что неправильно написал в последовательности изучения языков. Может быть не надо было постить свою точку зрения.
0
Заблокирован
16.05.2020, 00:41
Рыжий Лис, я как раз сейчас Rust учу. Книга Бленди и Орендорфа "Программирование на Rust" неплоха. Опять-таки не для новечков в программировании. Тут лучше книг по Си ничего нету. Но кода там не так много. В смысле такого когда, где на написано от начала до конца проге показывается работа тех или иных механизмов языка. Шутка-ли, в книге чуть больше 500 страниц. В "Программирование на Clojure" их почти 900. Там больше кода и. Прочих мелочей.
Ну а на Lisp я бы, все-таки советовал обратить внимание:это, как минимум, поможет в понимании алгоритмов)
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.05.2020, 02:42
Сам по себе CL скрывает алгоритмы под капотом. Как сортирует sort? Как устроены хеш-таблицы? "Так эффективно, как руками не напишешь." Но книжки хорошие есть - Грэм, Норвиг.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
16.05.2020, 10:33  [ТС]
Здесь http://cybern.ru/lisp-cycles.html написано

Менее массивны, и не являются хорошим тоном использование следующих функций:
Бесконечный цикл:
Lisp
1
(loop do действие)
Прошу привести пример полного кода для запуска.
0
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
16.05.2020, 11:56
Цитата Сообщение от helter Посмотреть сообщение
У него особый запах.
helter, как вариант, аромат.
2
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
16.05.2020, 12:03
Цитата Сообщение от supmener Посмотреть сообщение
не являются хорошим тоном
Как же надоели эти методические теоретики.

Если нужно повторять набор действий без конца, do не нужен. Это называется simple loop - простой loop:
Lisp
1
2
3
(loop
  (foo)
  (bar))
Вернуться изнутри можно return-ом.

А бывает loop с ключевыми словами, это другое дело. Он позволяет итерировать с числовымы счётчиками, по стандартным коллекциям, может выступать аналогом while, поддерживает несколько способов аккумулирования результатов, поддерживает локальные переменные. Советую почитать "Loop для чёрных поясов" в пкл.

Цитата Сообщение от supmener Посмотреть сообщение
Прошу привести пример полного кода для запуска.
Это нехорошо, что в методичке нет примера. Но я теряюсь в догадках, что мешает свой написать. Вроде бы просто - открыл репл, написал строчку, посмотрел, что получилось. Вероятно, быстрее, чем задать вопрос на форуме. Давайте начнём издалека. Вы уже некоторое время читаете про лисп. Можете ли вы вывести на печать "hello world"?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.05.2020, 12:03

Как работает цикл?
Здравствуйте! Помогите разобраться. Есть генератор случайных чисел, который выдает 100 чисел от 0-20. Надо их отсортировать. ...

Как работает цикл for?
не могу понять как работает printf в цикле for. Почему цикл выводит результат с 0 ? И почему, если написать printf("%d /n", i*2)...

как работает цикл while
Вопрос может и глупый... Но хотелось бы узнать точно.. Вообщем, есть класс-оболочка, который блокирует и освобождает ресурс.. Блокирует...

Как работает цикл
Уважаемые, не могли бы вы пояснить работу следующего цикла: vector<int> path; for (int cur=t; cur!=-1; cur=p) path.push_back...

Как работает этот цикл?
нужно разделить строку на слова и записать эти слова в обратном порядке. наткнулся на похожий код в интернете, тут используется вот такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru