Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лисп на басике 
:(
    Опции темы
wwall
Дата 13.10.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



В книге Хендерсона Функциональное програмирование, как-то обойден вопрос реализации функции cons. Как эту функцию реализовать на Бесике? Или может кто делал Lisp на бейсике?
PM MAIL   Вверх
FatalError
Дата 25.10.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 11.4.2006

Репутация: нет
Всего: 1



Вопрос про Бейсик сложный. Lisp - такой язык, что допускает очень крутые изменения самим юзером, подстройку под себя. Соответственно, конечным результатом вполне может быть нечто вроде Бейсика. Как реальный вариант - язык программирования Euphoria:

www.rapideuphoria.com

Разработчики чего-то не сознаются, что за основу взяли Lisp, но уши явно торчат: язык интерпретируемый, данные хранятся как атомы с последовательностями... Правда, ОЧЧЕНЬ сильно переделали, надо сказать.

Еще можно как пример взять LUA:

www.lua.org

Это не совсем Бейсик, это скриптовый язык, что-то вроде помеси Лиспа с Паскалем. От Лиспа много больше осталось, чем в Euphoria.

Реализация функции cons - тоже, понятно, вопрос не простой. Согласно книжке Турецкого (David S. Touretzky, COMMON LISP: A Gentle Introduction to Symbolic Computation, скачал ее где-то) функция list создает односвязный список ссылок на ячейки памяти, увязанных попарно, причем одна ссылка указывает на данные, а вторая - на следующий элемент списка (следующую пару). Для последнего элемента правильного списка вторая ссылка - nil. Так вот, если я правильно понял, функция cons создает неправильный список ("точечную пару"), в которой обе ссылки указывают на данные. Как сделать односвязный список на Паскале при использовании указателей и динамической памяти, описано в любой книжке про TurboPascal. По аналогии, наверно, можно сделать и в Бейсике.
PM MAIL   Вверх
wwall
Дата 25.10.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



Беда в том что нет динамической памати как таковой. Самому ее приходиться. 
Все реализации лиспа которые смотрел в той или иной степени используют указатели. На сях это просто, но изобразить его на 1С - непросто.  Учитывая что басик наиболее близкий к 1с язык - хотел посмотреть может кто и писал лисп на нем и какую модель представления памяти использовал
PM MAIL   Вверх
skyboy
Дата 25.10.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



wwall, фиг знает этот 1С с бейсиком, но на java можно ведь списки на объектах мутить.. 1С поддерживает работу с объектами? полиморфизм и наследование реализовано?
PM MAIL   Вверх
wwall
Дата 26.10.2006, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



нет. Нет этого. Память сейчас представляю в виде массива (хоть по длине и неограниченом). Проблема на самом деле при построении списка. никак не могу придумать
PM MAIL   Вверх
skyboy
Дата 26.10.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(wwall @  26.10.2006,  07:16 Найти цитируемый пост)
Проблема на самом деле при построении списка. никак не могу придумать 

то есть, сформировать эмуляцию списка - можешь, а сформирорвать  - нет? а в чем отличие?
а структуры(записи в паскале) есть в 1С? а тип variant?
PM MAIL   Вверх
FatalError
Дата 27.10.2006, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 11.4.2006

Репутация: нет
Всего: 1



Вот язык Lua, про который я в прошлом сообщении упомянул, возможно, будет полезен. Он создавался не как самостоятельный язык, а как вспомогательное средство, прикручиваемое к основной программе. Поэтому в нем прописаны крутые возможности взаимодействия с С (ну, поскольку вроде как по факту стандарт программирования). Можно вызывать Lua из С, можно вызывать из Lua функции, написанные на С, и много чего еще. Только Lua - это сильно видоизмененный Lisp, функций вроде cons и list там в явном виде нет, вместо них есть вполне удобный конструктор таблиц (списки в Lua называются таблицами, это практически полный аналог). И функциональность при работе с таблицами у Lua другая, чем у классического Лиспа. Там совсем другой подход реализован, по аналогии с массивами или со структурами в С. Будет ли такая штука взаимодействовать не с С, а с 1С, я не знаю. Если не пойдет, можно попытаться какой-нибудь буфер между ними сделать.
PM MAIL   Вверх
wwall
Дата 27.10.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



Все разобрался. Сам тупил. Спасибо skyboy подсказал. Спасибо всем. Скоро будет очередной трехколесный велосипед....  
PM MAIL   Вверх
skyboy
Дата 27.10.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



wwall, расскажи
PM MAIL   Вверх
wwall
Дата 27.10.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



Цитата(skyboy @  26.10.2006,  11:31 Найти цитируемый пост)
то есть, сформировать эмуляцию списка - можешь, а сформирорвать  - нет? 

Вот и все. Просто не мог понять очень долго что все лиспе - списки. Список - список, и эмуляция списка - тоже список... И нафиг не нужны указатели, достаточно индекса массива, и в принципе если головой подумать - массив сам тоже не нужен (заменил его на ТаблицуЗначений, есть такой объект в 1С). 
В добавок ко всему неправльно начал. Решил что проще переписать чужой код, а там ошибок - выше крыши... Как оказалось. Когда начал делать все сам - стало проще. По крайней мере на сегодня 
(setq x (cons 1 2))
(setq y (cons 3 4))
(setq z (cons x y))
(print z)
честно выводит ( ((1 . 2).(3 . 4)) . NIL)  

Зачем пишу этот интерпретатор - сам не знаю. Есть время. Есть желание. Может кому и потребуется. 
А заглядывая вперед, просто хочется иметь подомный инструмент под рукой. Хотя бы для прототипирования функций. Реализовать нормально тестирование на 1С - задача не для среднего ума. В отличие от лиспа smile

Когда закончу, выложу... 
Кстати, может его сделать по стандарту (точнее максимально близким к стандарту)? Будет ли выгода?

Это сообщение отредактировал(а) wwall - 27.10.2006, 14:01
PM MAIL   Вверх
skyboy
Дата 27.10.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(wwall @  27.10.2006,  12:59 Найти цитируемый пост)
Кстати, может его сделать по стандарту (точнее максимально близким к стандарту)? 

было бы отлично. 
Цитата(wwall @  27.10.2006,  12:59 Найти цитируемый пост)
Будет ли выгода?

не знаю. продавать будешь?
Цитата(wwall @  27.10.2006,  12:59 Найти цитируемый пост)
и в принципе если головой подумать - массив сам тоже не нужен 

не знал про таблицу. делал бы на индексах массива smile
Цитата(wwall @  27.10.2006,  12:59 Найти цитируемый пост)
Зачем пишу этот интерпретатор - сам не знаю. Есть время. Есть желание. Может кому и потребуется. 

Молодца! Конечно, потребуется... Я такое полгода назад под J2ME искал. не нашел. ищу время, чтоб начать изучать java - тогда тоже таким займусь smile
PM MAIL   Вверх
wwall
Дата 27.10.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



Цитата(skyboy @  27.10.2006,  14:14 Найти цитируемый пост)
Цитата(wwall @  27.10.2006,  12:59 Найти цитируемый пост)
не знаю. продавать будешь?


Нет.  Не того уровня велоспед. Когда научусь подменять интерпретатор 1С на лисп, так что бы вместо внутреннего языка использовался лисп - возможно. Но тут много технических трудностей. Да и не так много людей после басика смогут нормально ориентироваться в лиспе. Сам до сих пор не могу сказать что знаю его хотя бы на троечку, иногда бывает тупо смотрю в чужой код и тихо офигиваю - так тоже можно оказывается написать... А выгода имелось в виду что бы можно было уже готовый код на лиспе в этой поделке использовать... Мечта идиота - прикрутить CLOS...

В общем начинаю любить эти тра***тые скобочки. Но очень странною любовью. 
Кстати, тут в другом топике моя первая поделка по решению задачи на лиспе (перевозка с берега на берег), ради интереса решил переписать на 1С - выглядит убого... Но задачу решает smile

Это сообщение отредактировал(а) wwall - 27.10.2006, 14:38
PM MAIL   Вверх
svg
Дата 28.10.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 13.4.2005

Репутация: 14
Всего: 18



посмотрите на ECL, он специально создан для таких задач.
PM MAIL   Вверх
wwall
Дата 30.10.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.9.2006

Репутация: 3
Всего: 4



Посмотрю, спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.1274 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.