LINUX.ORG.RU

Как в DrRacket перейти к определению функции?

 ,


0

1

Есть модуль lib.

(provide foo)
...
(define (foo ...
...

Есть другой модуль, который его использует

(require lib)

(foo 

Как перейти к определению foo? Или хотя бы как увидеть по нему документацию, параметры...

P.S. Аналогов CL-ных docstring'ов в racket нет?

★★★★★

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

Сделать syntax check (или включить online expand). Райтклик на символ и там все есть. В правом верхнем углу указывается контракт для ф-и или паттерн для макроса.

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

Сделать syntax check

Выдаёт read: expected a `)' to close `(' Закрыл скобку: по правой кнопке появился переход к определению

Как включить online expand?

И как сделать, чтобы работало «В правом верхнем углу указывается контракт для ф-и»? У меня там только «Run» и «Stop».

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

У меня работает вот так: img_1
img_2

Подозреваю, что вам для активации функции придется тоже разместить свою документацию в соответствующей директории.

P.S. Простите за винду. Просто сегодня лень компилять фряху.

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

Документация есть. По правой кнопке и «перейти к документации» открывает. Может всплывающая в более новой версии. У меня 5.2.1

Вот только это ведь только для встроенных пакетов (для которых есть встроенная документация).

А для самописного модуля? Хотя бы что-то типа http://www.nongnu.org/geiser/img/repl-autodoc.png

И вопрос про документацию остаётся открытым: в Scheme принято всю документацию писать в отдельном файле html рядом? В исходниках даже комментариев практически нет.

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

Почти то же, что и в HTML. Всё равно приходится держать два файла: один с кодом, второй с описанием. и не забывать при изменении первого (например, сигнатуры вызова) менять второй.

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

Разве что scribble/lp... но зачем они требуют на каждый кусок код _уникальный_ идентификатор? И затем их вручную собирать в список.... Ведь Кнут давно придумал WEB, где всё по-человечески!

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

Выдаёт read: expected a `)' to close `(' Закрыл скобку: по правой кнопке появился переход к определению

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

Как включить online expand?

Он в последних версиях должен быть включен по дефолту. В правом нижнем углу где человечек нарисован еще правее - красный кружок либо пустое место. Райтклик туда.

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

А для самописного модуля? Хотя бы что-то типа http://www.nongnu.org/geiser/img/repl-autodoc.png

http://docs.racket-lang.org/syntax/docprovide.html?q=syntax/docprovide

И вопрос про документацию остаётся открытым: в Scheme принято всю документацию писать в отдельном файле html рядом?

Это не html-файл, документация пишется в модуле racket, из которого потом html и генерится. Но можно и так:

http://docs.racket-lang.org/scribble/srcdoc.html?q=doc&q=syntax/docprovide

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

Хотя бы что-то типа http://www.nongnu.org/geiser/img/repl-autodoc.png

Кстати можно посмотреть реализацию get-help. Она же на racket написана сама по себе. Никто не мешает утянуть из гейзера соответствующий модуль и использовать.

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

Это не html-файл, документация пишется в модуле racket,

.scrbl с трудом можно назвать модулем Racket. В любом случае это отдельный файл слабо связанный с кодом.

http://docs.racket-lang.org/syntax/docprovide.html?q=syntax/docprovide

Вот только поиск по Racket/collections показывает, что никто это не использует.

Посмотрел по исходникам... где-то provide-and-scribble, где-то отдельный .scrbl, где-то (swindle) почти cl-style, но вместо docstring'ов комментарии. Соответственно в исходниках всё видно и понятно, но приходится злоупотреблять кнопкой «перейти к обьявлению». Пока впечатление какого-то ужаса. На CL идеология «вот вам defmacro, можете сделать свой синтаксис», а на Racket «вот вам 100500 синтаксисов, пишите как хотите».

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

.scrbl с трудом можно назвать модулем Racket.

Между тем - это модуль racket. И он ничем не отличается от любого другого модуля. Собственно, никто не мешает писать документацию в том же файле, как бы так:

(define (f x) ...)
(module+ doc ...)
где во втором многоточии scribble-код документации для f. Где как удобнее - так и делается. Результат-то все равно одинаковый.

это отдельный файл слабо связанный с кодом

Он _очень_ сильно связан с кодом. И работает scribble только из-за того, что запускается в одном с кодом рантайме (за счет этого разрешаются биндинги).

Соответственно в исходниках всё видно и понятно, но приходится злоупотреблять кнопкой «перейти к обьявлению».

А зачем вообще исходники? Мне лезть приходилось туда только один раз - немного пофиксить экспандер для гейзера. Если же ничего фиксить не надо - то и исходники не нужны.

Посмотрел по исходникам... где-то provide-and-scribble, где-то отдельный .scrbl, где-то (swindle) почти cl-style, но вместо docstring'ов комментарии.

Все проще чем кажется. В случае документации с большим количеством текста, сложной версткой, примерами и т.п. делается отдельный модуль с переопределенным ридером (тот самый .scrbl файл, на самом деле он тот же .rkt). Если это сделать в коде, то просто реализация банально потеряется за доками. Если же для ф-й только контракт и мелкий комментарий - то можно ограничиться provide-and-scribble

Вот только поиск по Racket/collections показывает, что никто это не использует.

Ну и что?

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

А зачем вообще исходники? Мне лезть приходилось туда только один раз - немного пофиксить экспандер для гейзера. Если же ничего фиксить не надо - то и исходники не нужны.

Ага. Вот ключевое отличие. В CL исходник = основная документация. Отсюда идея докстрингов, деклараций, говорящих имён у параметров. В Racket всё-таки документация сама по себе. Ладно, привыкнуть можно.

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

В Racket всё-таки документация сама по себе.

Зато она значительно лучше и полнее чем в CL. Даже гиперспек убог, чего уж о докстрингах говорить.

Она не отдельно, просто модульность выше. Никто не мешает прямо в коде писать доки, собственно, все будет ок (вон, в исходниках так тоже делается, когда доков немного и нет смысла выделять в отдельный файл).

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

Зато она значительно лучше и полнее чем в CL.

Где можно посмотреть документацию на swindle? И биндинга к GTK нет вообще или я плохо искал?

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

Где можно посмотреть документацию на swindle?

Он делался, когда scribble еще не было, по-этому на сайте автора, т.к. переделывать доки в дальнейшем он не стал. Вообще, я бы swindl нe пользовался.

И биндинга к GTK нет вообще или я плохо искал?

В стандартной поставке нет (хотя родной гуи в линуксе делается именно через гтк, так что возможно они есть где-то внутрях для личног опользования), надо смотерть на planet или гитхабах. Если это действительно нужно - можно на маиллисте спросить.

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

хотя родной гуи в линуксе делается именно через гтк

Собственно, к чему вопрос. Для моей программы нужен список c возможностью редактирования и кнопочек в поле. Думаю, что более логично: писать свой велосипед типа https://github.com/Kalimehtar/gtk-cffi или пыьаться расширить mred/private/wx/gtk/list-box.rkt

Что посоветуешь?

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

Я бы уже то, что есть, допиливал. По крайней мере, перед глазами будет отлаженный и рабочий пример. А при написании своего велосипеда можно будет внезапно уткнуться в какие-нибудь проблемы с особенностями внутреннего устройства ракетовской гуйни.

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