Рубрика «Лисп» - 2

Считается, что Питон — не очень пластичный язык. В нем нет макросов ни в одном из значений слова «макрос», нет красивых строковых миксинов, как в D, нельзя вводить свои операторы. Расширять язык можно только с помощью новых функций и классов. Фактически, программист на Питоне привязан к определенному синтаксису и, как следствие, определенному стилю решения проблем. «One way to do it». Таким образом, Питон располагает к написанию простого читаемого кода, что, естественно, очень даже хорошо. Но скучно.

К счастью, проявив некоторую фантазию, питоновский синтаксис тоже можно поломать. Например, можно сделать из Питона Лисп. Следующий пример — валидный питоновский код, который запускается интерпретатором без всякой дополнительной обработки и предсказуемо выводит в консоль "[24, 42]".

from fakelisp import *

# And now you can write Lisp
(BEGIN
	(SET (F) (LAMBDA (X)
		(IF (EQ (X) (1))
			(1)
			(MUL (X) (F (SUB (X) (1)))))))

	(SET (X) (QUOTE (F (4)) (42))))

# Back to Python any time
print "x: ", X

Читать полностью »

Потому что незачем. Во-первых, все уже написано и не раз. Во-вторых, штатный sort в общем случае работает не хуже. В-третьих, в моду входят задачки, требующие не столько умения пользоваться сортировкой, сколько обходиться вообще без нее. Взять, к примеру, вот эту с собеседования в Microsoft.

1. Анаграммы

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

Очевидное решение — отсортировать сами слова, потом отсортировать массив, пройтись по нему и посчитать количество слов с самоподобными соседями.

На CL это можно написать так:

(defvar *words* (list "thore" "ganamar" "notanagram" "anagram" "other"))

((lambda (words) 
    (loop for (a b c) in         
        (mapcar #'list words (append '("") words) (append '("" "") words))
        count (or (equal a b) (equal b c))))
    (sort (mapcar (lambda (one-word) (sort one-word #'char-lessp)) *words*) #'string-lessp))

Читать полностью »

в 20:54, , рубрики: Лисп, метки:

Прошло ровно два года с момента публикации на Хабре статьи про HomeLisp. Та статья, которую запостил мой сын, вызвала довольно бурное обсуждение и яростные нападки определенной части аудитории.
Что же произошло за эти два года с проектом?
Спешу «обрадовать» недоброжелателей: проект не заброшен и потихоньку развивается. 09.02.2012 разработчик выложил на сайт homelisp.ru последнюю версию пакета 1.13.4. Далее будет рассказано, чем она отличается от предыдущей (той, которуюе «клевали» два года назад).Самое важное отличие — переменные стали лексическими (представьте, разработчик знает, что такое лексическая переменная, замыкание,Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js
OSZAR »