2013-12-12 26 views
0

我是Visual Prolog中的一名新成員,據我所知,這種語言似乎是功能性的。等等,我有一個問題:我們可以做水木清華這樣的(如果「可以」,那麼「如何」):Visual Prolog - 以一些函數作爲另一個函數的參數

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,是'somefunc'總是相同的,'Func2'可能沒有參數,如果它很重要 –

回答

1

首先,Prolog沒有函數,那些東西都是謂詞。差別很大,因爲可以有多種方式來滿足(證明)謂詞是真實的,但通常只有一種解釋函數的方法。

我從來沒有使用Visual Prolog中,但你問在序言中最口味來完成我一直在使用= ../2和呼叫/ 1如下所示:

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

爲實例:

X = writeln, Call =.. [X, 'Hellow World'], call(Call). 
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. 

還要注意,有一個專門的視覺Prolog的論壇:http://discuss.visual-prolog.com

相關問題