Ярославль


Страницы: (4) [1] 2 3 ... Последняя »  ( Перейти к первому непрочитанному сообщению ) Ответ в темуСоздание новой темыСоздание опроса

ruby, постмодерн, хакеры, учим языки =)

dogma
Дата 5.08.2005 - 13:37
Цитировать сообщение




* * * * *
*****

Профиль
Группа: Пользователи
Сообщений: 1663
Пользователь №: 1848
Регистрация: 6.08.2004 - 06:08





* * * * *

Это сообщение отредактировал dogma - 27.09.2010 - 23:10
PM
Top
Nazer
Дата 5.08.2005 - 15:36
Цитировать сообщение




шворц
*****

Профиль
Группа: Пользователи
Сообщений: 4010
Пользователь №: 1484
Регистрация: 26.05.2004 - 18:58





Ни черта почти не понял, но Сила чувствуется... перечитаю еще раз biggrin.gif
PM
Top
dogma
Дата 5.08.2005 - 16:18
Цитировать сообщение




* * * * *
*****

Профиль
Группа: Пользователи
Сообщений: 1663
Пользователь №: 1848
Регистрация: 6.08.2004 - 06:08





* * * * *

Это сообщение отредактировал dogma - 27.09.2010 - 23:10
PM
Top
dogma
Дата 11.08.2005 - 11:36
Цитировать сообщение




* * * * *
*****

Профиль
Группа: Пользователи
Сообщений: 1663
Пользователь №: 1848
Регистрация: 6.08.2004 - 06:08





* * * * *

Это сообщение отредактировал dogma - 27.09.2010 - 23:10
PM
Top
Nazer
Дата 11.08.2005 - 11:46
Цитировать сообщение




шворц
*****

Профиль
Группа: Пользователи
Сообщений: 4010
Пользователь №: 1484
Регистрация: 26.05.2004 - 18:58





Дистрибутив скачал... но разбираться некогда. sad.gif
PM
Top
dogma
Дата 15.08.2005 - 15:02
Цитировать сообщение




* * * * *
*****

Профиль
Группа: Пользователи
Сообщений: 1663
Пользователь №: 1848
Регистрация: 6.08.2004 - 06:08





* * * * *

Это сообщение отредактировал dogma - 27.09.2010 - 23:10
PM
Top
Nazer
Дата 15.08.2005 - 19:41
Цитировать сообщение




шворц
*****

Профиль
Группа: Пользователи
Сообщений: 4010
Пользователь №: 1484
Регистрация: 26.05.2004 - 18:58





Эх... какие хакеры...sad.gif их племя постепенно ликвидируется как класс...
На дворе 21 век, гораздо важнее резюме...Вот и думай, то ли Ruby учить, то ли резюме составлять ... постмодерн,понимаешь...
PM
Top
incognito
Дата 16.08.2005 - 00:20
Цитировать сообщение




сам по себе
********

Профиль
Группа: Пользователи
Сообщений: 22445
Пользователь №: 4078
Регистрация: 20.07.2005 - 10:43





Nazer, без резюме - никаких Ruby! Ни-ни. cool.gif А то, не ровен час, выгонят ведь из 21 века.
А рассуждения dogma на форуме по языку Ruby мне понравились.
dogma, практически все умные книжки по этому языку (а их вообще мало) есть в ослике.
Есть и второе издание Programming Ruby от The Pragmatic Programmers (2005 года).
PMПисьмо на e-mail пользователю
Top
Nazer
Дата 16.08.2005 - 09:33
Цитировать сообщение




шворц
*****

Профиль
Группа: Пользователи
Сообщений: 4010
Пользователь №: 1484
Регистрация: 26.05.2004 - 18:58





incognito
не шутите так, пожалуйста. А то не ровен час лишите меня вообще желания жить в 21 веке smile.gif
PM
Top
incognito
Дата 31.08.2005 - 10:03
Цитировать сообщение




сам по себе
********

Профиль
Группа: Пользователи
Сообщений: 22445
Пользователь №: 4078
Регистрация: 20.07.2005 - 10:43





PMПисьмо на e-mail пользователю
Top
incognito
Дата 3.09.2005 - 05:50
Цитировать сообщение




сам по себе
********

Профиль
Группа: Пользователи
Сообщений: 22445
Пользователь №: 4078
Регистрация: 20.07.2005 - 10:43





PMПисьмо на e-mail пользователю
Top
Фома
Дата 17.01.2006 - 13:24
Цитировать сообщение




Unregistered












Как эмулировать пролог на руби.
Шикарные возможности метапрограммирования позволяют это. Поскольку не очень хочется усложнять текст лишними подробностями предикаты могут оформлятся классически, к примеру, nameOfPredicate(FunctionalVariable1, FunctionalVariable2), конечно, с поправкой на синтаксис ruby это может в конечом случае выглядеть так: is(X, "Чёрный Властелин"), вместо бытового привычного: X is "Чёрный Властелин", что в сущности, как и в прологе.

Но при эмуляции пролога одними предикатами не обойтись, хотелось бы и факты вводить таким же удобным образом. Поэтому чтобы отличать факт от предиката, можно использовать такое решение: predicate(nameOfPredicate [ |, predicate'sArgument]) и fact(nameOfFact [|, item]).

Скажем, fact('is', 'Nazer', 'Jedi Knight') означает - Nazer is Jedi Knight.
Как оформлять правила? Вот простенький предикат SomeBody - is Master Joda if SomeBody is little and green and feel Force будет таким:

Код

predicate(:isMasterJoda, SomeBody)
{
predicate(:isLittle, SomeBody) &&
predicate(:isGreen, SomeBody) &&
predicate(:feelForce, SomeBody) # чувствует силу
}
или
predicate(:isMasterJoda, SomeBody) do
predicate(:isLittle, SomeBody) &&
predicate(:isGreen, SomeBody) &&
predicate(:feelForce, SomeBody) #&& чувствует силу
#predicate(:isWeber, SomeBody)
end


Да, посылка каждого предиката описывается в блоке метода. Впрочем, это можно переделать и так, чтобы было меньше писанины. В этом случае(eliza) факты не используются, поэтому я выбрал
~позднее~Да, smile.gif после того как взялся за реализацию описанного - выяснил, что схема nameOfPredicate(...) всё же лучше смотрится, а вообще, надо матчасть учить... smile.gif ~позднее~

В сущности вся функциональность должна быть скрыта в классе - эмуляторе, однако, языки разные, и я не настолько псих Джедай обеспечен временем и знаком с ruby, чтобы писать компилятор-интерпретатор-чёрт-знает-что-ещё, поэтому надо придерживаться некоторых правил, например не смешивать в одной строке несколько методов, хоть и разделённых `;` и т.д. и т.п. Однако, в некоторых местах, по указанным причинам, код далеко не идеален.

Код

# Ну вот - это типа эмулятор, его можно один раз написать, сохранить в файле ~ PrologEmul.rb
# а затем включать (require "...") в каждый проект, где потребуется `prolog way`. Ну, а если
# подойти к этому делу серьёзно и с си, то можно создать неплохое расширение ruby...
# В этом простеньком примере и PrologEmul смешаны в одном файле.
class PrologEmul

FREE = 0
SETTING_FACTS = 1
SETTING_PREDICATES = 2
FINDING_GOAL = 3

attr_reader :emul_status, :facts, :predicates

def initialize
 @emul_status = FREE
 @facts = []
 @predicates = []
 @mem_stack = []
end

def method_missing(methOrFact, *args, &clause)
 case @emul_status
  when FREE
   #;
  when SETTING_FACTS
   #;
  when SETTING_PREDICATES
   @predicates << [methOrFact, args, clause]
  when FINDING_GOAL
   @predicates.each do |m,a,c|
     if m == methOrFact
     @mem_stack << [methOrFact, args]
     if c.call args
      return true
     else
     stored = @mem_stack.pop
     methOrFact = stored[0]
     args = stored[1]
     end
    end
   end
 end

 #puts "iHasta la vista Baby!"
 #exit
end

def goal(method, args)
 @emul_status = FINDING_GOAL
 @predicates.each do |m, a, c|
  if m == method
   if c.call args
    return true
   end
  end
      end
   false
   end

# здесь типа системные прологовские предикаты
def recognize(msg, *pattern)
 bool = false
 pattern.each do |item|
  find =  msg =~  Regexp.new(item, Regexp::IGNORECASE)
  bool = bool || !find.nil?
 end
 bool
end

def write(msg)
 print msg
 true
end

def read(msg)
 msg = gets
 true
end

def setFacts()
 @emul_status = SETTING_FACTS
 true
end

def setPredicates()
 @emul_status = SETTING_PREDICATES
 true
end

end

#=============================================================#
#
#          Пример использования эмулятора.
# Проф. Weizenbaum'. в 60 - х годах на Lisp'е написал программу Eliza,
# позже был разработан аналог на Prolog'е. Здесь - схема того
# как это может выглядеть. И хотя настоящая Eliza от 240
# строк (на Lisp!). Наш доктор лечит не хуже...:)
#
# Говорят, при испытании Элизы многие студенты действительно
# верили, что за стенкой ответ им печатает опытный и
# внимательный психотерапевт, и готовы были часами сидеть
# у терминала, делясь сокровенным. Такой успех был достигнут
# за счёт использования 'техники зеркала' - когда врач не
# столь беседует с пациентом, сколько внимательно слушает,
# выделяя в речи ключевые слова и на основе их конструируя
# дальнешие фразы (вполне, впрочем, в духе Фрейдизма
# или другой школы) для построения ассоциативного ряда...
# Подробности - в соседнем разделе у психологов,
# там вам м0зги промоют :)
#
#=============================================================#

msg = ""
eliza = PrologEmul.new

# вводим эмулятор в состояние усвоения новых предикатов (и правил сразу)
# по сути, пишем программу на прологе. Её выполнение будет запущено методом - goal.
eliza.setPredicates()

eliza.answer(msg) do
eliza.recognize(msg, "feel", "sensat") &&
eliza.write("\nHow long do You feel it?\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "mother", "father")  &&
eliza.write("\nPlease, explain me about Your family...\n")
end

eliza.answer(msg) do
eliza.recognize( msg, "love") &&
eliza.write("\nAre you afraid of emotions?\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "feel", "sensat") &&
eliza.write("\nHow long do You feel it?\n")
end

eliza.answer(msg) do
eliza.recognize( msg, "hell", "fuck", "donkyfucker") &&
eliza.write("\nPlease, don't talk these words.\n")
end

eliza.answer(msg) do
eliza.recognize( msg, "sex", "childhood") &&
eliza.write("\nObviously, this is important moment. Speak more detaily, please\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "yes", "no") &&
eliza.write("\nYou should be more exact.\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "fury", "wrath") &&
eliza.write("\nAnd what do You feel now?\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "yes", "no") &&
eliza.write("\nYou should be more exact.\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "You are", "You're") &&
eliza.write("\nСам - дурак.\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "want", "wish", "wanna") &&
eliza.write("\nWhen did You feel it for the first time?.\n")
end

eliza.answer(msg) do
eliza.recognize(msg, "what") &&
eliza.write("\nYou should know...\n")
end

eliza.answer(msg) do
eliza.write("\nYou want speak about it, don't You?\n")
end

eliza.helpme() do
eliza.answer(msg)
end
# дипломированный специалист готов принимать пациентов... :)

print "Good evening. I'm Your distant psyhoanalytic. What about do you want speak?\n"
print "You may uncover me all Your troubles and doubts...\n"
print "> "
while true
exit if msg =~ /DAMNED TURING!!!/
msg = gets
eliza.goal(:helpme, msg)
print "\n> "
end


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

Поскольку, как ни странно, в RAA не зарегистрирован ни один проект придающий Ruby функциональность пролога, а значит возможность легко и декларативно - изящно решать задачи от "The farmer/wolf/goat/cabbage problem", "How to place N queens on a chessboard", "Analyzing the grammar of a sentence." , Suggesting where to break words" (первый шаг для форматирования текстов под караоке ), до экспертных систем и баз знаний.

Поскольку семантический веб грядёт, а ruby (пока лишь он - в массовом применении) словно создан для него <link google "Deep Integration of Ruby with Semantic Web Ontologies" Obie Fernandez>.
Постольку - дело это интересное, а в перспективе и прибыльное.

Вот хорошие блоги http://www.jroller.com/comments/obie/Weblog/ (http://feeds.feedburner.com/obie) http://twoday.tuwien.ac.at/IMHO/index.rdf.

А это пример работы скрипта.

Цитата

"Good evening. I'm Your distant psyhoanalytic. What about do you want speak?"
"You may uncover me all Your troubles and doubts..."
> I wanna sex with Anna Kurnikova
Obviously, this is important moment. Speak more detaily, please
> Ooh She'll play tennis, and I ...
You want speak about it, don't You?
> yes
You should be more exact.
> Of course!!!
You want speak about it, don't You?
> yyyes...
You should be more exact.
> ok, I want be raped by hers and her racket, вожделею...
When did You feel it for the first time?.
> In childhood, when she had won in quater final Of Wimbldon.
Obviously, this is important moment. Speak more detaily, please
> fuck off doctor!! It's my private life!!!
Please, don't talk these words.
> What words?!
You should know...
> You are perversionist doctor It's my life!!!
Tрь - фєЁръ.
\-- затёрто цензурой (Здесь ИИ smile.gif смачно выругался smile.gif)


Заинтересовавшимся:
рещить задачку "Король думает, что королева думает, что она не в своём уме. В своём ли уме король?"
Полагаю, функциональность EmulProlog надо расширить связыванием переменных и предикатом fail. Затем просто описать проблему, тогда и станет понятно - в своём ли уме.

Крутым перцам: http://www.cyc.com http://www.e-cyc.com или open cyc на sourceforge.
Используется там CycL - язык такой, работает с предикатами второго порядка! Это вам не мыло в тазике гонять и не с клаузами Хорна баловаца smile.gif

Это сообщение отредактировал Фома - 27.01.2006 - 14:23
Top
Nazer
Дата 17.01.2006 - 21:33
Цитировать сообщение




шворц
*****

Профиль
Группа: Пользователи
Сообщений: 4010
Пользователь №: 1484
Регистрация: 26.05.2004 - 18:58





Молодец! Настоящий джедай! smile.gif

А для мастеров силы - задача: проэмулировать на ruby секс-чат. Это прибыльно и модно.
user posted image
PM
Top
Фома
Дата 27.01.2006 - 14:24
Цитировать сообщение




Unregistered












2Nazer
Мерси, мерси, очень приятно, я старался. smile.gif

В следующий раз напишу про то, как правильно выбирать виброфалоиммитатор, и как в этом может помочь знание Pascal'я !!!
(специально для Weber wink.gif)

А этот пост - он потому, что пришла мысль.
Вот как ещё можно развлечься и денежку заработать?
Очередной рецепт.

Он будет интересен web мастерам, думаю.
Представьте ресурс quote.com
Он предлагает следующий сервис.
Есть пользователь, у него есть огромный объём текстовой информации,
он хочет использовать отрывки - части на цитаты кому - нибудь, или для себя - на заметку. Пользователь с помощью сервиса может "помечать" эти отрывки
с помощью маркеров - тегов, или граффити - вроде галочек, которые некоторые люди оставляют на полях книг. Или вспомните, как мы обводим маркером понравившиеся объявления в газетах. В итоге - при цитировании пользователь не просматривает весь документ, а переходит прямо к цитированному месту с тремя жирными восклицательными знаками или комментарием типа "я нашёл воистину интересное и простое доказательство этому факту, но оно не умещается на полях этой книги" smile.gif - по выбору пользователя. Конечно, это можно оформлять в духе del.icio.us, но думаю
здесь акцент не в массовости, а в персональном удобстве.
В сущности много не требуется и технически, в первом приближении выглядит так - сервер как посредник, head запросы - на случай редактирования цитирумого документа, сss - типа дополнительные слои, немного динамики на клиенте и всё. Ах да + динамические новости и всяких там rss, блогов своё решение.
Чёртов постмодерн!!! Конечно эта мысль не оригинальна - она разумное продолжение идей типа del.icio.us, впрочем визуально более интересное.
В конце концов и грушёвую функциональность можно использовать.


К примеру, захотел я использовать в подписи цитату Вейнингера( - Ницше?(по форме судя))
~"У добрых людей - этика плоская" - а вот правильное содержание - не помню. Будь у меня коллекция цитат (псевдо - ссылок - обычных URI, со смещениями в документах их представляющих) или смог бы я искать по коллекциям других пользователей - не было б такого рода затруднений.
То же и с Ферма. Не пришлось бы просматривать все труды авторов.
Может можно придумать ещё какие удобства преимущества для такого глубокого проникновения в документы, не знаю.
Знаю, что этот проект мне кажется интереснее, чем очередная cms.



Top
incognito
Дата 27.01.2006 - 19:18
Цитировать сообщение




сам по себе
********

Профиль
Группа: Пользователи
Сообщений: 22445
Пользователь №: 4078
Регистрация: 20.07.2005 - 10:43





Фома
Есть такое уже. Но мысли в верном направлении.

Цитата
Знаю, что этот проект мне кажется интереснее, чем очередная cms.

Вот с этим не могу не согласиться. Ту бы энергию - да в разумное русло! cool.gif
PMПисьмо на e-mail пользователю
Top

Опции темы Страницы: (4) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса

 



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



Яндекс.Метрика

Правила Ярпортала (включая политику обработки персональных данных)

Все вопросы: yaroslavl@bk.ru