Как я могу определить тонкие ошибки синтаксиса Lisp?

Вы можете установить растровое изображение в качестве фона в кнопке.

Matrix matrix = new Matrix();

matrix.postRotate(90);

Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapOrg,width,height,true);

Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap .getWidth(), scaledBitmap .getHeight(), matrix, true);

Сначала возьмите растровое изображение из любого источника, а затем поверните его, а затем установите в качестве фона в кнопке.

BitmapDrawable bdrawable = new BitmapDrawable(context.getResources(),bitmap);
button.setBackground(bdrawable);
16
задан Török Gábor 22 May 2009 в 15:27
поделиться

6 ответов

Highlight sexps

First of all, turn on the builtin paren match highlighting (show-paren-mode) if not already did so. It always gives you an idea what indentation level you are in.

There are also some more sophisticated packages. For example, see TJ's answer on mic-paren. Or though I didn't find it suitable for me, but there is Schumacher's highlight-parentheses mode that highlights every expression block with different colors. Even Edward O'Connor has a mode that highlights the current sexp.

Paredit

Use paredit-mode which helps you writing sexps. You can easily navigate between sexps and re-structure the code. In addition, it ensures the parenthesis always balanced. When I first tried it, it was very annoying for me how Paredit constrains the way of coding, but since then I'm used to work with it, I'm a lot more productive and never get confused with opening and closing parenthesis.

Auto indenting

Use Emacs Starter Kit, which, by default, enables a lot of useful helpers for coding in Elisp like re-indent on newline.

ElDoc

emacs-lisp-mode has several useful extensions. For instance, I always use eldoc-mode that displays currently typing function's argument list or variable's docstring in the echo area. It also helps you easily recognize if you are in the wrong block.

Edebug

I've just nearly forgotten to mention Edebug which—as a last chance—always helps you figuring out what's going on in your code.

28
ответ дан 30 November 2019 в 16:19
поделиться

Вот три конкретных вещи, которые вы можете сделать, чтобы помочь выявить проблемы с синтаксисом Lisp. Со временем это станет второй натурой. Но до тех пор:

Соответствие скобок

Сравнение скобок - самый простой способ проверить группировку. Моя любимая упаковка - mic-paren . И мне нравится эта конкретная конфигурация:

(setq paren-dont-touch-blink t)
(require 'mic-paren)
(paren-activate)
(setq paren-match-face 'highlight)
(setq paren-sexp-mode t)

Это заставляет выделять sexp (совпадающие скобки), когда точка находится в начале / конце sexp. Если круглые скобки не совпадают, цвет выделения будет другим - и ярче. Когда соответствующая скобка находится за кадром, она показывает вам, как выглядит этот конец в минибуфере (и сообщает, сколько он строк).

Компиляция

Для немного более сложного метода вы можете запустить компилятор Elisp с помощью M-x compile-defun. Например, когда я скомпилировал этот простой пример:

(defun mytestfun ()
  (let ((cur (current-buffer)))
    )
  (set-buffer cur))

я получил буфер с именем *Compile-Log*, в котором было сказано:

Предупреждение: ссылка на свободную переменную `cur '

Это подсказало мне тот факт, что я использовал cur вне оператора let, который его определил.

Изменить уровень отступа

Если вы хотите, чтобы отступ был более заметным, вы можете настроить переменную listp-body-indent:

(setq lisp-body-indent 4) ;# default is 2

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

7
ответ дан 30 November 2019 в 16:19
поделиться

«Лучший» способ написания lisp - это комбинация emacs + slime. Он обеспечивает выделение скобок, tabcompletion, вы можете перейти прямо к документу по lisp hypererspec, он предоставляет имена переменных для функций (см. Ниже) и многое другое.

(defun foo (bar) ...)

Когда вы начнете печатать (foo покажет, что foo хочет один аргумент с именем bar. Таким образом, вы можете легко «угадать», какие аргументы принимает функция Это особенно удобно для функций, которые не следуют соглашениям Lisp.

2
ответ дан 30 November 2019 в 16:19
поделиться

Мне трудно увидеть такие ошибки, когда разница в отступ - только один пробел. Делает со временем это станет легче?

Не для меня, по крайней мере .. Это частично зависит от конкретного шрифта xterm, который вы используете, но я считаю, что для эффективной работы мне нужен четырехблочный отступ (да, я использую это старый оригинальный шрифт xterm - виноват SunOS 4), и даже два проблематичны.

Я тоже использую выделение скобок и ключ «% » в vi .

] К сожалению, это не очень полезный ответ.

1
ответ дан 30 November 2019 в 16:19
поделиться

Легко было бы переместить курсор в начало каждого из условий cond и посмотреть, куда попадает закрывающая скобка.

2
ответ дан 30 November 2019 в 16:19
поделиться

В дополнение к ценным советам других, я бы сказал: "Используйте команды перемещения на основе структуры", backward-sexp, forward-sexp и тому подобное. Это позволит вам перемещаться по.

0
ответ дан 30 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: