Просто и элегантно.
Спасибо динамической типизации!
#lang racket
(require math)
(require racket/match)
(define (inverse func)
(match func
['exp log]
['cos acos]
[_ #f]))
(printf "Inv[~a](~a) = ~a\n" 'exp (exp 1) ((inverse 'exp) (exp 1)))
(printf "Inv[~a](~a) = ~a\n" 'cos 1 ((inverse 'cos) 1))
http://pasterack.org/pastes/74110
Inv[exp](2.718281828459045) = 1.0
Inv[cos](1) = 0
Я тебе тему для следующей серии придумал: в Java нельзя делать switch на строки (из-за статической типизации, конечно).
@anonymous Отбой, в JDK 7 завезли: http://stackoverflow.com/a/338230 Олсо ты путаешь строковые литералы и строки.
@l29ah ОП сравнивает имена, а не сами функции. Подозреваю, что то же самое можно сделать с помощью Template Haskell, но я его не шарю.
@anonymous Moar, ну или кейвордов для гугла хотя бы.
@minoru уже можно, с седьмой
@kerrigan Уже знаю, см. /0YP
@anonymous Да всем давно понятно без пруфов, что хаскель тупо круче
@anonymous Спасибо динамической типизации! // Что сказать-то хотел?
@anonymous Ну, опять-таки: я его не шарю, представление о TH у меня очень размытое. Но в моём понимании мы там будем просто смотреть на AST, в котором видно имя функции, и подменять это самое имя (тупо case, конвертирующий из строки в строку, как и на язычке ОПа).
@minoru заметь, что в коде ОПа нет макросов)))
@ninesigns И что? Когда уже ты поймёшь, что для разных языков свойственно решать одни и те же задачи по-разному? Более того, когда до тебя дойдёт, что в этом и есть суть создания такого большого количества языков, которые имеем сейчас?
@anonymous И что, это работает?
@minoru ``косинус'' eval-ится в #<procedure:cos> перед апликацией inverse.
NAP не нарушен.
@ninesigns Окей; в моём представлении о TH, он действительно соснёт в таком случае.
@anonymous ничего сложного:
```
lang racket
(require math)
(require racket/match)
(define (inv func)
(cond [(eq? func log) exp]
[(eq? func exp) log]
[#t #f]))
(printf "Inv^2[~a](~a)=~a" exp 1 (((compose inv inv) exp) 1))
;;; Inv^2[#<procedure:exp>](1)=2.718281828459045
@kuzy000 ♥
@minoru если я это пойму, то о чем мне будет срать в интернетах?
@ninesigns Зачем срать в Интернетах?
@minoru ловить лулзы
@ninesigns С ещё не понявших? Какой в этом толк? // Я понимаю, конечно, что срачики часто подталкивают народ сесть и разобраться в каком-то отдельно взятом вопросе — на собственной шкуре не раз испытал :) Выходит, вбросы — это такая форма community service?
@minoru служу бнвачу
@l29ah свежо