2 / 2 / 0
Регистрация: 14.02.2021
Сообщений: 27

Является ли "+" - функцией?

24.12.2022, 23:21. Показов 72917. Ответов 32

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вопрос, возможно, глупый. Хотелось бы уточнить - "+" (равно как и "-") - это функция или оператор? И есть ли разница между оператором и функцией?
Таким образом, (+ 5 3) - вызов функции?
Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2022, 23:21
Ответы с готовыми решениями:

starDrag не является функцией
Пишу в as3 код import flash.geom.Rectangle; qw.addEventListener(MouseEvent.MOUSE_DOWN, onMD); function onMD(e:MouseEvent):void ...

Кнопка не является функцией
В хроме обнаружил такую ошибку Uncaught TypeError: addModal is not a function at HTMLButtonElement.onclick именно эта кнопка <button...

Проверить, является ли отношение R функцией?
Прикрепила лабу и сами задания. В четвертом задании ошибка, и я не могу ее найти. 4) Проверить, является ли отношение R функцией? ...

32
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
05.01.2023, 14:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Гай Посмотреть сообщение
Почему же тогда специальная форма называется defvar, а не defsym например?
Потому что символы отдельно определять не надо, их ридер создаёт при чтении.

А что делает defvar? Наверно, заносит символ в какой-то перечень глобальных переменных. А может, записывает где-то в самом символе, что он может использоваться в качестве глобальной переменной. Зависит от реализации.

Цитата Сообщение от Гай Посмотреть сообщение
Вы мне отвечаете: нет, на самом деле вы не понимаете! катарсис это буквы - к. а. т. а. р. с. и. с.
..., с которыми ассоциирован процесс и результат бла-бла. В языках, где язык отдельно, а программа отдельно, не возникает недоразумений, если смешиваются имена и означаемые ими сущности. А в лиспе программа - это данные, поэтому надо осознавать, что означаемое и означающее - разные вещи. Потому что означающее - тоже лисповая сущность, но другой природы. В CL на первом месте выражения должен стоять символ. А функция - не может. Скопирую пример:
Lisp
1
2
(+ 5 6) ; в голове - символ: работает
(#.(function +) 5 6) ; в голове - функция: не работает
В схеме для головы другое правило; возможно, в Clojure - тоже. Не знаю, как в Clojure с макросами чтения, и можно ли в принципе в выражение воткнуть саму функцию, а не её имя и не выражение, вычисляющееся в функцию. В CL - можно.

Цитата Сообщение от Гай Посмотреть сообщение
Если IF - это просто символ, то почему же он не работает как специальная форма if выше в моём примере?
Ваш пример работает так. Предположу, Clojure, как Scheme, является лиспом-1 и допускает выражение в голове выражения. В голове вашего выражения стоит выражение, состоящее из одного символа - sym. Так как это ничем не примечательный символ (не специальный оператор и не макрос), то правило вычисления требует вычислить значение головы, получить функцию, и применить её к чему нужно. Односимвольное выражение-голова вычисляется как значение переменной, то есть в значение переменной sym - символ if. Ожидали получить в качестве значения функцию, получили - символ. Ошибка в рантайме.

Кстати, по поводу вашего изначального утверждения
Цитата Сообщение от Гай Посмотреть сообщение
Если вы попытаетесь в попытаетесь на первое место в списке поставить не функцию, то получите сообщение об ошибке.
if, defn, defvar - не функции и не имена функций, а ничего, можно ставить в голову выражения.

Добавлено через 22 минуты
Цитата Сообщение от Гай Посмотреть сообщение
Вот это да! Как и везде в других языках. Невероятно.
Есть нюанс - гомоиконность. В роли переменных выступают символы (symbol, тип данных). Так бывает далеко не везде. И этими символами мы оперируем при метапрограммировании. Да что там, можно функцией выполнять (глобальные) присваивания в рантайме с динамически вычисляемым именем переменной:
Lisp
1
2
3
4
5
6
7
8
(defvar *a* 'foo)
(defvar *b* 'bar)
 
(set '*a* 'baz)
(let ((var '*b*))
  (set var 'qux))
*a* ; BAZ
*b* ; QUX
0
Заблокирован
05.01.2023, 15:34
Цитата Сообщение от helter Посмотреть сообщение
Потому что означающее - тоже лисповая сущность, но другой природы. В CL на первом месте выражения должен стоять символ. А функция - не может. Скопирую пример:
А символ - это сферический конь в вакууме иди всё же ссылка на функцию?
Символ это designator.
A designator is an object that denotes another object.
Lisp
1
(print (funcall '+ 4 3))
Цитата Сообщение от helter Посмотреть сообщение
Предположу, Clojure, как Scheme, является лиспом-1 и допускает выражение в голове выражения.
А CL как работает?
Lisp
1
2
3
(defvar var 'if)
(print (type-of var))
(print (var (> 10 5) "bigger" "smaller"))
Цитата Сообщение от helter Посмотреть сообщение
if, defn, defvar - не функции и не имена функций
Да, это специальные формы, которые особым образом интерпретируются компилятором. Заходим на новый круг.

Цитата Сообщение от helter Посмотреть сообщение
Потому что символы отдельно определять не надо
Ну defvar же привязывает значение к символу. Так что это в итоге - символ или переменная?

Добавлено через 22 минуты
Цитата Сообщение от helter Посмотреть сообщение
Не знаю, как в Clojure
вот что я нашёл по Clojure
https://stackoverflow.com/ques... in-clojure
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
05.01.2023, 15:37
Цитата Сообщение от Гай Посмотреть сообщение
А символ - это сферический конь в вакууме иди всё же ссылка на функцию?
Символ - это сферический конь в вакууме. Symbol, тип данных, как вы пишете. А с ним может быть ассоциирована функция.

Цитата Сообщение от Гай Посмотреть сообщение
Символ это designator.
A designator is an object that denotes another object.
"Символ" - это объект соответствуюего типа данных. А "designator" - роль. Символы существуют "в природе", а designator-ы - в голове программиста.

Цитата Сообщение от Гай Посмотреть сообщение
А CL как работает?
Десять раз уже писал. В голове формы может быть только символ или лямбда-выражение, больше ничего. Если в голове стоит символ, то выражение вычисляется в зависимости от категории символа: если это специальный оператор, у него индивидуальное правило; если с этим символом ассоциирован макрос - раскрывается макрос, потом вычисляется; если с символом ассоциирована функция в пространстве имён функций - применяется эта функция; в противном случае - ошибка.

Цитата Сообщение от Гай Посмотреть сообщение
Так что это в итоге - символ или переменная?
Символ - это объект типа данных symbol. А переменная - это ассоциация символа со значением.
variable n. a binding in the ``variable'' namespace. See Section 3.1.2.1.1 (Symbols as Forms).
Символы возникают обычно при чтении. А defvar задаёт определённые свойства ассоциации: что она будет глобальная динамическая.

Ладно, я вижу, это сложновато. Думаю, понятнее объяснить я уже не смогу, так что подробности - в CLHS. Собственно, я и не собирался вам ничего растолковывать - просто не хотел, чтобы случайный читатель принял на веру, что "на первом месте выражения может стоять только функция".
0
Заблокирован
05.01.2023, 15:44
Глобальный вывод
+ - это символ, который связан с переменной с таким именем, которая, в конечном итоге, разрешается в функцию.

простой пример

Lisp
1
2
3
4
5
(def x 10)
 
;(var  x) var x даст нам ссылку на переменную, а @  эту ссылку разыменует
 
(+ 10 @(var x))
Добавлено через 3 минуты
Цитата Сообщение от helter Посмотреть сообщение
переменная - это ассоциация символа со значением.
О, наконец-то.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
05.01.2023, 15:52
Цитата Сообщение от Гай Посмотреть сообщение
Глобальный вывод
+ - это символ, который связан с переменной с таким именем, которая, в конечном итоге, разрешается в функцию.
Выкинул фикцию. Символ "разрешается" в функцию: в лиспе-1 в единственном пространстве имён, в лиспе-2 - в функциональном.
0
Заблокирован
05.01.2023, 15:59
Цитата Сообщение от helter Посмотреть сообщение
Выкинул фикцию.
Lisp
1
2
3
4
5
6
7
8
9
10
Вот что я нашёл насчёт разницы в CL
 
;Calls the lexical function named foo. If there is no lexical function foo, it calls the symbol function of foo.
(funcall #'foo 1 2 3)
 
;Calls the lexical function named foo. If there is no lexical function foo, it calls the symbol function of foo.
(foo 1 2 3)
 
;Calls the global symbol function of foo. Thus there will be a lookup through the symbol.
(funcall 'foo 1 2 3)
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
05.01.2023, 16:08
Да, всё так. Вот это "function named" означает существование ассоциации в функциональном пространстве имён. С символом может быть ассоциирована функция в функциональном пространстве, и её можно "вытаскивать" для разных целей - не только чтобы вызвать funcall-ом, но и, например, чтобы передать в mapcar или sort. А если символ стоит на первом месте списка, лисп вытаскивает ассоциированную функцию самостоятельно. На первых порах насчёт (funcall 'foo 1 2 3) можно особенно не париться, это дополнительное удобство funcall-а и некоторых других функций; но действительно удобно (например, если использовать что-нибудь хукоподобное: с символами удобнее, чем с функциями).
0
Заблокирован
05.01.2023, 16:15
helter, как я понял #' - это переменная, как и в Кложе. А 'x - мы тут экранируем х и превращаем его в символ, чтобы уче через символ добраться до значения.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
05.01.2023, 16:57
#' - это доступ к значению в функциональном пространстве имён. Ну то есть да, как переменная, только в другом пространстве. То есть когда мы пишем (funcall #'foo 1 2 3), funcall получает уже саму функцию, символа foo он не видит. (По идее, надо сказать не "funcall получает", а "функция, ассоциированная с символом funcall в функциональном пространстве имён получает...", но я сдаюсь, ваша правда, так разговаривать невозможно.) А когда мы пишем (funcall 'foo 1 2 3), funcall получает символ, который он должен применить как функцию. Но у него хватает соображения найти функцию с этим именем и применить её.
0
Заблокирован
05.01.2023, 17:15
helter, ну вот и разобрались во всём)
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
07.01.2023, 08:48
Цитата Сообщение от Гай Посмотреть сообщение
В компьютере есть ячейки памяти. Когда вы обращаетесь к gee, то вы обращаетесь к переменной хранящей адрес функции. Вы же не с голым адресом в памяти работаете.
Потому что Lisp. Был бы Си, мог бы и с голым адресом работать. Компьютер ничего не знает про переменные и функции.

Добавлено через 1 минуту
#' — это синтаксический сахар для (function ...)
1
Заблокирован
10.01.2023, 09:40
Цитата Сообщение от korvin_ Посмотреть сообщение
#' — это синтаксический сахар для (function ...)
Цитата Сообщение от Гай Посмотреть сообщение

(print #'gee)
что равнозначно

(print (function gee))
Спасибо, кеп. В очередной раз.
0
Заблокирован
10.01.2023, 22:06
Цитата Сообщение от korvin_ Посмотреть сообщение
Компьютер ничего не знает про переменные и функции.
Пылесос ничего не знает о вакууме.
Электрическое рыле ничего не знает об электричестве.
Космический корабль ничего не знает о космосе.


Похоже я тут один в полной мере знаю Лисп - что ни скажу все за мной тут же повторяю. Да, кажется, мой авторитет очень велик.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2023, 22:06

Ошибка: setProgress не является функцией
Здравствуйте! Новичок во Flash, столкнулась с проблемой: flash выдает ошибку: в чем проблема - не могу понять. При этом в...

Является ли функцией бинарная матрица?
Как определить является ли бинарная матрица отношения размерностью nxn функцией? Помогите пожалуйста

Является ли функция безопасной псевдослучайной функцией
Пусть функция F:{0,1}^n×{0,1}^n→{0,1}^n является безопасной псевдослучайной функцией. Является ли функция F′ также безопасной...

Является ли функция от x,y,z рациональной ф-цией от y ,от z ; целой функцией от x
alpha(x,y,z)=y^2-(ycosz+zcosy)x+{x}^{(y+z)/(y-z)} Можете подсказать как решить данное задание ?

Функцией чего является теплоёмкость термодинамической системы
Функцией чего является теплоёмкость термодинамической системы?


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru