Temat: Funkcie

Witam
potrzebuje pomocy w przekazaniu operacji matematycznej podanej przez użytkownika do funkcji
np coś takiego ze użytkownik wprowadza funkcje x+2 i całość zostaje przekazana do funkcji np operacja(f) w ciele funkcji operacja za x jest podstawiana zmienna.
Mam nadzieje ze w miarę logicznie to wytłumaczyłem, z góry dziękuje za pomoc

konto usunięte

Temat: Funkcie

hej,
Poszukaj o lambdach w javie 8.

konto usunięte

Temat: Funkcie

Java Scripting Api?
Łukasz D.

Łukasz D. Software Developer,
DevOps Fan

Temat: Funkcie

Najprościej skorzystać z groovy'ego. Ściągasz bibliotekę jako binary release z http://groovy.codehaus.org/Download. Rozpakowujesz i dodajesz do classpath swojego projektu embeddable\groovy-all-<wersja>.jar. Następnie w swojej metodzie:

operacja(String funkcja,Object x)

wywołujesz poniższy kod:

Object result = groovy.util.Eval.x(x, funkcja);


Oczywiście, trzeba mieć na uwadze potencjalne niebezpieczeństwo wywołania dowolnego kodu, choćby "System.exit()", ale zgaduję, że to nie jest w Twoim przypadku problemem.

Temat: Funkcie

Łukasz D.:
Najprościej skorzystać z groovy'ego.
Off Topic: osobiście użyłbym w takim wypadku Scali i "Parser Combinators".
Z jej użyciem można łatwo sparsować 'wsad' oraz wyeliminować niebezpieczeństwa, które miałeś na myśli.
Wynikowy bytecode będzie kompatybilny z JVM.Marcin Kubala edytował(a) ten post dnia 14.01.13 o godzinie 19:24

konto usunięte

Temat: Funkcie

No chyba zartujesz ... Robic taki overhead?
A "niebezpieczenstwa" eliminuje zwykly security manager (sandbox).
Łukasz D.:
Najprościej skorzystać z groovy'ego.
Off Topic: osobiście użyłbym w takim wypadku Scali i "Parser Combinators".
Z jej użyciem można łatwo sparsować 'wsad' oraz wyeliminować niebezpieczeństwa, które miałeś na myśli.
Wynikowy bytecode będzie kompatybilny z JVM.Łukasz Grabski edytował(a) ten post dnia 14.01.13 o godzinie 20:15

Temat: Funkcie

Masz na myśli samą ideę tworzenia parsera, czy użycie akurat takiej nie innej technologii (Scala i scala.util.parsing.combinator.*)?

konto usunięte

Temat: Funkcie

Myslalem raczej o samej scali. Nie jest to zbyt ciezkie? I czy wtedy pisac cala aplikacje w scali? Czy tez moze tylko obsluge rownan?

A jezeli juz mowimy o parserach, to wiadomo, rozwiazan jest masa. Jak cos to tu taka pogladowa lista:

http://java-source.net/open-source/parser-generatorsŁukasz Grabski edytował(a) ten post dnia 14.01.13 o godzinie 22:01

Temat: Funkcie

Szczerze mówiąc gdybym miał dziś napisać parser, czy wewnętrzny DSL to pomimo iż jak na razie zdecydowanie pewniej poruszam się w Javie postawiłbym na Scalę.

Usprawnienia samego języka takie jak np. pattern matching oraz case classes bardzo ułatwiają np. analizowanie drzew wyrażeń, a parser combinators pozwalają w zależności od potrzeb układać parser z gotowych klocków lub tworzyć wszystko od zera.
Hipotetycznie zakładając, że w Twoim teamie nikt nie zna Scali i dla jednego modułu projektu trzeba by się wdrażać w nową technologię, to faktycznie może być overhead.

Pytanie tylko co będzie bardziej rentowne w przypadku kiedy konwencjonalne, czysto Javowe rozwiązania okażą się niewystarczające (nie wiem jaki % przypadków) - inwestycja w poznanie ANTLR/JavaCC, które ma ogromne możliwości ale tylko jedno zastosowanie czy poznanie Scali?

Jeśli natomiast chodzi ci o ciężkość w kontekście wydajności, to trudno mi się tutaj wypowiedzieć - nie widziałem zestawienia w stylu Java na regexp vs. ANTLR vs. Scala na Parser Combinators.

EDIT:
Co do pisania całej aplikacji w Scali - niekoniecznie. Kod napisany w Scali można wywoływać z poziomu Javy (jednak z pewnymi ograniczeniami) -> http://www.codecommit.com/blog/java/interop-between-ja...Marcin Kubala edytował(a) ten post dnia 14.01.13 o godzinie 22:48
Łukasz D.

Łukasz D. Software Developer,
DevOps Fan

Temat: Funkcie

Łukasz Grabski:
No chyba zartujesz ... Robic taki overhead?
A "niebezpieczenstwa" eliminuje zwykly security manager (sandbox).
Łukasz D.:
Najprościej skorzystać z groovy'ego.
Off Topic: osobiście użyłbym w takim wypadku Scali i "Parser Combinators".
Z jej użyciem można łatwo sparsować 'wsad' oraz wyeliminować niebezpieczeństwa, które miałeś na myśli.
Wynikowy bytecode będzie kompatybilny z JVM.

Nie wiadomo jakie są wymagania projektu, może takie rozwiązanie wystarczy, a ten "overhead" nie jest problemem. Podałem praktycznie całe działające rozwiązanie w pierwszym poście. Czasami http://pl.wikipedia.org/wiki/Worse_is_Better. A security manager nie rozwiązuje wszystkiego, jest toporny i mało elastyczny. Oprócz niego warto skorzystać z transformacji AST w Groovym, jest nawet fajny przykład w jego kodzie źródłowym: http://svn.codehaus.org/groovy/trunk/groovy/groovy-cor....
Rafał Gawlik

Rafał Gawlik Android & Python
developer

Temat: Funkcie

Coś niejasno wytłumaczony problem.

Generalnie można użyć JavaScript
(tylko znajdź odpowiednie funkcje)
np
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String rozwiazanie = engine.eval(rownanie).toString();

Po drugie jest w matmie fajny trik: interpolacja.
http://pl.wikipedia.org/wiki/Interpolacja_(matematyka)

Temat: Funkcie

<odgrzanie kotleta>
Łukasz Grabski:
Myslalem raczej o samej scali. Nie jest to zbyt ciezkie? I czy wtedy pisac cala aplikacje w scali? Czy tez moze tylko obsluge rownan?
Temat zainspirował mnie do podjęcia wyzwania stworzenia mini-języka programowania z użyciem zaproponowanego rozwiązanie (Scala i jej parser combinators).
Postanowiłem podzielić się wiedzą zdobytą w trakcie tego małego 'proof of concept' w formie tutorialo-podobnej -> https://marcinkubala.wordpress.com/2013/01/27/piszemy-w...

</odgrzanie kotleta>Marcin Kubala edytował(a) ten post dnia 12.02.13 o godzinie 22:08
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: Funkcie

ja bym polecił jakąś bibliotekę z expression language np.

http://commons.apache.org/jexl/



Wyślij zaproszenie do