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

Условный выход из функции: PROG RETURN

07.05.2020, 20:40. Показов 3583. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пока не понимаю, что делает prog? Знаю про prog1, prog2, progn.

Здесь http://www.mari-el.ru/mmlab/ho... index.html написано
Если локальных переменных нет записывается (prog ()...)
это не понимаю.

В коде написано (prog (x y); локальные переменные
Пока насчет локальных переменных с помощью prog не понял. Читал про let.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2020, 20:40
Ответы с готовыми решениями:

Выход из рекурсивного метода не осуществляется по Return
Почему-то после return опять рекурсию повторяет, мб я неправильно её написал ? private string FileIndexCreate() { ...

Выход из блока using через return. Произойдет ли Dispose()?
Такой код: static class StringExtension { public static string GZipCompress(this string s) { var...

Запишите с использованием предложения PROG функцию (аналог встроенной функции LENGTH )
Запишите с помощью предложения PROG функцию (аналог встроенной функции LENGTH ), которая возвращает в качестве значения длину списка...

63
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
28.05.2020, 19:05  [ТС]
Студворк — интернет-сервис помощи студентам
Благодарю, подправил, все равно не работает.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun xi (x)
  (prog (e r)
    (setf e 3)
    (setf r 10)
    (return
      (cond ((and (> x e) (< x r)) 'yes)
            ((and (> x r) (< x e)) 'no))))) 
 
==> XI
(xi 2)
 
==> NIL
Добавлено через 38 секунд
Цитата Сообщение от helter Посмотреть сообщение
А в чём вы видите преимущество возвращать yes и no вместо "истина" и "ложь"
Не задумывался.

Добавлено через 32 секунды
Если код использовать в диалоге с пользователем, то так понятнее.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
28.05.2020, 19:26
Надо отделять вычисления от диалогов с пользователем.

Символы для диалогов с пользователем - в любом случае костыли.

Всякая функция может быть частью выражения. Для логических выражений уже есть поддержка в языке: их можно использовать в условиях, для них существуют булевы операции. Если бы у вас была функция xip, возвращающая логическое значение, вы могли бы написать (if (xip x) ...) или (if (or (xip x) (psip x)) ...). А сейчас вам придётся писать (if (eql (xi x) 'yes) ...) и (if (or (eql (xi x) 'yes) ...)). Но, может быть, я упускаю какие-то преимущества вашего подхода, для вас очевидные.

Вообще, вы понагородили огорода вместо
Lisp
1
2
(defun xip (x)
  (< 3 x 10))
2
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
30.05.2020, 05:20  [ТС]
Не понимаю, в чём смысл этой строки, что с чем сравнивается и что должно быть вместо точек.
Lisp
1
(if (eql (xi x) 'yes) ...)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
30.05.2020, 07:02
Результат вызова функции xi c аргументом x сравнивается с атомом yes. Вместо точек - то, что нужно выполнить при сравнении и при несравнении. Все как обычно.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
30.05.2020, 07:07  [ТС]
Результат вызова функции xi c аргументом x
Это число сравнивается со словом или что-то другое?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
30.05.2020, 08:32
Все зависит от того, что делает функция xi. Если xi - не функция, то будет ошибка. Если функция возвращает число, то число и будет сравниваться
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
30.05.2020, 12:50
xi - это ваша собственная функция xi. Она возвращает непонятно что. Поэтому прежде чем каким-то образом использовать её результат, надо его "расшифровать".
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
30.05.2020, 13:28  [ТС]
А нельзя ли те же самые строки, которые я привел в примере, написать не с cond, а с чем то другим, например с if, чтобы заработало?
0
30.05.2020, 13:35

Не по теме:

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

0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
30.05.2020, 17:51  [ТС]
Так не работает, сейчас попробую с cond, так как увидел ошибку.

Lisp
1
2
3
4
5
6
7
(defun xi (x)
  (prog (e r)
    (setf e 3)
    (setf r 10)
    (return
      (when (and (> x e) (< x r)) "yes")
      (when (or (> x r) (< x e)) "No"))))
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 (load "c:/ox.lisp")
 
; file: c:/ox.lisp
; in: DEFUN XI
;     (RETURN (WHEN (AND (> X E) (< X R)) "yes") (WHEN (OR (> X R) (< X E)) "No"
))
;
; caught ERROR:
;   during macroexpansion of (RETURN (WHEN # "yes") (WHEN # "No")). Use
;   *BREAK-ON-SIGNALS* to intercept.
;
;    error while parsing arguments to DEFMACRO RETURN:
;      too many elements in
;        ((WHEN (AND (> X E) (< X R)) "yes") (WHEN (OR (> X R) (< X E)) "No"))
;      to satisfy lambda list
;        (&OPTIONAL (SB-IMPL::VALUE)):
;      between 0 and 1 expected, but got 2
 
;     (DEFUN XI (X)
;       (PROG (E R)
;         (SETF E 3)
;         (SETF R 10)
;         (RETURN (WHEN (AND # #) "yes") (WHEN (OR # #) "No"))))
;
; caught STYLE-WARNING:
;   The variable X is defined but never used.
;
; compilation unit finished
;   caught 1 ERROR condition
;   caught 1 STYLE-WARNING condition
T
Добавлено через 5 минут
Такой исправленный вариант заработал. Заменил во втором варианте сравнения and на no и добавил =.

Lisp
1
2
3
4
5
6
7
(defun xi (x)
  (prog (e r)
    (setf e 3)
    (setf r 10)
    (return
      (cond ((and (> x e) (< x r)) 'yes)
            ((or (>= x r) (<= x e)) 'no)))))
Lisp
1
2
3
4
5
6
7
8
9
(load "c:/ox.lisp")
T
* (xi 4)
YES
* (xi 1)
NO
* (xi 15)
NO
*
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
30.05.2020, 18:33
Зачем проверять второе условие, если оно автоматически выполнено, если первое не выполнено?
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
30.05.2020, 20:24  [ТС]
Да, благодарю. Так тоже работает.
Lisp
1
2
3
4
5
6
(defun xi (x)
  (prog (e r)
    (setf e 3)
    (setf r 10)
    (return
      (if (and (> x e) (< x r)) "yes" "No"))))
Добавлено через 33 минуты
А можно ли сделать на основе какого то моего примера вариант с Go, что-бы когда вводится 7, то чтобы писало: "Vi vveli 7"? Если можно, то прошу написать полный код примера.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
30.05.2020, 23:48
Цитата Сообщение от supmener Посмотреть сообщение
вариант с Go
Я, наверно, недопонял. Вариант с чем?
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
31.05.2020, 07:02  [ТС]
с goto или go возможно правильно называется.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
31.05.2020, 14:46
Цитата Сообщение от supmener Посмотреть сообщение
Если можно, то прошу написать полный код примера.
- сформулируйте, что должна делать функция
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
31.05.2020, 15:10
То есть ваш поразительный план состоит в использовании лиспа для освоения техник программирования на бейсике восьмидесятых? Умываю руки.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
31.05.2020, 15:45  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
сформулируйте, что должна делать функция
вариант с Go (goto), что-бы когда вводится 7 (xi 7), то чтобы писало: "Vi vveli 7". В одном месте чтобы было, например go L и это чтобы перебрасывало к строке
Lisp
1
(print "Vi vveli 7")
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
31.05.2020, 16:29
supmener, извините, но желательно сформулировать задание "с нуля" и полностью. В духе: "Функция принимает два аргумента. Если первый ... то ... " и т.п.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
31.05.2020, 18:23  [ТС]
Что то вроде этого должно быть (только чтобы работало).
Lisp
1
2
3
4
5
6
7
8
9
10
(defun xi (x)
  (prog (e r)
    (setf e 3)
    (setf r 10)
    (return
      (cond 
          (if (= x 7) (go L))
          ((and (> x e) (< x r)) 'yes)
          ((or (>= x r) (<= x e)) 'no)
 L        (print "Vi vveli 7")))))
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38226 / 21158 / 4314
Регистрация: 12.02.2012
Сообщений: 34,773
Записей в блоге: 14
31.05.2020, 19:45
Цитата Сообщение от supmener Посмотреть сообщение
Что то вроде этого
- это не постановка... Вот что-то вроде. Работает:


Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(defun xi (x)
  (prog (e r)
    (setf e 3)
    (setf r 10)
    (when (= x 7) (print "Вы ввели 7"))  
    (return (cond ((and (> x e) (< x r)) 'yes)
                  ((or (>= x r) (<= x e)) 'no)))))
 
==> XI
 
(xi 5)
==> YES
 
(xi -5)
==> NO
 
(xi 7)
"Вы ввели 7"
==> YES
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.05.2020, 19:45

Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}?
package com.company; import java.io.Serializable; public class person implements Serializable { protected String name; ...

Условный экстремум функции
Найти условный экстремум функции при помощи функции Лагранжа. z=2x2+3y2, при х-y=3

Условный оператор в функции?
В этом примере: def prim(a,b): if a &gt; b: c = a + b else: c = a - b return (c)

Условный оператор. Функции
Даны три вершины треугольника. Узнать, в каких четвертях (на координатной сетке) он находится. Координаты треугольника ((X1, Y1), (X2, Y2),...

Условный Экстремум функции
что делать если второй дифференциал от функции Лагранжа равен нулю и дифференциал от уравнения связи dx+dy=0


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru