Подтвердить что ты не робот

Как вы набираете lisp эффективно, с таким количеством скобок?

Я стараюсь держать пальцы в домашнем ряду как можно больше.

Ввод всех скобок заставляет меня отойти оттуда честно.

Я использую Emacs; сами круглые скобки не проблема, мне с ними комфортно. И мне не нравятся режимы, которые автоматически набирают их для меня.

Я думал о переназначении квадратных скобок в скобки и наоборот. Это хорошая идея? Что делают все остальные?

4b9b3361

Ответ 1

Я лично рекомендовал бы смертельную комбо Emacs, SLIME и paredit.el Paredit позволяет псевдо-семантически редактировать код LISP на уровне sexp, и это делает скобки исчезающими почти полностью. Вы можете перемещаться по сексу, как если бы они были простыми словами и даже мутировали их всего лишь несколькими нажатиями клавиш. Существует также небольшой режим, называемый Redshank, который работает совместно с Paredit и обеспечивает большую мощность.

Рассмотрим простые эти примеры (| - позиция курсора):

(foo bar (baz| quux) zot) + C-( => (foo (bar baz| quux) zot)
(foo (bar |baz) quux zot) + C-) => (foo (bar |baz quux) zot)

(foo (bar baz |quux) zot) + C-{ => (foo bar (baz |quux) zot)
(foo (bar |baz quux) zot) + C-} => (foo (bar |baz) quux zot)

В свое время я сделал какое-то серьезное программирование Common LISP, и paredit оказался для меня неоценимым. Я даже не думаю о написании нетривиального кода LISP без моего инструментария. И после всего, что должно быть; вам никогда не придется подсчитывать или сопоставлять ваши круглые скобки... как только вы овладеете Paredit, скобки просто исчезнут из-под ваших глаз.

Повторное использование функции [] to() поможет, но после использования Paredit вы перестанете много заботиться.

Не стесняйтесь использовать LISP определенные части из моих точек-emacs.

Ответ 2

Со многими раскладками клавиатуры, отличными от США, печатать квадратные скобки или фигурные скобки еще более громоздки, чем печатать круглые скобки, так или иначе, что делает программирование на большинстве языков очень напряженным, поэтому считайте себя счастливым.;)

Что касается меня, я использую нестандартную раскладку клавиатуры, отличную от программиста, которая позволяет мне вводить круглые скобки через [Super] -j и [Super] -k.

Ответ 3

У меня есть педали. LeftFoot = открытый палец, RightFoot = закрытый палец.

Ну, я этого не делаю, но я не использую Lisp. Однако это не похоже на плохую идею.

Не могли бы вы представить себе вариант на Lisp, который использовал отступы вместо parens? (взяв страницу из спецификации Python)

Ответ 4

Я снимаю пальцы с домашних ключей....

Ответ 5

Я попытался переназначить в Emacs, но он создает новые проблемы: скажем, вы редактируете окно терминала через ssh и вставляете фрагмент в окно; то парсеры и скобки поменяются местами, а не только набирать текст. Если вы попробуете это, переустановите на более низком уровне в вашей системе, например xmodmap.

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

Ответ 6

Я переустановил [] на() с помощью xmodmap и вроде этого. Было немного странно привыкать писать код на языках, которые используют [], но, как и любые изменения, вы привыкаете к нему. Непересекающиеся парсеры в Lisp лучше, чем не имеющие сдвинутых скобок на других языках, поэтому он работает.

В любом случае, вот необходимое заклинание xmodmap для моей американской клавиатуры:

!! swap () and []
keycode  18 = 9 bracketleft
keycode  19 = 0 bracketright
keycode  34 = parenleft braceleft
keycode  35 = parenright braceright

Ответ 7

"... так много parenethesis"

Первое, что я сделал, это привязать '(' ключ к последовательности '(' + ')' + right(), поэтому мой баланс в скобках автоматически оставил налево столько же, сколько нужно для ввода нового кода.

Вам также нужен удобный способ навигации по одному парен-привязке C-] к поиску последовательности (')') + right(). Теперь автор становится короче, так как вам не нужно брать руки с домашней позиции - просто введите C-] каждый раз, когда вы завершаете S-expr.

Следующее, что я сделал, это связать ключ с подпрограммой, которая подталкивает существующий элемент в текущий список... так что если//является позицией курсора, тогда эта команда преобразует:

(if (< //) (+ x 1) 
    (x) 
  (y))

to

(if (< (+ x 1) //)
    (x) 
  (y))

Эффективное нажатие одного элемента справа в текущий список - очень полезно для редактирования существующего кода. Последовательность '(', '<', CS-], Space, '2' добавляет "сравнить менее 2" с существующим выражением. В сочетании с C-] это позволяет быстро создавать новые выражения из существующих.

@jamesnvc, Я не думал о привязке() к клавишам []... Мне нужно попробовать это, спасибо!

Ответ 8

Мне нужно снять пальцы с домашней строки, чтобы охватить все остальные операторы смены числа, поэтому я никогда не думал об этом.

И как только вы наберете левый-паренс, электро-паренс даст вам право.

Ответ 9

Если вы используете скобки больше, чем квадратные скобки, непременно переделайте. Я не вижу, как это может создать больше проблем, чем, скажем, левша, заменяющая кнопки мыши.

Ответ 10

Когда я пишу код, я обычно трачу гораздо больше времени на размышления и чтение своего кода, чем набираю его. Я несколько раз пытался в прошлом переключиться на раскладку клавиатуры Dvorak, но мне не хватает очевидной мотивации, потому что я могу печатать гораздо быстрее, чем я могу думать. Синтаксис синтаксиса языка - это аналогичная проблема - до тех пор, пока я могу набирать код, не выходя из клавиатуры (т.е. С помощью мыши будет плохо), я счастлив.

Ответ 11

В основном, я просто набираю их, но иногда я использую M- (и M-) (особенно когда добавляю LET-привязку "поздно на стадии" ), чтобы заключить соответствующее количество чисел.

Ответ 12

Я также изменил раскладку клавиатуры (dvorak) (через xmodmap), чтобы переключить скобки ( "[]" ) и parens в сочетании с paredit-mode (что действительно требует некоторого привыкания).

Ответ 13

Я использую пакеты paredit и pair-mode, но для быстрого ввода в скобки я использую функцию "точка-точка-точка" для замены двойного периода в() на задержку 5 мс (если я печатаю медленно, я получаю две точки, тогда). Это замечательный пакет (я немного взломал для себя личные предпочтения, поскольку я печатаю с помощью клавиатуры Dvorak, я заменил тире ключом косой чертой (//не так распространен в lisp)).

Чтобы избежать беспорядка в parens, я добавляю пакет с "круглыми скобками" в мой набор инструментов, а для максимальной эффективности при захвате sexp или текстовой навигации в целом я также использую vimpulse (поскольку я являюсь наркоманом Vim).

Ответ 14

DrScheme имеет нажатия клавиш для парсеров и квадратных скобок, перевернутых по умолчанию. У этого также есть функция, где волшебным образом догадывается, какой из двух вы имели в виду, поэтому вы редко достигаете сдвига-9.

Quack имеет аналогичную функцию с DrScheme.

DivaScheme (мой редактор) - это нечто совершенно другое. Он редактируется на уровне sexp, так что parens больше не мешают.

Ответ 15

Переверните caplock на "(" и включите редактор autoinsert ")" для вас.

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

Ответ 16

Я использую Vim с vim-sexp и vim-sexp-mappings-for-regular-people затем отобразили <leader>u, чтобы поместить меня в нормальный режим внутри нового (.

map <leader>u i(