|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
10.01.2008, 09:33 | #1 | |
Как изменить n! лисп?
всё что связано с упорядоченным движением заряженных частиц
М.О.
Регистрация: 27.07.2007
Сообщений: 1,693
|
||
Просмотров: 4560
|
|
||||
всё что связано с упорядоченным движением заряженных частиц Регистрация: 27.07.2007
М.О.
Сообщений: 1,693
|
Всё= не пойму как этим пользоваться, ставлю то что ты посоветовал в начало кода вместо ;;; (setq n 10); Задайте n затем копипастю это в консоль, но ничего не выходит, ох уж этот лисп
|
|||
|
||||
Проектировщик свиноводство Регистрация: 21.08.2003
Сообщений: 2,260
|
|
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
Символ ";" (точка с запятой) обозначает начало комментария. В любой книге по ЛИСПу это должно быть расписано в самом начале.
Код не работает потому, что задание n (setq n 10) закомментировано и не выполняется. Если в данной книге уже такой простой код написан с ошибкой - ищите другой учебник. Ввод числа n с клавиатуры можно сделать и так: (initget 7) (setq n (getint "\n Задайте n : ")) Заодно почитайте внимательно о функциях initget, getint, getreal и далее. --------------- Еще добавлю. Точно не проверял, но далее в коде кажется ошибка, выполняется "(while (< i n)..." При задании n=10 будет считаться только 9!. Нужно "(while (<= i n)..." Последний раз редактировалось Олег К., 10.01.2008 в 09:58. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
У тебя в последней строке лишняя закрывающая скобка, либо убери ее, либо добавь в начало (defun <имя функции ()>, а после "копипаста" в консоль, введи имя своей функции в скобках.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 10.01.2008 в 10:30. Причина: Подправил код слеганца |
|||
|
||||
всё что связано с упорядоченным движением заряженных частиц Регистрация: 27.07.2007
М.О.
Сообщений: 1,693
|
Всем спасибо, крыс, сейчас буду анализировать твой код. На счёт книжки скажу что у меня хорошая книжка, то что ; это комментарии там тоже написано, не понятно только зачем ;;; это что значит, что всё что идёт дальше это каменты чтоли?
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Дима_, так там же все просто - рекурсия на вычисление факториала самое сложное (ИМХО, конечно).
Jоhnny, то, что идет после ";;;", тоже является однострочным комментарием. Просто количество ";" (1, 2 или 3 штуки) перед текстом при автоматическом форматировании могут по-разному сдвинуть комментарий.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Согласен, но к такому стилю написания (не только в лиспе), уж лет 10 привыкнуть не могу - голова по другому видимо думает - ассемблером испорчена.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
Ну вот, а в начале всего-то 5 строк было. Если еще и комментарии добавить ...
Алексей, поясните пожалуйста, почему в данном примере применено vl-catch-all-apply? Ведь и без этой конструкции getint выдаст либо число, либо nil, проверка правильно сработает. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
vl-catch-all-apply для отлова нажатия на Esc в момент запроса числа. Если этого не сделать, команда будет прервана в аварийном режиме.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
А-а, вот про Esc я и забыл.
Хотя в данном примере аварийный выход вроде не вызовет непоправимых последствий. Вот какая мысль еще появилась. Оправдано ли включение в подобный код (небольшой и по размеру и по выполняемой функции) сделанный отдельной программой, проверок на все возможные ошибки? Ведь ничего никуда не передается, не строится по расчитанным значениям, всего-то операции с числами. Не все ли равно, будет появляться надпись *error* или нет? Разве что с эстетической точки зрения. Кстати, услышать бы мнение ShaggyDocа, если он здесь появится. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Факториал "сам по себе" - не более чем учебная задача. А вот если оно участвует в каком-то другом куске? Там без отлова не обойтись (правда, и логика там будет немного иная). В общем-то отлов - на любителя в данной конкретной ситуации, тут ты прав на 100%. Можно сказать, что привычка у меня уже в этом отношении
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787
|
Если в учебных, то (ИМХО) достаточно будет функции
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Чтобы заработал код из первого поста, достаточно раскомментарить первую строку, но код приведённый Алексеем элегантнее.
|
|||
|
||||
Инженер-теплотехник Регистрация: 17.08.2006
Смоленск
Сообщений: 307
|
>> Jоhnny
Как это не работает? Все работает. Только при работе из командной строки нельзя оставлять символы вне скобок "( )". Все что не в скобках рассматривается как команды, в том числе пробелы и энтеры. Вот такой код уж точно работает: Код:
Код:
И еще. После загрузки кода из №18 нужно набрать: (loc:! 10) |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как изменить размер текста во всех блоках с одинаковым имене | red | AutoCAD | 78 | 28.03.2022 08:07 |
Как изменить толщину по умолчанию полилиний | Гиорги | AutoCAD | 7 | 18.01.2017 08:56 |
на злобу дня !! | zaza-noza | Разное | 63 | 22.05.2009 15:10 |
Как изменить своиства блока-интересная штука... | Marie | AutoCAD | 6 | 24.03.2005 23:47 |
Как изменить имя штриховки по умолчанию | виталич | AutoCAD | 5 | 27.02.2004 14:20 |