Najpierw, gdy czytałem różne predykaty na temat Prolog, jak na przykład http_server
, jest napisane tak: http_server(:Goal, +Options)
co znaczy :
i +
? Czasami zapisywane jest również ?
.
Po drugie, czasami widzę zmienne zadeklarowane z podkreśleniem przed nimi, takie jak _Request
, mimo że nie ma żadnego innego Request
, dlaczego tak jest?Co to oznacza w prologu?
Odpowiedz
W +
, -
, :
itp sigile nazywane są deklaracje tryb. Opisują one oczekiwaną instancję argumentów predykatów, tj. Czy oczekuje się, że wywołasz predykat z niezwiązaną zmienną, instancją, itd. Nie są one całkowicie znormalizowane; tutaj jest opis konwencji dla SWI-Prolog: http://www.swi-prolog.org/pldoc/man?section=modes
W pierwszym przybliżeniu, o +
argumentem jest wejście do orzecznika, ci mają zapewnić termin gruntowych. Argumentem -
jest wyjściowy predykatu, predykat spróbuje ujednolicić go z terminem. Termin ?
może być częściowo utworzony podczas wywołania, a predykat może go utworzyć. Argument :
jest meta-argumentem, tj. Celem jest wywołanie przez predykat (na przykład w przypadku setof/3
).
W przykładzie http_server(:Goal, +Options)
powinieneś wywołać ten predykat z pierwszym argumentem powiązanym z celem, prawdopodobnie z nazwą predykatu. Drugi argument musi być utworzony, przypuszczalnie do listy, której format jest dokładniej opisany w dokumentacji. Jeśli wykonasz , nie, wywołaj ten predykat w ten sposób, na przykład, jeśli przekażesz niezwiązaną zmienną jako drugi argument, może pojawić się nieoczekiwane zachowanie lub błąd wystąpienia.
Jeśli chodzi o drugie pytanie (które lepiej byłoby być oddzielne), zmienna, która zaczyna się od podkreślenia, nazywa się anonimową zmienną . Każda taka zmienna może wystąpić tylko raz na klauzulę, z wyjątkiem samego siebie, z wyjątkiem _
, która może wystąpić kilkakrotnie i odnosi się do oddzielnych zmiennych w każdym wystąpieniu.
Systemy Prolog zwykle emitują ostrzeżenie "singleton variable" dla zmiennych nieanonimowych, które występują tylko raz, ponieważ mogą to być literówki lub znak, że programista o czymś zapomniał. Używasz zmiennych anonimowych, aby wyrazić pogląd, że "coś tu musi być (np. Argument predykatu), ale nie obchodzi mnie, co to jest". W twoim przykładzie przypuszczalnie wywołujesz predykat, który ma argument "request", ale w twoim konkretnym przypadku nie dbasz o to żądanie.
- 1. Co oznacza \ + w Prologu?
- 2. Co oznacza -> znaczy w prologu?
- 3. Co oznacza "[to]" oznacza w języku C++
- 4. Co oznacza slash po nazwie predykatu w Prologu?
- 5. Co oznacza symbol "-" w Prologu podczas pracy z listami?
- 6. Co oznacza to ostrzeżenie?
- 7. Co oznacza "CL" w komunikacie zatwierdzenia? Co to oznacza?
- 8. Co to oznacza? initWithFrame: CGRectZero]
- 9. Co to jest rc oznacza
- 10. Co oznacza to stwierdzenie C?
- 11. Co oznacza to stwierdzenie Pythona?
- 12. Co oznacza "Oznacz to zatwierdzenie" w gitk?
- 13. Co to oznacza w tym fragmencie kodu?
- 14. Co oznacza symbol "To" w Scali?
- 15. Co oznacza to podkreślenie w Swift?
- 16. Co oznacza to ograniczenie rodzajowe w Swift?
- 17. co oznacza „$ &” oznacza w Ruby
- 18. Co to oznacza ?: * (int32 *) 0 = 0;
- 19. Co to oznacza? nazwa publiczna {get; set;}
- 20. "Plik ładunku nie istnieje" Co to oznacza?
- 21. Co oznacza to wyrażenie regularne - "\ p {Lu}"?
- 22. Co to oznacza: my_var = my_var || 69
- 23. Co oznacza to ostrzeżenie MiniTest :: Unit :: TestCase?
- 24. co to oznacza: "jQuery ('> li, ten)"
- 25. Własność Java "user.dir" - co to dokładnie oznacza?
- 26. Składnia parametrów metody C# - co to oznacza?
- 27. Czy to może być rekurencyjne w Prologu?
- 28. Co oznacza (+ var) oznacza
- 29. Co to jest rozszerzenie pośrednie? Co oznacza $ {! Var *}?
- 30. Co znaczy: co oznacza?
Dzięki, bardzo ładne wyjaśnienie. Nadal jest jedna rzecz, której nie rozumiem, dlaczego nazywam ją "_Request", a nie tylko '_'? Czy dla jasności jest to prośba? – Ferus
Tak, tylko po to, aby nazwa zmiennej była bardziej wyrazista. –