Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

一个供Prolog爱好者学习与交流的地方


您没有登录。 请登录注册

Fibonacci Sequence(費波那西數列or斐波那契數列)

浏览上一个主题 浏览下一个主题 向下  留言 [第1页/共1页]

1 Fibonacci Sequence(費波那西數列or斐波那契數列) 于 周四 十二月 13, 2012 6:39 pm

Fibonacci Sequence(費波那西數列or斐波那契數列)主要是用遞歸的方式來定義。
F0=0
F1=1
Fn=(Fn的n-1)+(Fn的n-2)
(※因為打不出來小n所以打得比較怪※)

他的數列會呈現0, 1, 1, 2, 3, 5, 8, 13, 21, 34...

目前課程練習的比較noob的方式為 pale
fib( N, F)
fib(1,1).
fib(2,1).
fib( N, F) :- N > 2, N1 is N – 1, fib(N1, F1),
N2 is N – 2, fib(N2, F2), F is F1 + F2.

而比較節省暫存記憶體不會導致電腦被佔據過多空間的改良方法 cheers

fib2(1,1).
fib2(2,1).
fib2( N, F) :- N > 2, N1 is N – 1, fib(N1, F1),
N2 is N – 2, fib(N2, F2),
F is F1 + F2,
asserta(fib2(N, F)).

目前的問題是Prolog使用asserta的填入方式,:-似乎要多幾個括號=> ()
之前在上機實際練習自己可以成功測試出來(Noob方法大約電腦不夠好27~30就掛掉後者幾乎可以跑到10000)
結果自己回家想要練習一下卻發現怎麼括號加上去都出問題...一直跑出來錯誤 affraid

※錯誤範例※ scratch

1 ?- asserta(fib(1,1)).
true.

2 ?- asserta(fib(2,1)).
true.

3 ?- asserta(fib(N,F)) ((:-
| N>2,
| N1 is N -1, fib(N1,F1),
| N2 is N -2, fib(N2,F2),
| F is F1 + F2)))).
ERROR: Syntax error: Operator expected
ERROR: asserta(fib(N,F))
ERROR: ** here **
ERROR: ((:-
N>2,
N1 is N -1, fib(N1,F1),
N2 is N -2, fib(N2,F2),
F is F1 + F2)))) .

不知道自己究竟是哪邊謄寫的時候錯誤,請各位高手幫忙查閱指證,謝謝 Crying or Very sad

查阅用户资料
为什么查询时asserta(fib(N,F))后面还要加一串东西?
其实就是我没理解asserta(X)(Y)是什么语法。

BillZhan 写道::Fibonacci Sequence(費波那西數列or斐波那契數列)主要是用遞歸的方式來定義。
F0=0
F1=1
Fn=(Fn的n-1)+(Fn的n-2)
(※因為打不出來小n所以打得比較怪※)

他的數列會呈現0, 1, 1, 2, 3, 5, 8, 13, 21, 34...

目前課程練習的比較noob的方式為 pale
fib( N, F)
fib(1,1).
fib(2,1).
fib( N, F) :- N > 2, N1 is N – 1, fib(N1, F1),
N2 is N – 2, fib(N2, F2), F is F1 + F2.

而比較節省暫存記憶體不會導致電腦被佔據過多空間的改良方法 cheers

fib2(1,1).
fib2(2,1).
fib2( N, F) :- N > 2, N1 is N – 1, fib(N1, F1),
N2 is N – 2, fib(N2, F2),
F is F1 + F2,
asserta(fib2(N, F)).

目前的問題是Prolog使用asserta的填入方式,:-似乎要多幾個括號=> ()
之前在上機實際練習自己可以成功測試出來(Noob方法大約電腦不夠好27~30就掛掉後者幾乎可以跑到10000)
結果自己回家想要練習一下卻發現怎麼括號加上去都出問題...一直跑出來錯誤 affraid

※錯誤範例※ scratch

1 ?- asserta(fib(1,1)).
true.

2 ?- asserta(fib(2,1)).
true.

3 ?- asserta(fib(N,F)) ((:-
| N>2,
| N1 is N -1, fib(N1,F1),
| N2 is N -2, fib(N2,F2),
| F is F1 + F2)))).
ERROR: Syntax error: Operator expected
ERROR: asserta(fib(N,F))
ERROR: ** here **
ERROR: ((:-
N>2,
N1 is N -1, fib(N1,F1),
N2 is N -2, fib(N2,F2),
F is F1 + F2)))) .

不知道自己究竟是哪邊謄寫的時候錯誤,請各位高手幫忙查閱指證,謝謝 Crying or Very sad

查阅用户资料 http://prolog.longluntan.net
[quote="Mercury Liao"]为什么查询时asserta(fib(N,F))后面还要加一串东西?
其实就是我没理解asserta(X)(Y)是什么语法。

asserta是暫存在記憶體上的方法,也就是可以拿空白的Prolog文件,直接開啟在上面用asserta去增加參數指令上去。

查阅用户资料
我知道asserta的用法,但是应该是asserta(X),不是asserta(X)(Y)吧!

[quote="BillZhan"]
Mercury Liao 写道::为什么查询时asserta(fib(N,F))后面还要加一串东西?
其实就是我没理解asserta(X)(Y)是什么语法。

asserta是暫存在記憶體上的方法,也就是可以拿空白的Prolog文件,直接開啟在上面用asserta去增加參數指令上去。

查阅用户资料 http://prolog.longluntan.net

浏览上一个主题 浏览下一个主题 返回页首  留言 [第1页/共1页]

您在这个论坛的权限:
不能在这个论坛回复主题