?

Log in

Жить не можем без проблем! [entries|archive|friends|userinfo]
Жить не можем без проблем!

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

определение контуров предметов на видео [Nov. 18th, 2014|04:31 pm]
Жить не можем без проблем!

Vitali Falileev
Я дико извиняюсь, могу ошибаться, но три-пять лет назад в ЖЖке пробегал пост от лисповода, в котором товарищ демонстрировал как можно просто без танцев с бубном определить контуры предметов на видео (использовалось послайдовое сравнение на примере работающего вентилятора)

Никак не могу нагуглить пост. Кто поможет?)
link3 comments|post comment

парочка вопросов [Apr. 7th, 2012|12:39 pm]
Жить не можем без проблем!
l10n_be
В процессе изучения Лиспа натыкаюсь на некоторые моменты, с которыми пока не могу разобраться.

1) sbcl & nunion

Введём такой простой код в repl clisp, gcl и sbcl
(setf a '(1 2 3))
(setf b '(4 5 6))
(nunion a b)
; clisp, gcl => '(1 2 3 4 5 6)
; sbcl => '(3 2 1 4 5 6)

А теперь узнаем значение a: в clisp и gcl получим '(1 2 3 4 5 6), а в sbcl -- '(1 4 5 6).

Вопрос: кто неправ? У clisp и gcl результат логичный и ожидаемый, у sbcl -- не пойми что. Если поведение sbcl правильное, то каков смысл в существовании nunion?

HyperSpec ситуацию не прояснил.

2) gcl

Возьмём такую простую программку для проверки:

(defun test (a)
(print a))

(test 6)

$ gcl -f test.lisp

Error: The variable A is unbound.
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by SYSTEM::SET-UP-TOP-LEVEL.
Backtrace: PRINT

Если в начало добавить (si::use-fast-links nil), то запускается. Чего он хочет?
link8 comments|post comment

Безусловный интерпретатор LISP на LISP [Feb. 27th, 2012|10:30 am]
Жить не можем без проблем!

codedot
Здравствуйте!

У меня возникла задача, которую можно сформулировать целиком в терминах языка LISP.

Требуется найти такие функции encode, decode и reduce, что

(decode (reduce … (reduce (encode (quote expr))) … ))

для некоторого конечного количества применений reduce является результатом интерпретации выражения expr, в котором можно ограничиться переменными и lambda одного аргумента, причем возвращаемое значение encode — это рекурсивное S-выражение memory с циклами без атомов, а функция reduce должна иметь следующий вид:

(lambda (memory)
	(set (c[ad]*r memory) (c[ad]*r memory))
	(set (c[ad]*r memory) (c[ad]*r memory))

	…

	(set (c[ad]*r memory) (c[ad]*r memory))

	memory
)

Был бы признателен за помощь в решении данной задачи.

Заранее спасибо.
linkpost comment

group [Feb. 17th, 2012|09:22 am]
Жить не можем без проблем!

incogn1too
Доброго времени суток. Нужна была функция, которая группирует список группами по несколько элементов. Получился не совсем красивый велосипед. Никто из сообщества не поделиться более элегантным решением?

(define (group lst n)
  (define (group2 n2 lst2 group grouped)
    (cond ((<= (length lst2) n2) (append grouped (list lst2)))
             ((= n2 0) (group2 n lst2 '() (append grouped (list (reverse group)))))
             (else (group2 (- n2 1) (mcdr lst2) (cons (car lst2) group) grouped))))
  (group2 n lst '() '() ))

[UPD] Спасибо всем за ответы. В комментариях подали идею сделать более функциональную реализацию. Получилось что-то такое:

(define (split n lst)
  (map (lambda(x)(take n x))
    (append (list lst) (reverse (cdr
      (unfold (lambda(x)(drop n x)) lst empty?) )))))

(define (unfold func init pred)
  (define (unfold2 func init pred res)
    (let ((x (func init)))
      (if (pred init)
      res
  (unfold2 func x pred (cons x res) ))))
  (unfold2 func init pred '()))

 (define (drop n lst)
  (if (or (= n 0) (empty? lst))
    lst
    (drop (- n 1) (cdr lst))))

(define (take n lst)
  (define (take2 lst n res)
    (if (or (empty? lst) (= n 0)) (reverse res)
      (take2 (cdr lst) (- n 1) (cons (car lst) res))))
      (take2 lst n '()))
link8 comments|post comment

скобки в Scheme [Feb. 13th, 2012|11:39 am]
Жить не можем без проблем!

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

(define def1
(let ( (i 0) )
(lambda () (set! i (+ i 1)) i)))

(define (def2)
(let ( (i 0) )
(lambda () (set! i (+ i 1)) i)))

Почему одна из функций увеличивает внутреннюю переменную, а другая все время возвращает один и тот же результат. Я понимаю, что дело в скобках, но не совсем ясно как это работает.
link6 comments|post comment

вопрос новичка [Mar. 2nd, 2011|02:52 pm]
Жить не можем без проблем!
renoir1
В чём принципиальное отличие операторов set, setq и setf?
Как я понял, set связывает имя и значение, setq связывает атом и значение, setf связывает ячейку памяти и значение. Не могли бы вы объяснить мне на каком-нибудь ярком примере разницу в работе и применении на практике этих операторов?
link15 comments|post comment

Точность вычислений - числа с плавающей точкой. Экспонента считается неверно? [Jan. 23rd, 2011|01:29 am]
Жить не можем без проблем!

kit1980ukr
Нашел баг в библиотеке alexandria: субфакториалы (http://en.wikipedia.org/wiki/Subfactorial) читаются неверно, начиная с 11.

Формула там верная - (floor (/ (+ 1 (factorial n)) (exp 1)))

Но, например, для 11 получается (/ 39916801 2.7182817) => 1.4684571e7, после округления получаем 14684571 вместо 14684570.

Ладно, точность (exp 1) маленькая, пишем явно
(/ 39916801 2.7182818284590452353602874713526624977572470936999595749669), но все равно получаем 1.4684571e7

Python, например, считает точнее:
>>> 39916801 / 2.7182818284590452353602874713526624977572470936999595749669
14684570.445231671

Как это побороть (считать с большей точностью)?

Компилятор - SBCL

P.S. Обнаружил, что экспонента считается неверно.
CL-USER> (exp 1)
2.7182817

А более точное значение - 2.7182818284590452353602874713526624977572470936999595749669..., т.е.должно округляться до 2.7182818

P.P.S
Уже подсказали, что надо писать (exp 1d0), тогда проблемы с точностью решаются.
В общем-то, это и будет фиксом для alexandria:subfactorial, но только для чисел до 18 включительно. Другая формула нужна.
link2 comments|post comment

Почему LISP? [Jan. 13th, 2011|02:05 pm]
Жить не можем без проблем!

aralex

Как говорил Ворошилов, вопрос к Знатокам (к знатокам LISP-а в данном случае)! Почему таки LISP? Или, если конкретнее, вопроса три:

  1. Для каких именно задач LISP подходит больше, чем другие языки?
  2. За счёт чего для них он подходит больше?
  3. В чём именно выражается его преимущество?

Если не в лом, приведите, pls, коротенькие иллюстрации на LISP-е (или ссылочку на них). Заранее благодарен!

Исходно данный пост был размещён в сообществе ru_programming, но там Знатоков, способных ответить внятно и по сути, увы, не нашлось :(

link267 comments|post comment

Code Review Request: Studious Student [Jan. 11th, 2011|04:46 pm]
Жить не можем без проблем!

kit1980ukr
Решил вернуться к изучению Common Lisp, в рамках чего порешал задачки на квалификации Facebook Hacker Cup.

Под катом мое решение задачи "Studious Student".
Прошу посмотреть код и подсказать, что можно сделать лучше (быстрее, проще).
Read more...Collapse )
link16 comments|post comment

Сводный псто. [Dec. 7th, 2010|11:30 am]
Жить не можем без проблем!

jamhed
В помощь выбирающему языг:

задан список файлов в командной строке, надо вывести последовательно
1-ю строку из 1-го файла
1-ю строку из 2-го файла
1-ю строку из 3-го файла
...
1-ю строку из N-го файла
2-ю строку из 1-го файла
2-ю строку из 2-го файла
2-ю строку из 3-го файла
...
2-ю строку из N-го файла

ну и так далее, причем количество строк в файлах разное

Haskell, Lisp, OCaml, Java, Perl, Python, Ruby, C#, C++Collapse )
link18 comments|post comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]