Buduję internetowy język programowania częściowo zainspirowany przez Prolog i Haskell (nie śmiejcie się).W jaki sposób system taki jak Wolfram Alpha lub Mathematica rozwiązuje równania?
Ma już sporo funkcjonalności, możesz sprawdzić prototyp pod numerem http://www.lastcalc.com/. Możesz zobaczyć źródło here i przeczytać o architekturze here. Pamiętaj, że to prototyp.
Obecnie LastCalc nie może uprościć wyrażeń ani rozwiązać równań. Zamiast trudnego kodowania tego w Javie, chciałbym rozszerzyć podstawowy język, tak aby można go było rozszerzyć, aby robić te rzeczy, używając tylko samego języka (tak jak w Prologu). W przeciwieństwie do Prologu, LastCalc ma mocniejszy algorytm wyszukiwania, Prolog jest "pierwszym wyszukiwaniem w głębi z wstecznym śledzeniem", LastCalc obecnie używa heurystycznego najlepszego pierwszego wyszukiwania.
Zanim przejdziemy do tego tematu, chcę lepiej zrozumieć, jak inne systemy rozwiązują ten problem, w szczególności Mathematica/Wolfram Alpha.
Zakładam, że pomysł, przynajmniej w ogólnym przypadku, polega na tym, że dajesz systemowi kilka reguł do manipulowania równaniami (np. a*(b+c) = a*b + a+c
) określ cel (np. Izoluj zmienną x), a następnie pozwól mu stracić.
Więc moje pytania to:
- Czy moje założenie jest poprawne?
- Jaka jest strategia wyszukiwania dla stosowania reguł? na przykład. Głębokość pierwsza, szerokość pierwsza, głębokość pierwsza z iteracyjnym pogłębieniem, coś w rodzaju najlepszego najpierw?
- Jeśli jest to "najlepsza pierwsza", jakie heurystyki są używane w celu ustalenia, czy jest prawdopodobne, że konkretna aplikacja reguły zbliżyła nas do naszego celu?
Chciałbym również docenić wszelkie inne porady (z wyjątkiem "poddaj się" - regularnie ignorować tę radę i robi to dobrze mi służył;).
proszę, nie to jak szeroki zbyt blisko ... er, na odwrót. Jest to interesujące i odpowiedzialne - a poza tym znajdź niektóre z tych "gimme teh codez" lub "why does" "foo" [0] = 'b'; 'segfault?" pytania, twoje CV będzie służyć tam o wiele lepiej. –
Czy pytasz o rozwiązywanie równań lub analizowanie parsowania? "rozwiązać 150sin (x) -gamma (x) = 0" to jedna rzecz, "parsować (((((x + 1) -1) +1) -sin (x) -1))" to jednak inna rzecz pierwszy może obejmować drugi. – hexafraction
Dobre pytanie. LastCalc jest dość dziwny, ponieważ wszystko, co robi, czy parsowanie, konwersja jednostek, czy (wkrótce) upraszczanie wyrażeń i rozwiązywanie równań, to tylko seria transformacji - punktem wyjścia jest lista tokenów. Jednak parsowanie nie jest wyzwaniem, dlatego skup się na rozwiązywaniu, a nie analizie. – sanity