Feed on
文章
评论

通过查看帮助,我发现在SWI-PROLOG中无法定义常量,而有些PROLOG版本是可以的,如以前DOS版本的Turbo PROLOG。但是在书写程序时没有常量就很不方便了,如果使用字面常量,一是程序会使程序很难理解,二是修改的时候很不方便,凡是程序中出现这个常量的地方都要修改,极有可能出现遗漏;如果把常量定义成一元谓词如pi(3.14),那么使用的时候又要先调用一次谓词,如:pi(PI),s is Pi*R*R.显得也很多余。
那么有没有办法在SWI-PROLOG中定义常量呢?当然可以,比如swi-prolog就定义得有符号pi和e,下面就以自定义符号pie=pi+e为例

pie(X):-X is pi+e.
:- arithmetic_function(pie/0).

装入这个文件后,就可以在表达式中使用使用这个常量pie了。
arithmetic_function的功能就是自定义运算符,在定义是需指明自定义函数的个数;在定义谓词时,最后一个个体变元必须是输出参数,用于保存结果。所以在arithmetic_function谓词中指明的参数个数应该比实际的变元个数少1。

VIM 学习笔记

^p 或 ^n :(编辑模式)自动补全
^O:切换到命令模式完成后返回编辑模式
=a{ :重排选定的代码块
zo:展开代码折叠
zc:关闭代码折叠
set encoding=编码 : 改变文件的编码方式(先设置再打开)
set fileencoding=编码 : 把当前的编码转换为新的编码方式
手把手教你把Vim改装成一个IDE编程环境(图文)

本文由抱雪(hugsnow)原创,转载请注明来源 http://www.luoxf.net/

 1 #include <algorithm>
 2 #include <vector>
 3 #include <iterator>
 4 #include <iostream>
 5 using namespace std;
 6 /**
 7  * 分析:组合无序,所以不妨设降序排列
 8  * 第一个解是[n,n-1,...,n-r+1]
 9  * 解的条件是位置i上的元素A[i]应该满足
10  * i+A[i]>=r
11  * 回溯法:对最后一个元素减一
12  * 如果满足条件则得到一个新解
13  * 如果不满足,一直向前回溯到该位满足为止
14  * 然后把满足的那位后面的依次等于前面减一
15  * 从而得到一组新解,然后继续
16  * 如果已经回溯到第一位仍不满足
17  * 则所有解都已经找到,终止
18  */
19 vector <vector <int> > comb(int n,int r){
20     vector <vector <int> > vv;
21     vector <int> tmp(r);
22     int i;
23     bool f=false;
24     for(i=0;i<r;i++)tmp[i]=n-i;
25     vv.push_back(tmp);
26     while(true){
27         tmp[r-1]--;
28         for(i=r-1;i>=0;i--){
29             if(tmp[i]+i>=r)
30                 break;
31             else{
32                 if(i==0){
33                     f=true;
34                     break;
35                 }
36                 tmp[i-1]--;
37                 if(tmp[i-1]+i-1>=r){
38                     for (int j=i; j < r; j++) {
39                         tmp[j]=tmp[j-1]-1;
40                     }
41                 }
42             }
43         }
44         if(f)break;
45         vv.push_back(tmp);
46     }
47     return vv;
48 }
49 

野人与传教士

本文由抱雪(hugsnow)原创,转载请注明来源 http://www.luoxf.net/
设有m个传教士和m个野人来到河边,打算乘一只船从右岸渡到左岸去。该船最大负载能力为n人,在任何时候,如果野人人数超过传教士人数,那么野人就会把传教士吃掉。他们怎样才能用这条船安全地把所有人都渡过河去呢?
继续阅读 »

猎人过河

猎人带着一框草莓,一只羊和一条狼要过河。但是只有一条小船。条件如下:
* 一次只可以载一样东西。
* 如果让羊和草莓在一起,而猎人不在旁边的话,羊就会把草莓只掉。
* 如果让狼和羊在一起,而猎人不在旁边的话,狼就会把羊吃掉。 继续阅读 »

韩信走马分油问题

本文由抱雪(hugsnow)原创,转载请注明来源 http://www.luoxf.net/

方法很简单
方法一:
1、如果小桶空,从大桶到小桶
2、如果中桶满,从中桶到大桶
3、如果中桶空间能容纳小桶内的,把小桶全倒中桶
4、从小桶倒,把中桶倒满
方法二:完全类似,不过到油的方向为 大桶–>中桶–>小桶
继续阅读 »

審詳春日莫他求,時正節真氣自酬,
五時二刻驚蟄是,十時四刻清明頭,
立夏一日三時六,芒種一日九時收,
二日二時二小暑,二日七時四刻秋,
白露三朝單六刻,寒露三朝六時周,
立冬三朝十一二,大雪細細兩雙流,
小寒四日九時六,五日三時打春牛,
節遇子時加一日,此為捷法記心頭。

量天尺
立春五日起庚由, 惊蛰倒退三时首。
一时一刻清明节, 立夏九时三刻收。
芒种两日退一时, 小暑三日五时求。
五日退三立秋节, 白露六日退一周。
寒露六日四时到, 立冬六日七时求。
大雪六日又四时, 小寒五日九时收。

一掌诀
前九年,二月中, 本年元旦日相同。
月月十五对初一, 千年万载不差宗。

历法数据

一个阴历月:29.530588天
回归年:365.24219879天(365日5小时48分45.5秒)
恒星年:365.25636天(365天6时9分9.5秒)

流星赶月

来自 齐鲁周易网,原帖地址:http://www.qlzhouyi.com/ShowArticle2.asp?ArticleID=195

一、 推算年干支口诀

掌上推算年干支,支子花甲起根源。
阳支都是旬开始,天干为甲尾四年。
隔位逆推十年正,顺推年尾五零三。
逐支加减六十数,掌上推算千万年。
继续阅读 »

function ip2number($ip){
                $t=explode('.',$ip);
                $x=0;
                for($i=0;$i<4;$i++){
                    $x = $x*256+$t[$i];
             }
                return $x;
            }
 function number2ip($num){
                $t=$num;
                $a=array();
                for($i=0;$i<4;$i++){
                    $x=$t%256;
                    if($x<0)$x+=256;
                    array_unshift($a, $x);
                    $t = intval($t/256);
                }
                return implode('.',$a);
            }

« 更新的文章 - 更旧的文章 »