Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/202: Рейтинг темы: голосов - 202, средняя оценка - 4.80
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038

Различные IDE для диалектов лиспа

20.04.2014, 21:26. Показов 42719. Ответов 125
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я работаю с лиспом (развлекаюсь, конечно, а не работаю) в vim + slimv. Буду нести эту связку в массы. Сразу оговариваюсь, что я не эксперт по slimv-у, поэтому что-то могу делать неоптимально и могу не знать многих фич. Однако и так он устанавливает достаточно удобный диалог с лиспом для того, чтобы не разменивать Редактор на всякую ерунду.

Slimv - это плагин, который имитирует функциональность Slime. В частности, он устанавливает диалог с работающим лисповым процессом. Написан на vimlang и python (та часть, которая отвечает за общение процессов через сокеты).

Да, я буду писать линуксоцентрично. Вроде бы slimv работает и на Windows, но пользователи оной ОС пусть сами разбираются, как его ставить. Также я буду писать CL-центрично, хотя slimv поддерживает и другие диалекты.

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

Начать с установки.

Требования: vim с python и python.

Установка плагина тривиальна. Если есть pathogen, просто распаковать свежий slimv в ~/.vim/bundle. Если нет pathogen-а, сначала установить его по инструкции и см. п. 1.

Ещё у меня есть файл ~/.vim/ftplugin/lisp.vim следующего содержания:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
set lw-=if
set lw+=set-macro-character
set lw+=set-dispatch-macro-character
set lw+=block
set lw+=defsetf
 
inoremap <buffer> <C-\> lambda 
nnoremap <buffer> <Space> <C-w>w
 
nmap <buffer><silent> == :call Scheme_indent_top_sexp()<cr>
 
let g:slimv_browser_cmd = "dillo"
 
" Indent a toplevel sexp.
fun! Scheme_indent_top_sexp()
    let pos = getpos('.')
    silent! exec "normal! 99[(=%"
    call setpos('.', pos)
endfun
Что вам отсюда может быть нужно? Сначала корректируется параметр lispwords - он перечисляет список слов, которые требуют "лисповый" стиль индентации. Из числа lispwords исключаем if, чтобы его индентация соответствовала требованиям http://dept-info.labri.u-borde... ation.html. Затем добавляем несколько лиспослов, которые виму почему-то неизвестны.

Затем пара мапов: в режиме вставки C-\ даёт лямбду (баловство) и более важное: в нормальном режиме пробел переключает между окнами. Удобно прыгать из файла в репл и обратно.

Дальше == перемапливается на функцию, индентирующую с-выражение верхнего уровня, содержащее курсор. Это полезнее, чем дефолт (индентовать строку). Функцию откуда-то скопипастил вместе с названием.

Ну и в качестве браузера, в котором открывается HyperSpec, я себе назначил dillo.
2
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2014, 21:26
Ответы с готовыми решениями:

Возможности и ограничения диалектов Лиспа
Предлагаю обсудить возможности и ограничения диалектов Лиспа.

Существуют ли IDE для лиспа под Ubuntu?
Добрый день! Посоветуйте, пожалуйста, какую-нибудь IDE для лиспа под ubuntu, если такая имеется. Добавлено через 2 часа 13 минут Или...

Библиотека для лиспа
Здравствуйте. Если можно, подскажите ресурс с библиотекой lib-k.lsp

125
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
07.10.2014, 20:09
Студворк — интернет-сервис помощи студентам
оно конечно не нужна, но пусть будет
0
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
10.11.2014, 23:00
Дмитрий Бушенко: Изучаем Emacs. Эпизоды 01-13
3
 Аватар для wwall
213 / 204 / 15
Регистрация: 29.05.2014
Сообщений: 1,058
12.01.2015, 04:34
Не знаю, было или нет уже - корман открыли под MIT лицензией. Глядишь и допилят...
github.com/sharplispers/cormanlisp

