2013-12-12 2 views
0

저는 비주얼 프롤로그에서 새로운 기능입니다. 이해할 수있는 것처럼이 언어는 기능적으로 보입니다. 등등, 나는 질문이있다 : 우리는 다음과 같이 떨어지게 할 수 있습니다 (그리고 경우 '수'다음 '어떻게') :비주얼 프롤로그 - 다른 함수의 인수로 일부 함수 가져 오기

func1(X, Y, Func2) :- 
    R = somefunc(X,Y), 
    if R = "yes", ! then 
     Func2 %here I want to call function with name, which is in variable 'Func2' 
    else 
     stdIO::write("End of work"), 
     stdIO::nl, 
     fail 
    end if. 

이 문제의 원인 - 같은 방법으로 다른 함수를 호출 내가 필요, 콘솔에서 답을 확인하는 중입니다. '예'가 아닌 경우 - 실행중인 프로그램을 중지하십시오.

+0

인가'somefunc' 항상 같고,'Func2'는 매개 변수를 필요로합니까? – lurker

+0

@mbratch, yes'somefunc'는 항상 같고,'Func2'는 인자가 없을 수도 있습니다. 중요하다면 –

답변

1

먼저 Prolog에는 기능이 없으며 이러한 것들은 술어입니다. 그 차이는 여러 가지가 있습니다. 왜냐하면 술어가 만족 스럽다는 여러 가지 방법이있을 수 있기 때문입니다. 그러나 일반적으로 하나의 함수를 해석하는 유일한 방법이 있습니다.

나는 비주얼 프롤로그를 사용한 적이 있지만, 프롤로그 대부분의 맛을 수행 할 수 있습니다 요구하고 무엇을 내가 사용 = ../2 다음과 같이/1 전화를 본 적이 : 대한

Func2WithArgs =.. [Func2, Arg1, Arg2], 
call(Func2WithArgs). 

을 예 :

0

함수를 호출 할 때 괄호가 필요하다는 점을 제외하면 코드는 정확합니다. 즉 Func2가 아닌 Func2()를 작성해야합니다.

func1(X, Y, Func2) :- 
    R = somefunc(X,Y), 
    if R = "yes", ! then 
     Func2() % parentheses here 
    else 
     stdio::write("End of work\n"), 
     fail 
    end if. 

에서 func1과이 Func2 실제로는 반환 값을 처리해야하는 기능이다 그러나 경우 :

또한
func1(X, Y, Func2) = Result :- 
    R = somefunc(X,Y), 
    if R = "yes", ! then 
     Result = Func2() 
    else 
     stdio::write("End of work\n"), 
     fail % No result when failing 
    end if. 

전용 비주얼 프롤로그 포럼이 있음을 알 수 : http://discuss.visual-prolog.com