Chcę stworzyć prostą, sprawdzoną koncepcję aplikacji (REPL), która pobiera liczbę, a następnie przetwarza polecenia na tym numerze.
Przykład: zaczynam od 1. Następnie piszę „ add 2
”, daje mi 3. Następnie piszę „ multiply 7
”, daje mi 21. Następnie chcę wiedzieć, czy jest liczbą pierwszą, więc piszę „ is prime
” (na bieżącym numerze - 21), daje mi to fałsz. „ is odd
” dałoby mi prawdę. I tak dalej.
Teraz, w przypadku prostej aplikacji z kilkoma poleceniami, nawet proste switch
byłoby w stanie przetworzyć polecenia. Ale jeśli chcę rozszerzalności, jak powinienem wdrożyć tę funkcjonalność? Czy używam wzorca polecenia? Czy zbuduję prosty parser / interpreter dla języka? Co jeśli chcę bardziej złożone polecenia, takie jak „ multiply 5 until >200
”? Jaki byłby łatwy sposób na rozszerzenie go (dodanie nowych poleceń) bez ponownej kompilacji?
Edycja: aby wyjaśnić kilka rzeczy, moim ostatecznym celem nie byłoby zrobienie czegoś podobnego do WolframAlpha, ale raczej procesor listy (liczb). Ale najpierw chcę zacząć powoli (od pojedynczych liczb).
Mam na myśli coś podobnego do tego, w jaki sposób Haskell mógłby przetwarzać listy, ale bardzo prosta wersja. Zastanawiam się, czy wystarczyłoby coś takiego jak wzorzec poleceń (lub odpowiednik), czy też muszę stworzyć nowy mini-język i parser, aby osiągnąć moje cele?
Edit2: Dzięki za wszystkie odpowiedzi, wszystkie były dla mnie bardzo pomocne, ale Emmad Kareem pomógł mi najbardziej, więc wybiorę to jako odpowiedź. Dzięki jeszcze raz!