"图灵完成"的含义是什么意思?
你可以给出一个简单的解释,而不会涉及太多的理论细节吗?
Eric Lippert对这个问题的评论让我彻底糊涂了.C#中的转换和转换有什么区别?
我已经习惯了命令式编程,这是告诉计算机逐步执行程序以获得最终结果的常用方法.另一方面,声明性编程只是传递输入并期望输出而不说明过程如何完成.我很困惑的是功能编程.我知道函数式编程是一种编程范式,它将计算视为数学函数的评估,避免使用状态和可变数据,而不是一种声明性语言.但是,我仍然不能理解它是如何工作的.
我们举一个执行Fibonacci数的例子.
命令式编程:
#include<stdio.h>
#include<conio.h>
main()
{
int n,i,c,a=0,b=1;
printf("Enter Fibonacci series of nth term : ");
scanf("%d",&n);
printf("%d %d ",a,b);
for(i=0;i<=(n-3);i++)
{
c=a+b;
a=b;
b=c;
}
printf("%d ",c);
getch();
}
Run Code Online (Sandbox Code Playgroud)
声明性编程:
Give the nth number and it will return the value of the nth number
Run Code Online (Sandbox Code Playgroud)
功能计划如何运作?
如果我的定义错了,请纠正我.请随意发表评论..
我正在学习斯卡拉,作为一名优秀的学生,我试图遵守我发现的所有规则.
一条规则是:不可靠性!
所以我试图使用不可变数据结构和val来编写所有代码,有时候这很难.
但今天我想到了自己:唯一重要的是对象/类应该没有可变状态.我不是被迫以不可变的样式编写所有方法,因为这些方法不会相互影响.
我的问题:我是否正确或有任何问题/缺点我看不到?
编辑:
aishwarya的代码示例:
def logLikelihood(seq: Iterator[T]): Double = {
val sequence = seq.toList
val stateSequence = (0 to order).toList.padTo(sequence.length,order)
val seqPos = sequence.zipWithIndex
def probOfSymbAtPos(symb: T, pos: Int) : Double = {
val state = states(stateSequence(pos))
M.log(state( seqPos.map( _._1 ).slice(0, pos).takeRight(order), symb))
}
val probs = seqPos.map( i => probOfSymbAtPos(i._1,i._2) )
probs.sum
}
Run Code Online (Sandbox Code Playgroud)
说明:这是一种计算变量阶齐次马尔可夫模型的对数似然的方法.state的apply方法获取所有先前的符号和即将到来的符号,并返回这样做的概率.
正如您所看到的:整个方法只是增加了一些使用变量更容易的概率.
我最近开始使用Play 2.5,我想知道做以下事情的目的是什么:
@Inject() (implicit val mat: Materializer)
Run Code Online (Sandbox Code Playgroud)
我有几段代码没有工作,并且由于这个问题解决了这个问题,但我仍然没有看到这个代码正在做什么.
谢谢
我已经制作了这个社区Wiki,因为有些人可能认为它可以辩论,其他人可能会认为这是一个用词来表示他们真正意义的问题(换句话说,这是一个意见问题,这是一个意见问题).
关于声明性编程的SO有一个普遍的问题,它有一些很好的答案.
但是我对微软福音传道者的这篇博文有点不满.
声明性编程的一个优点是,您可以指出您想要做什么,而不是如何做.
到目前为止,这么好 - 事实上,这与SO问题上接受的答案完全一致.
但是请查看有关"服务实施"的部分,
您可以查看几十行xaml代码,并能够确定如何配置WCF服务以及如何定义相应的工作流.
看了一些例子后,让我简单回答一下,说"不,我不能".但是,不要轻率地解雇这些东西,让我们看看文档.
这需要一段时间,但最终现实已经赶上了讽刺 ......但这不是重点 - 当然他们并没有认真地建议这样做来揭露像添加这样的微不足道的东西.我也不是在抱怨荒谬的冗长,以及任何人都会手写这样的东西的奇怪想法 - 它看起来更像是编译器的输出而不是人类可读的语言.
对我来说,难题是声称这是"声明性的".然而它的核心是一个任务声明.
还有更多:
声明性服务在XAML中以声明方式定义,并提供另一层抽象.基本上,您可以通过定义服务要执行的操作而不是如何执行操作来创建服务模型.整个服务可以以声明方式定义,包括操作的实现.
因此,如果我们说声明性或声明性三次,那就使它成为声明性的.疑难杂症.如果我们说出"你想做什么而不是怎么做"的神奇短语,那么我们可以忽略一点,在下一句话中,我们将指定"操作的实施",所以我们我会准确地说明如何做到这一点.
该页面中的示例是:
<wma:Sequence>
<wma:WriteLine Text ='[String.Concat(String.Concat(String.Concat(String.Concat("Add(", CType(op1, Object)), ","), CType(op2, Object)), ") called")]' />
<wma:Assign x:TypeArguments="xs:Int32" To="[result1]" Value="[op1 + op2]" />
</wma:Sequence>
Run Code Online (Sandbox Code Playgroud)
也就是说,整个事情(包括我从WF示例中删除的大量垃圾)恰恰相当于:
void Add(int op1, int op2, out int result1)
{
Console.WriteLine("Add(" + op1 + ", " + op2 + ") called");
result1 = op1 + op2; …Run Code Online (Sandbox Code Playgroud) scala ×2
terminology ×2
c# ×1
casting ×1
coding-style ×1
declarative ×1
immutability ×1
paradigms ×1
theory ×1
wcf ×1