LISP (есть любители этого языка на форуме?)

Любые разговоры которые хоть как-то связаны с тематикой форума

Модератор: Модераторы разделов

Аватара пользователя
Фантом
Сообщения: 461
ОС: openSUSE

Re: LISP

Сообщение Фантом »

antares0 писал(а):
10.01.2012 20:05
А вы уверены?
Maple насколко я помню принципиально писалась на C, что бы работать даже на персоналках.
Mathematica - по слухам в первых версиях была, но потом все равно переписали.

Они обе (а также Maxima) - потомки одной и той же системы MACSYMA, и начинались фактически с одного и того же кода. Maple потом действительно была переписана на C (а Mathematica, кажется, на C++, хотя и не уверен), но в обоих случаях это буквальная иллюстрация "десятого правила Гринспена" - та же Maple "написана на C" в том смысле, что в нее встроен собственный интерпретатор LISP, написанный на C, обеспечивающий выполнение основной содержательной части кода. :D
Спасибо сказали:
antares0
Сообщения: 92

Re: LISP

Сообщение antares0 »

Ссылками не поделитесь?
Maple вобще на B изначально была.
Спасибо сказали:
Аватара пользователя
Фантом
Сообщения: 461
ОС: openSUSE

Re: LISP

Сообщение Фантом »

antares0 писал(а):
10.01.2012 21:31
Ссылками не поделитесь?

Нет, не берусь, это все-таки только по памяти.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: LISP

Сообщение sash-kan »

antares0 писал(а):
10.01.2012 21:31
Ссылками не поделитесь?
wikipedia://Maple (software)#cite_note-6
Interview with Gaston Gonnet, co-creator of Maple, SIAM History of Numerical Analysis and Computing, March 16, 2005 →
http://history.siam.org/pdfs2/Gonnet_final.pdf
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: LISP

Сообщение Stauffenberg »

А кто может написать программу/скрипт на Common Lisp, которая просто открывает файл, считывает оттуда строки и складывает их (одна строка - любое число). Как вы понимаете, использование функционального подхода программирования, а так же других вкусных особенностей Lisp приветствуется ;)
Свой скрипт я переписывал уже раз пять и продолжаю над ним работать.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
antares0
Сообщения: 92

Re: LISP

Сообщение antares0 »

Stauffenberg писал(а):
13.01.2012 14:54
а так же других вкусных особенностей Lisp приветствуется ;)

Код: Выделить всё

;Пишем файл
(with-open-file (file "number-file" :direction :output)
  (loop repeat 10
        do (format file "~S~%" (random 100))))

Код: Выделить всё

;считаем с помощью стандартного LOOP
(with-open-file (file "number-file" :direction :input)
  (loop :for n = (with-standard-io-syntax
                 (let ((*read-eval* nil))
                      (read-preserving-whitespace file nil nil)
        :while n :sum n))))

Код: Выделить всё

;C помощью православно-скобочного, продвинутого и модного:) но не "встандартного" ITERATE
(defpackage :sum-number-files
  (:use :cl :iterate))
(in-package :sum-number-files)

(flet
  ((safe-read (&rest rest)
              (with-standard-io-syntax
               (let ((*read-eval* nil))
                    (apply #'read-preserving-whitespace rest)))))
   (iter
    (for n in-file "number-file" using #'safe-read)
    (sum n)))
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: LISP

Сообщение Stauffenberg »

Интересный код. Есть о чем задуматься.

Вот мой, не содержащий ничего интересного:

Код: Выделить всё

(defvar i 0)
(defvar d (elt (ext:argv) 8))

(let ((in (open d :if-does-not-exist nil)))
 (when in
  (loop for line = (read-line in nil)
    while line do (setf i (+ i (parse-integer line))))
  (close in)))

(print i)


И вот несколько другая идея:

Код: Выделить всё

(defparameter *filename* "numbers2.txt")

(defun f (strm i) (
  let ((line (read-line strm nil)))
    (if (null line) i
      (f strm (+ i (parse-integer line))))))
(compile 'f)
(with-open-file (strm *filename*)
  (print (f strm 0)))


Второй скрипт работает быстрее за счет компиляции, но все равно, мне не нравится :)
Кстати, они оба падают (переполнение) если им скормить большие файлы, и я понятия не имею как увеличить размер буфера (типов данных-то тут нет).
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: LISP

Сообщение Stauffenberg »

antares0

Может Вы сможете подсказать как в clisp включить функцию указания номера строки, при выводе ошибки? Очень не удобно отлавливать ошибку, когда не знаешь где именно она произошла.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
antares0
Сообщения: 92

Re: LISP

Сообщение antares0 »

Я практически не пользуюсь clisp-ом, поэтому каких-то деталей могу и не знать. Но насколько я понимаю общую картину, поскольку CLISP входит в подмножество реализаций без source-location то никак, исключая самостоятельное дополнение его в этом плане.

С другой стороны давая непрошеные советы, отмечу если это так сильно понадобилось для отладки собственого кода, вы делаете что-то сильно не так.
Спасибо сказали:
antares0
Сообщения: 92

Re: LISP

Сообщение antares0 »

Stauffenberg писал(а):
16.01.2012 18:50
Кстати, они оба падают (переполнение) если им скормить большие файлы,

Большой это какой? SBCL пережевывает по нескольку гб. на 128 мб. ОЗУ правда не очень быстро.
и я понятия не имею как увеличить размер буфера (типов данных-то тут нет).

Каких буферов?
Типы есть, но как их использовать на совести компилятора.
Спасибо сказали:
Аватара пользователя
minoru-kun
Сообщения: 621
ОС: Debian GNU/Linux

Re: LISP

Сообщение minoru-kun »

antares0 писал(а):
25.01.2012 21:04
С другой стороны давая непрошеные советы, отмечу если это так сильно понадобилось для отладки собственого кода, вы делаете что-то сильно не так.

Сурово o_O
Спасибо сказали: