Я должен написать программу для вычисления Пролога:Дать факторную подобную функцию (Пролог)
f(0) = 2, f(1) = 0, f(2) = 3, f(n) = 3f(n-3) + 2f(n-2) - f(n-1) for n≥3.
мне нужно сделать итерационную версию, а также рекурсивный вариант. Я был в состоянии написать, что рекурсивную версию в SML:
fun myFunc 0 = 2
| myFunc 1 = 0
| myFunc 2 = 3
| myFunc x = 3* myFunc(x-3) + 2* myFunc(x-2) - myFunc(x-1)
Но у меня возникают проблемы с передачей его на Прологе, как я очень новый язык. Кроме того, я никогда не мог понять, как сделать итеративный подход. Любая помощь будет принята с благодарностью!
Вот моя попытка рекурсивной версии Prolog. Он не компилирует и, вероятно, даже не близко к праву:
my_Fun(0, 2).
my_Fun(1, 0).
my_Fun(2, 3).
my_Fun(X, F) :-
X>=3, NewX is X-3, NewF is 3 * F, my_fun(NewX,NewF),
NewX2 is X-2, NewF2 is 2 * F, my_fun(NewX2, NewF2),
NewX3 is X-1, NewF3 is F, myFun(NewX3,NewF3).
сначала проверьте правописание :) у вас есть my_Fun, myFun и my_fun. помните, что пролог чувствителен к регистру. может быть, причина, почему он не будет компилировать – ssBarBee
Упс! Ну, я уверен, что в этом есть и другие проблемы. Это было скорее просто показать мой подход к решению. – user2796815
Итеративный подход: подсчет (не вниз): 'f (n)' зависит от трех предыдущих значений 'f', поэтому просто сохраняйте их:' step (n, a, b, c) = (n + 1, b , с, 3а + 2b-с) '. –