Интересно, до открытия lw доживем?
5
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
09.05.2015, 17:54
Я в поиске библиотеки для работы с осью, под SBCL. У меня 7-ка, но думаю это не имеет значения.
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
09.05.2015, 18:08  [ТС]
UIOP (часть ASDF 3 и должна быть искаропки), и скрестите пальцы насчёт Windows.
1
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
09.05.2015, 20:04
helter Спасибо, вроде нормально загрузилась. Мне нужно программно запустить exe-шник. Не сталкивались с такой задачей?
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
09.05.2015, 21:13  [ТС]
В принципе, для этого служит run-program.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
run-program (command &rest keys
                       &key ignore-error-status force-shell
                         (input nil inputp) (if-input-does-not-exist :error)
                         output (if-output-exists :overwrite)
                         (error-output nil error-output-p) (if-error-output-exists :overwrite)
                         (element-type #-clozure *default-stream-element-type* #+clozure 'character)
                         (external-format *utf-8-external-format*)
                      &allow-other-keys)
    "Run program specified by COMMAND,
either a list of strings specifying a program and list of arguments,
or a string specifying a shell command (/bin/sh on Unix, CMD.EXE on Windows).
Always call a shell (rather than directly execute the command when possible)
if FORCE-SHELL is specified.
Signal a continuable SUBPROCESS-ERROR if the process wasn't successful (exit-code 0),
unless IGNORE-ERROR-STATUS is specified.
If OUTPUT is a pathname, a string designating a pathname, or NIL designating the null device,
the file at that path is used as output.
If it's :INTERACTIVE, output is inherited from the current process;
beware that this may be different from your *STANDARD-OUTPUT*,
and under SLIME will be on your *inferior-lisp* buffer.
If it's T, output goes to your current *STANDARD-OUTPUT* stream.
Otherwise, OUTPUT should be a value that is a suitable first argument to
SLURP-INPUT-STREAM (qv.), or a list of such a value and keyword arguments.
In this case, RUN-PROGRAM will create a temporary stream for the program output;
the program output, in that stream, will be processed by a call to SLURP-INPUT-STREAM,
using OUTPUT as the first argument (or the first element of OUTPUT, and the rest as keywords).
The primary value resulting from that call (or NIL if no call was needed)
will be the first value returned by RUN-PROGRAM.
E.g., using :OUTPUT :STRING will have it return the entire output stream as a string.
And using :OUTPUT '(:STRING :STRIPPED T) will have it return the same string
stripped of any ending newline.
ERROR-OUTPUT is similar to OUTPUT, except that the resulting value is returned
as the second value of RUN-PROGRAM. T designates the *ERROR-OUTPUT*.
Also :OUTPUT means redirecting the error output to the output stream,
in which case NIL is returned.
INPUT is similar to OUTPUT, except that VOMIT-OUTPUT-STREAM is used,
no value is returned, and T designates the *STANDARD-INPUT*.
Use ELEMENT-TYPE and EXTERNAL-FORMAT are passed on
to your Lisp implementation, when applicable, for creation of the output stream.
One and only one of the stream slurping or vomiting may or may not happen
in parallel in parallel with the subprocess,
depending on options and implementation,
and with priority being given to output processing.
Other streams are completely produced or consumed
before or after the subprocess is spawned, using temporary files.
RUN-PROGRAM returns 3 values:
0- the result of the OUTPUT slurping if any, or NIL
1- the result of the ERROR-OUTPUT slurping if any, or NIL
2- either 0 if the subprocess exited with success status,
or an indication of failure via the EXIT-CODE of the process"
https://github.com/fare/asdf/b... ogram.lisp

Документация к asdf существует в основном в виде докстрингов, но вот таких подробных.
1
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
10.05.2015, 11:14
helter Спасибо, получилось!

Добавлено через 13 часов 30 минут
uiop крутая вещь, но что-то я по ней документации не вижу, или она еще в процессе?!
Я хочу запустить браузер, чтобы сразу появлялся запрос в адресной строке.
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
10.05.2015, 13:13  [ТС]
Документация в виде докстрингов. Они хорошие и полные. Жалко, что нет более-менее полного обзора его возможностей. Написать что ли...

В качестве "команды" run-program может принимать список строк - команду и аргументы. То есть надо смотреть, как данному браузеру дать адрес в виде параметра: например,
Lisp
1
(uiop:run-program '("firefox" "www.cyberforum.ru"))
Или составить из них одну строку.
2
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
10.05.2015, 16:47
Нашёл документацию.
http://bimib.disco.unimib.it/p... onary.html

Всё работает, но вот новая засада:
Lisp
1
Error: Subprocess run with command ("C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe" "www.cyberforum.ru") exited with error code 1
helter У Вас такое не выдавало?
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
10.05.2015, 17:20  [ТС]
Цитата Сообщение от Lambdik Посмотреть сообщение
http://bimib.disco.unimib.it/people/...ictionary.html
Странно, у меня ничего не показывает. У меня обычно нагугливаются исходники на гитхабе.

А просто из консоли команда
Code
1
C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe www.cyberforum.ru
работает?
0
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
10.05.2015, 17:46
Цитата Сообщение от helter Посмотреть сообщение
А просто из консоли команда
Код Code
1
C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe www.cyberforum.ru
работает?
Да работает, без проблем.

В интерпертаторе выскакивает ошибка, когда закрываю браузер.

Добавлено через 5 минут
Цитата Сообщение от helter Посмотреть сообщение
Странно, у меня ничего не показывает. У меня обычно нагугливаются исходники на гитхабе.
Не знаю, там бегунок слева покрутить вниз, и выбрать раздел.
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
10.05.2015, 18:43  [ТС]
Цитата Сообщение от Lambdik Посмотреть сообщение
Не знаю, там бегунок слева покрутить вниз, и выбрать раздел.
А, точно, спасибо.

Цитата Сообщение от Lambdik Посмотреть сообщение
В интерпертаторе выскакивает ошибка, когда закрываю браузер.
Видимо, особенность браузера.

Наверно, на Windows команды возвращают какой-то код. На юниксах возвращают: 0 в случае успешного завершения и не-0 в случае неуспешного. Судя по всему, при закрытии окна эксплорер считает, что программа завершилась неуспешно и возвращает ошибку.

На стороне лиспа генерируется состояние типа UIOP/RUN-PROGRAM:SUBPROCESS-ERROR. Его можно просто проигнорировать:
Lisp
1
2
(handler-case (uiop/run-program:run-program ...)
  (uiop/run-program:subprocess-error ()))
Так в случае ошибки возвратится nil.

Ещё на юниксах можно запустить команду в фоне:
Bash
1
$ command &
(в конце &), тогда терминал не блокируется, и код возврата ни на что не влияет. Наверно, на Windows тоже можно.
2
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
10.05.2015, 22:12
Цитата Сообщение от helter Посмотреть сообщение
На юниксах возвращают: 0 в случае успешного завершения и не-0 в случае неуспешного
эм.. такое соглаение конечно есть, но оно, во-первых, не всегда соблюдается (линуксовый бардак), а во-вторых, любое число могжет сигнализировать об ошибке. Надо знать успешный код возврата.
2
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
12.05.2015, 14:09
Цитата Сообщение от Lambdik Посмотреть сообщение
Нашёл документацию.
Всё работает, но вот новая засада:
Lisp
1
Error: Subprocess run with command ("C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe" "www.cyberforum.ru") exited with error code 1
В таких случаях надо добавлять
Lisp
1
:ignore-error-status t
0
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
12.05.2015, 17:26
Цитата Сообщение от antares0 Посмотреть сообщение
В таких случаях надо добавлять
Код Lisp
1
:ignore-error-status t
Спасибо!
0
 Аватар для nullxdth
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
12.05.2015, 22:08
antares0, знаю вас по лору Добро пожаловать.
0
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
24.05.2015, 10:21
Как в Linux выгдядит путь для браузера установленного по умолчанию?
Интересуют firefox, opera и chrome.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
24.05.2015, 10:34
Цитата Сообщение от Lambdik Посмотреть сообщение
Как в Linux выгдядит путь для браузера установленного по умолчанию?
Интересуют firefox, opera и chrome.
Подозреваю, что как-то так:

Bash
1
$ xdg-settings get default-web-browser
1
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
24.05.2015, 11:06
Это и есть вызов? Мне нужно что-то наподобие вот этого, только для Linux
"C:/Program Files (x86)/Mozilla Firefox/firefox.exe"

типа:
/home/ ... /firefox
И как оно там в середине?

Я собственно хочу в Linux, вызвать firefox командой
Lisp
1
(uiop:run-program '("firefox" "www.target"))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2015, 11:06

Библиотека для доступа к win32 из лиспа
Добрый день! Такая библиотека ищется (не зависящая от реализации Common Lisp. Пока нашёл только вот это: ...

Подскажите программное обеспечение для лиспа
С лиспом вообще не знакома , но есть написанная программа ХХХ.lsp , диалог , программа типа доктор . Подскажите чем ее можно открыть...

obj\Debug\IDE.o||In function `Z11OpenProjectv':| C:\tsserver\Projects\cpp\codeblocks\MyComp\IDE\IDE\IDE.cpp|2 36|undefined reference to `GetOpenFileNam
obj\Debug\IDE.o||In function `Z11OpenProjectv':| C:\tsserver\Projects\cpp\codeblocks\MyComp\IDE\IDE\IDE.cpp|236|undefined reference to...

Для функций Лиспа найти такие же по действию и принимаемым аргументам в Erlang
Люди нужна помощь. Меня моя девушка помочь с лабой, а я, если честно, в функциональных языках не силен. Задание такое нужно для функций...

каким образом пожна подключить на мать с 2 IDE выходами и 2 SATA 3 жестких диска IDE и 2 CD-ROM IDE?
Доброго вам времени суток Можете подсказать каким образом пожна подключить на мать с 2 IDE выходами и 2 SATA 3 жестких диска IDE и 2...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru