LINUX.ORG.RU

Вопрос терминологии

 , ,


2

3

Скажите, как правильно называется функция, которая возвращает функцию, которая применяет функцию к функциям от агрумента? %))

Вот это:

(define (f/apply ff . fn)
  (lambda args (apply ff (map (lambda (f) (apply f args)) fn))))

Надо написать комментарий, но я не знаю как это обозвать.

Используется, например, так: если нужна функция f(x) = sin(x) * cos(x), пишем (define f (f/apply * sin cos)) и получаем требуемую функцию.

★★★★★

Последнее исправление: Puzan (всего исправлений: 1)

теперь и я задумался над тем как назвать явление когда у функций есть методы принимающие функции и возвращающие функции

SV0L0CH
()
Ответ на: комментарий от SV0L0CH

когда у функций есть методы

Это в смысле диспетчер?

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Не помню, можно ли так на классической Scheme

Такого каррированного дефайна в схеме нет.

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

korvin_ ★★★★★
()
Последнее исправление: korvin_ (всего исправлений: 1)
Ответ на: комментарий от korvin_

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

Вот кто потом скажет, что это некрасивый язык?

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Вот кто потом скажет, что это некрасивый язык?

Я скажу.

(define-syntax cdefine*
  (syntax-rules ()
    ((_ ((head . tail) . rest) body body* ...)
     (cdefine* (head . tail)
       (lambda* rest body body* ...)))
    ((_ (head . rest) body body* ...)
     (define* head
       (lambda* rest body body* ...)))
    ((_ . rest)
(define* . rest))))
Ехал CAR через CDR, видит CDR CDR CDR.

Virtuos86 ★★★★★
()
Ответ на: комментарий от SV0L0CH

теперь и я задумался над тем как назвать явление когда у функций есть методы принимающие функции и возвращающие функции

у функций есть методы

Это называется ООП.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Ехал CAR через CDR, видит CDR CDR CDR.

Где?! Это макрос на паттерн-матчинге. Всё просто и понятно, и никаких лишних сущностей.

Я скажу.

Ты просто не хочешь увидеть, потому что предвзят (лисп, скобки, ногти и т.д.).

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Virtuos86

Звёздочки какие-то.

Звёздочка - это часть идентификатора. Замени её на букву, ничего не изменится. Просто, для наглядности.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Звёздочки какие-то.

Звёздочка - это часть идентификатора. Замени её на букву, ничего не изменится. Просто, для наглядности.

Странное соглашение. Обычно ожидаешь, что спецсимвол имеет какое-то особое значение. Почему бы не просто body_ или _body? Знак подчёркивания это привычная часть идентификатора во многих ЯП.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Странное соглашение.

В данном случае это наиболее подходящее обозначение.

Знак подчёркивания это привычная часть идентификатора во многих ЯП.

А в схеме можно так:

(zero? x)
(string->list str)
(char<=? c1 c2)
(for/list ...)

Это всё идентификаторы.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

char_less_or_equal_p

В CL, емнип, примерно такие идентификаторы, и никто не умер. В нескобочных языках вещи вроде char<=? вообще обычно запрещены, потому что могут вызывать проблемы с парсингом кода, поэтому такие вольности именования как минимум непривычны.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

что спецсимвол имеет какое-то особое значение

В лиспах это не спецсимвол.

В CL, емнип, примерно такие идентификаторы, и никто не умер.

Не только

В нескобочных языках вещи вроде char<=? вообще обычно запрещены, потому что могут вызывать проблемы с парсингом кода

Не могут, если грамматика построена с учётом этого.

Из нескобочных использовать нецифроалфавитные символы в идентификаторах можно, например, в Scala.

В Ruby суфикс '?' принято использовать для идентификаторов предикатов, а суффикс '!' — для методов, изменяющих состояние объекта.

korvin_ ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.