Prolog를 사용하여 클라이언트 웹 응용 프로그램 구성

19252 단어 prologblazorspa

너는 《서언》을 아니?


Prolog는 1972년에 개발된 프로그래밍 언어이다.
Prolog는 개체 기반 프로그래밍 언어나 함수 프로그래밍 언어가 아닙니다.
그것은 논리 프로그래밍 언어로 분류된다.
흥미로운 것은 Prolog 프로그래밍에서 프로그래머는 조작 서열을 작성하지 않는다는 것이다.
반대로 그들은'사실'과'규칙'을 서문 코드로 썼다.
human(socrates).
mortal(X) :- human(X).
Prolog 실행 시 코드를 처리한 후 Prolog 실행 시 질의를 요청할 수 있습니다.
?- mortal(X).
그런 다음 Prolog가 실행될 때 질의의 해결책을 찾으려고 하면 실행 시 해결책을 찾았는지 여부를 알려줍니다.
X = socrates
나는 서문이 좀 이상하고 재미있다고 생각한다.
Prolog를 이해하기 전에, 프로세스 코드가 아닌 논리 코드로만 작성된 PC 프로그램을 만드는 것을 상상할 수 없습니다.

Prolog를 사용하여 단일 페이지 웹 응용 프로그램을 만들 수 있습니까?


