例如,如果我有一个列表[1,1,2,3,5,1],我想计算这个列表中 1 的数量,我该怎么做?
我写了类似的东西:
count([], 0).
count([H|T], N) :-
count(T, X),
( H =:= 1
-> N is X+1
; N is X
),
N > 0.
Run Code Online (Sandbox Code Playgroud)
在这个递归中,我想做如果 Head 等于 1,则计数 + 1,如果 Head 不为 1,则计数保持不变。但是,如果列表中的内容不是 1,它会返回 false。我知道问题在于,只要元素不满足 if 语句,它就会失败;它永远无法到达 else 语句。我该如何解决?请帮忙!!!!
例如,
第一个是这样的:
sum(X,Y,Result):- Result is X + Y.
Run Code Online (Sandbox Code Playgroud)
第二个是:
times(X,Y,R):- R is X * Y.
Run Code Online (Sandbox Code Playgroud)
我甚至可以这样定义它们吗?如果我想写一个比较两个结果的值的东西,我该怎么办?当我尝试做类似的事情时sum(X,Y,R1) > times(X,Y,R2),它不允许我.我想编写一个真实的程序R1 > R2.在这种情况下,我想得到和的X和Y的X和Y,并找出哪个值更大.我怎么能这样做?
所以我在这里有一个代码:
#include <iostream>
using namespace std;
int main(void){
int *p;
int i = 30;
*p = i;
*p = 100;
cout << i << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人能指出这段代码有什么问题吗?
我认为你不需要做像这样的事情
int *p = new int;
Run Code Online (Sandbox Code Playgroud)
因为可以指向堆栈变量.
当前更新:我早就应该弄清楚这个基本的常识...修复:
int *p;
int i = 30;
p = &i; //this stores the address of i. Then we can reach the value of i by calling *p
Run Code Online (Sandbox Code Playgroud)