Показаны сообщения с ярлыком lisp. Показать все сообщения
Показаны сообщения с ярлыком lisp. Показать все сообщения

четверг, 11 февраля 2010 г.

Emacs: находки дня

  1. В емаксе можно держать несколько независимых буферов info. Ура! M-n - клонирует текущий инфо-буфер. C-n C-h i - открывает буфер *info*<n>
  2. можно сохранить текущую раскладку window'ов по fram'у и буферов по window'ам в регистр: C-x r w R, а потом соответственно ее загрузить оттуда: C-x r j R. Осталось только разобраться: "можно ли и как?" - сохранять это в bookmark'и
P.S. аа!! наглое дублирование лиспо-кода:
(defun bookmark-make-record-default (&optional point-only)
"Return the record describing the location of a new bookmark.
Must be at the correct position in the buffer in which the bookmark is
being set.
If POINT-ONLY is non-nil, then only return the subset of the
record that pertains to the location within the buffer."

`(,@(unless point-only `((filename . ,(bookmark-buffer-file-name))))
(front-context-string
. ,(if (>= (- (point-max) (point)) bookmark-search-size)
(buffer-substring-no-properties
(point)
(+ (point) bookmark-search-size))
nil))
(rear-context-string
. ,(if (>= (- (point) (point-min)) bookmark-search-size)
(buffer-substring-no-properties
(point)
(- (point) bookmark-search-size))
nil))
(position . ,(point))))

пятница, 31 июля 2009 г.

lisp - это магия

текст заметки

я сначала ее написал, а потом уже подумал, что стоит отдельный блог под кодинг выделить.. вотЪ

суббота, 25 июля 2009 г.

sicp ex 2.13

немного по короче, чем везде, где я видел:
если интервалы заданы как
(make-center-percent c1 (* p1 100))
(make-center-percent c2 (* p2 100))

, то произведение
[c1(1-p1);c1(1+p1)]*[c2(1-p2);c2(1+p2)] =
[c1*c2*(1-(p1+p2)+p1*p2);c1*c2*(1+(p1+p2)+p1*p2)] ~=
[c1*c2*(1-(p1+p2));c1*c2*(1+(p1+p2))]

Т.о. p* ~= p1+p2, а c* = c1*c2.
Где результат равен
(make-center-percent c* (* p* 100))

sicp ex 1.19

sicp - Structure and Organisation of Computer Programms
буду писать здесь всякие замечания по поводу заданий из этой книги

(define (fib3 n)
(define (iter a b p q count)
(cond ((= count 0) b)
((even? count)
(iter a
b
(+ (square p) (square q))
(* q (+ (* 2 p) q))
(/ count 2)))
(else (iter (+ (* b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
q
(- count 1)))))
(iter 1 0 0 1 n))

интересно, что время вычисления этим способом по сравнению с итеративным, хоть и меньше раз в 15, но растет с той же скоростью. Т.е. на самом деле логарифмическое время получить не удалось(оно скорее квадратичное)
мои результаты:
n  , итеративный процесс , "логарифмический", отношение
1e5, 1.559 , .080 , 19.5
1e6, 129.96 , 8.39 , 16.1
2e6, 508.92 , 35.23 , 14.5

для подсчетов использовал (runtime)

P.S. это на MIT Scheme