프롤로그에서이 질문에 대한 대답 (또는 첫 번째 기능)을 수행하는 방법을 궁금합니다. 내가 말하는 링크는 here입니다.하나의 함수에서이 작업을 수행하는 방법
reverse([X|Y],Z,W) :- reverse(Y,[X|Z],W).
reverse([],X,X).
프롤로그에서이 질문에 대한 대답 (또는 첫 번째 기능)을 수행하는 방법을 궁금합니다. 내가 말하는 링크는 here입니다.하나의 함수에서이 작업을 수행하는 방법
reverse([X|Y],Z,W) :- reverse(Y,[X|Z],W).
reverse([],X,X).
당신이하려고하는 이유는 술어에 대한 하나의 절을 원하는 무엇 :
는 여기에 내가 하나의 술어를 호출하여 무엇을 의미하는지의 예?
개인적으로 나는 많은 절을 쓸 수있는 능력이 프롤로그의 위대한 것 중 하나라는 것을 믿습니다. 코드는 더 우아하고 읽기 쉽습니다.
어쨌든 또는을 사용하고 싶을 것입니다.
이foo(Arg11,Arg12,Arg13):-
(Body1).
foo(Arg21,Arg22,Arg23):-
(Body2).
foo(Arg31,Arg32,Arg33):-
(Body3).
먼저 모든 절은 같은 인수가 있는지 확인해야합니다 (안녕히 패턴이 일치!) :
foo(Arg1,Arg2,Arg3):-
(Body1b).
foo(Arg1,Arg2,Arg3):-
(Body2b).
foo(Arg1,Arg2,Arg3):-
(Body3b).
을 그리고 당신은 (사용하거나합니다 다음과 같은 조항을 가지고 가정) : 예
foo(Arg1,Arg2,Arg3):-
(Body1b)
; (Body2b)
; (Body3b).
,
reverse([X|Y],Z,W):-
reverse(Y,[X|Z],W).
reverse([],X,X).
0
이 될 것입니다 : 다음
reverse(X,Y,Z):-
X = [H|T],
reverse(T,[H|Y],X).
reverse(X,Y,Z):-
X = [],
Z = Y.
과 : 귀하의 첫 번째 게시물의 예에 관한
reverse(X,Y,Z):-
(X = [H|T],
reverse(T,[H|Y],X))
; (X = [],
Z = Y). *%ew ew ugly!*
, 두 가지 조건이있다, 각각 하나의 절을 가지고. 두 번째 술어는 2 개의 인수를 가지며 첫 번째 술어는 1을 가지므로 서로 다릅니다. 그것들을 "병합"하는 유일한 방법은 첫 번째 대신에 두 번째 것을 has_equal_sums (List, _)로 호출하는 것입니다.
솔직히 말해서, 나는이 일을하는 것이 중요하지 않다. 나는 당신이 어떤 중요한 스피드 업도 얻지 못할 것이고 코드가 더 복잡해지기를 의심한다.
물론 당신의 코드이고 우리가 알지 못하는 제한이있을 수 있습니다. (그래서 내가 원하는 것을 물었습니다)
나는 당신이 어디에서 왔는지를 완전히 이해하고 있으며 아마 더 지저분하다. 나는 단지 그것이 같은 기능을하는 방법을 찾을 수 있기를 원하지만 단지 하나의 술어를 주 호출로 사용한다. – Abriel
만약 내가이 질문을 이해한다면, 하나의 술어를 하나의 술어에만 쓰는 것이 아니라 하나의 술어 (아마도 많은 절이있는)를 사용하는 것에 관한 것입니다. 당연히 구현에 대한 그러한 인위적 제약은 인간이 읽을 때 어려울 수 있습니다. – hardmath
huum, 하나의 술어, 많은 절 ... 우리는 "마스터"술어 인 myprogram/2를 사용할 수 있습니다. 첫번째 인수는 술어 이름이고 두 x 째 인수는 인수 목록입니다.myprogram (아버지, [존, 케빈]) 같은 것. 아버지 (X, Z), 아버지 (Z, Y) : 그리고 나서 우리는 또는을 사용하여 하나의 절에 넣을 수 있습니다. (myprogram (mother, (liz, kevin) .LOL –
무엇을 의미합니까? 나는 당신이 링크 한 대답에서 단 하나의 "기능"을 볼 수 있습니다. 그것의 2 개의 버전이 있더라도. BTW, "함수"를 말할 때 나는 당신이 "술어"를 의미한다고 가정하고 있습니다. – svick
그래, 나는 술어를 의미하는 것을 유감스럽게 생각하며, 오직 하나의 술어 만 호출하는 방법을 알아낼 수 있기를 원한다. – Abriel
나는 아직도 당신이 의미하는 것을 이해하지 못합니다. 당신은 정교 할 수 있습니까? 어쩌면 예를 들어 주시겠습니까? – svick