我已完成编程课的作业.我应该创建一个反转列表的Prolog程序.但是,我很难理解为什么它的确有效.
%1. reverse a list
%[a,b,c]->[c,b,a]
%reverse(list, rev_List).
reverse([],[]). %reverse of empty is empty - base case
reverse([H|T], RevList):-
reverse(T, RevT), conc(RevT, [H], RevList). %concatenation
Run Code Online (Sandbox Code Playgroud)
在这种情况下,RevT究竟是什么?我知道它应该代表T的反向或给定列表的其余部分,但是我没有看到它如何具有任何值,因为我没有将它分配给任何东西.它是否与RevList具有相同的用途,但对于每个递归调用?
另外,为什么我必须在我的conc()函数调用中使用[H]而不是H?H不是指列表的头部(例如:[H])?或者它只是引用列表头部的项目(只是H)?
请帮我解决这个问题.我正在努力理解这种编程背后的逻辑.
你能解释一下R-Code中循环的结构/概念吗?我不知道从哪里开始这个家庭作业问题.我能够创建我需要的指数分布
> rexp(n=200, rate=0.5)
Run Code Online (Sandbox Code Playgroud)
但现在我需要创建2000个这个rexp的样本并计算每个样本的平均值.然后我需要计算2,000个样本均值的均值和方差.我知道如何找到简单分布的均值和方差(例如:mean(rexp)
和var(rexp)
),所以我的主要问题是理解循环的概念并将其付诸行动.
所以我开始输入:
> rexp(n=200,rate=0.5)
Run Code Online (Sandbox Code Playgroud)
然后我命名这个指数分布:
> exdi = rexp(n=200,rate=0.5)
Run Code Online (Sandbox Code Playgroud)
基于一个处理总和的例子,我进入了
>y.exdi=vector(length=2000)
>for(i in 1:2000){y.exdi[ i ]=mean(exdi)}
Run Code Online (Sandbox Code Playgroud)
R工作区没有给出任何响应,所以我命名了这个函数并尝试了这个:
>Twothou = for(i in 1:2000){y.exdi[ i ]=mean(exdi)}
>mean(Twothou)
Run Code Online (Sandbox Code Playgroud)
但后来我收到此错误消息:
[1] NA
Warning message:
In mean.default(Twothou) : argument is not numeric or logical: returning NA
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
可以用{1,2,3,4}组制成多少个具有两个部分的不同分区?此列表中有4个元素需要分为2个部分.我写了这些,总共有7种不同的可能性:
现在我必须为集合{1,2,3,...,100}回答相同的问题.此列表中有100个元素需要分为2个部分.我知道分区的一部分最大可以是50(即100/2),最小的是1(因此一部分有1个数字而另一部分有99).如何在不写出每个可能组合的无关列表的情况下,确定两个部分的分区有多少种不同的可能性?答案可以简化为阶乘(例如12!)?
是否有一个通用的公式可以用来查找具有n个部分的多少个不同的分区可以由具有k个元素的集合组成?
我正在创建一个函数来读取用户的输入并将它们放入一个预定定位大小为25的浮点数字数组中.它还返回用户输入的项目总数.但是,由于某些原因,当我输入999时,这段代码不会终止.我知道它与int有关,它是一个int,输入是一个浮点数,但我真的不知道如何修复它(只是学习C五天).
int readArray(float a[]){
//accepts inputs and puts items in a predefined array of size 25
int index = 0;
float input;
printf("Enter 25 or less elements for array (999 to finish):\n");
scanf("%d", &input); //accept initial response; priming prompt
printf("1st Prompt accepted");
while (input != 999 && index < 25) {
printf("In while loop");
a[index] = input;
index++;
scanf("%d", &input);
}
return (index);
}
Run Code Online (Sandbox Code Playgroud)