그나저나'Blazor'를 배웠는데 C#로 한 페이지 웹 애플리케이션(일명'SPA')을 만드는 기술이다.
  • Blazor | Build client web apps with C# | .NET
  • Blazor는 우리가 달리는 것을 허락한다.NET MSIL 코드는 웹 브라우저의 WebAssembly 엔진에서 실행됩니다.
    C#로 작성된 Prolog 해석기 "C#Prolog"를 알고 있습니다.
  • C#Prolog - A C# implementation of Prolog
  • 그래서 어느 날, Blazor와 C#Prolog를 결합하면 Prolog에 SPA를 만들 수 있다는 생각이 떠올랐습니다.
    올해 말과 새해 휴가(2020~2021년)에 그 생각을 이루려고 했는데 결국 이뤄냈다.

    "Spprologa" - Prolog로 물치료를 하는 도서관


    나는 새 책 한 권을 출판했다.NET 도서관 "Spprologa".
  • Spprologa - "Build client web apps with Prolog."
  • Spprologa에서는 Prolog를 사용하여 물치료를 할 수 있습니다.
    Spprologa는 단일 페이지 서문 응용 프로그램의 머리글자를 나타냅니다.
    알다시피, 이 Blazor와 C#Prolog 기반 라이브러리는 서버 프로세스가 아닌 웹 브라우저에서 모든 Prolog 코드를 실행합니다.
    Prolog 코드는 웹 브라우저의 WebAssembly 엔진에서 실행되는 해석기(C#Prolog)가 설명하는 것이지 JavaScript로 변환하는 것이 아닙니다.
    이는 GitHub 페이지, Firebase, Netlify, Azure 정적 웹 등 최소한 정적 내용을 제공할 수 있는 HTTP 서버에 'Spprologa' 프로그램이 위탁 관리될 수 있다는 것을 의미한다.
    GitHub 페이지에 배포된 라이브 데모 사이트(이하 URL)를 볼 수 있습니다.
  • "Spprologa" live demo site
  • "Spprologa" 응용 프로그램을 작성합니다.



    미리 요구하다


    따라서 Spprologa는 Blazor 기반입니다.NET SDK v.5.0.101 이상은 Spprologa 응용 프로그램 개발에 필요합니다.
    설치하다.NET SDK를 PC 또는 Mac에 다운로드하려면 다음 URL을 참조하십시오.
  • "Download .NET"
  • "Spprologa"프로그램 프로그래밍을 시작하기 전에 다음 명령을 통해 "Spprologa"프로젝트 템플릿을 설치하는 것을 권장합니다.
    $ dotnet new -i Spprologa.Templates::0.0.1-preview.4.0.0.0
    

    새 "Spprologa" 응용 프로그램 항목을 만들고 실행합니다.


    프로젝트 템플릿 설치가 완료되면 dotnet new 명령을 사용하여 현재 폴더에 새 "Spprologa"응용 프로그램 항목을 만들 수 있습니다.
    $ dotnet new spprologa
    
    새 "Spprologa"응용 프로그램 항목을 만든 후 다음 명령을 실행하여 응용 프로그램을 구축하고 실행합니다.기본 웹 브라우저에서 응용 프로그램의 URL이 자동으로 열립니다.
    $ dotnet watch run
    

    프로젝트 게시


    웹 서버에 응용 프로그램을 배포하려면 다음과 같이 dotnet publish 명령을 실행합니다.
    $ dotnet publish -c:Release -o path/to/output
    
    위 명령을 실행하면 path/to/output/wwwroot 폴더에서 응용 프로그램을 실행하는 데 필요한 모든 내용이 생성됩니다.

    특징 개념


    Spprologa 응용 프로그램 프로그래밍은 다음 5가지 기능을 기반으로 합니다.

    1. *.면도칼.프로젝트의 프로그래밍 파일은 자동으로 열람됩니다.


    % /Pages/Foo.razor.prolog
    %   This Prolog code file will be consulted only once
    %   when the "Foo.razor" component is first rendering.
    
    input(name, "").
    
    bird("swallow", canfly).
    bird("penguin", canswim).
    canfly(Name) :- bird(Name, canfly).
    
    classify(Name, "can fly") :- canfly(Name).
    classify(Name, "is bird, but can't fly.") :- bird(Name, _).
    classify(_, "isn't bird.").
    
    check :-
        input(name, Name), classify(Name, Message),
        retractall(message(_, _)), asserta(message(Name, Message)).
    

    2. 질의 결과를 DOM 컨텐트에 바인딩합니다.

    @query("...")를 사용하여 매개변수로 지정된 질의 솔루션의 변수 값을 읽어들여 HTML 컨텐트로 표시합니다.
    <!-- /Pages/Foo.razor -->
    ...
    <span>
      <!-- 👇 This code will render "swallow". -->
      @query("canfly(Name)")
    </span>
    

    3. 입력을 사실에 귀속시킨다.

    @fact("...")를 사용하여 input 원소에 양방향으로 귀속합니다.
    <!-- /Pages/Foo.razor -->
    ...
    <input @bind='@fact("input(name, {0})").as_string' />
    
    만약 사용자가 위의 input 요소에 텍스트'gopher'를 입력한다면 모든 input(name, _) 사실은 철회되고 사실input(name, "gopher")은 단언될 것이다.

    4. 조회에 조작을 연결한다.

    @then("...")를 사용하여 이벤트를 촉발할 때 조회를 호출합니다.
    <!-- /Pages/Foo.razor -->
    ...
    <button @onclick='@then("check")'>Check</button>
    
    사용자가 위의 버튼을 클릭하면 쿼리check가 호출됩니다.

    5. 사실을 열거한다.

    <Case> 구성 요소를 사용하여 질의의 모든 솔루션을 읽어들이고 각 솔루션의 값을 HTML 컨텐트로 표시합니다.
    <!-- /Pages/Foo.razor -->
    ...
    <ul>
      <Case Query="bird(Name, Ability)">
        <li>@context["Name"] - @context["Ability"]</li>
      </Case>
    <ul>
    
    이러한 코드는 다음과 같이 HTML로 표시됩니다.
    <ul>
      <li>swallow - canflay</li>
      <li>penguin - cannotflay</li>
    </ul>
    

    "Spprologa" 애플리케이션은 무엇을 할 수 있습니까?


    네가 내 현장 프레젠테이션 사이트에서 알고 있는 바와 같이 나는 하나를 만들었다"coloring map" solver.

    이 문제를 해결하는 핵심 코드는 다음과 같다.
    % define that what colors are there.
    color(red).
    color(green).
    color(blue).
    color(yellow).
    
    % The implementation of the map coloring.
    color_of_map(Alabama, Mississippi, Georgia, Tennessee, Florida) :-
        color(Alabama), color(Mississippi), color(Georgia), color(Tennessee), color(Florida),
        Tennessee \= Mississippi,
        Tennessee \= Alabama,
        Tennessee \= Georgia,
        Mississippi \= Alabama,
        Alabama \= Georgia,
        Alabama \= Florida,
        Georgia \= Florida.
    
    나는 또 만들었다"Sudoku" (but this version 4 x 4 cells) solver.

    해산기의 핵심 코드는 다음과 같다.
    sudoku(Puzzle, Solution) :-
        Solution = Puzzle,
        Puzzle = [
            S11, S12, S13, S14,
            S21, S22, S23, S24,
            S31, S32, S33, S34,
            S41, S42, S43, S44
        ],
        NUMBERS = [1,2,3,4],
    
        % rows
        permutation(NUMBERS, [S11, S12, S13, S14]),
        permutation(NUMBERS, [S21, S22, S23, S24]),
        permutation(NUMBERS, [S31, S32, S33, S34]),
        permutation(NUMBERS, [S41, S42, S43, S44]),
    
        % columns
        permutation(NUMBERS, [S11, S21, S31, S41]),
        permutation(NUMBERS, [S12, S22, S32, S42]),
        permutation(NUMBERS, [S13, S23, S33, S43]),
        permutation(NUMBERS, [S14, S24, S34, S44]),
    
        % square
        permutation(NUMBERS, [S11, S12, S21, S22]),
        permutation(NUMBERS, [S31, S32, S41, S42]),
        permutation(NUMBERS, [S13, S14, S23, S24]),
        permutation(NUMBERS, [S33, S34, S43, S44]).
    
    흥미로운 것은 내가 이 문제들을 해결하기 위해 어떤 알고리즘도 작성하지 않았다는 것이다.
    반대로 나는 이 수수께끼의 제약과 규칙만 서문 코드로 작성한다.
    나는 이것이 바로 Prolog 프로그래밍의 기적과 매력이라고 생각한다.

    주의: 이것은 단지 개념 증명일 뿐이다


    '스prologa'는 처음에'Prolog'가 한 페이지의 웹 애플리케이션을 만들 수 있는지에 대해 흥미를 느꼈기 때문이다.
    그래서 내가 이 도서관에 흥미를 잃은 후에, 그것은 버려질 수도 있다.
    그러나 이 프로젝트는 Mozilla 공용 라이센스로 릴리즈되었습니다.
    그래서 누구나 언제든지 자유롭게 이 프로젝트를 계속할 수 있습니다. 저는 그것을 강력히 환영합니다.👍
    Prolog 프로그래밍의 즐거움을 누리세요!

    좋은 웹페이지 즐겨찾기