表达式的非离散赋值是否只能在algorithm一个整数内function?
如果算法中需要许多模型参数,则直接在模型的算法部分中计算输出值会简单得多.
如果使用函数,则必须从环境中传递所有需要的参数值作为函数的输入.
在我看来,Modelica规范迫使一个人在函数内本地封装具有非离散赋值的整数.
这种整数赋值的一个可能的用例是,人们希望将传递特性表示为具有紧凑支持的平滑基函数的总和.
对于计算,某个输入值x 1的输出值必须确定其支持包含x的基函数的索引.
我将列表数据的线性插值的更简单的情况作为工作示例,其中必须找到插值间隔(即使这样的插值不可微).
在noEvent(...)代码中是不是真的需要,因为一个函数的算法部分内部关系,如果注释不产生事件GenerateEvents=true没有给出.
尽管如此,我还是将它包含在内,以显示对整数的非离散赋值的i结果.
model testInterpol
function interpol
input Real x;
input Real tab[:,2];
output Real y;
protected
Integer i;
algorithm
i:=size(tab,1);
for ii in 2:size(tab,1) loop
if noEvent(x < tab[ii,1]) then
i := ii;
break;
end if;
end for;
y := tab[i-1,2] + (tab[i,2]-tab[i-1,2])/(tab[i,1]-tab[i-1,1])*(x-tab[i-1,1]);
end interpol;
Real x = 10*sin(8*atan(1.0)*time);
parameter Real tab[:,2]={{1,1},{2,4},{3,9},{5,25},{6,36}};
Real y;
equation
y = interpol(x,tab);
end testInterpol;
Run Code Online (Sandbox Code Playgroud)
在以下模型中,类型Interpol …
nullptr除了每次访问都会导致访问冲突之外,是否有一种安全的方法可以在 C++ 中创建指针?
我不成功的尝试之一是将 1 添加到nullptr.
在我的特殊情况下,我需要 Visual Studio 2019 的解决方案。
关于car和cdr的Wikipedia页面说a cons是一对指针.
以下代码似乎证实:
(progn
(setq a '(1 . 2))
(setq b a)
(setf (car b) 10)
(print a))
Run Code Online (Sandbox Code Playgroud)
对该形式的评估给出了缺点(10 . 2).设置car的b变化car的a.您可以在compileonline.com上的在线代表中尝试.
Common Lisp规范中定义的行为在哪里?
(我已经阅读了一些文字,但找不到针对该行为的部分.)
有趣的是,维基百科上的conses页面说" cons构造存储两个值或指向值的内存对象".如果原子1直接存储在cons对象中,那么改变b不会改变a,是吗?
我在上面假设a并b保持cons对象而不是指向conses的指针.即使实际的lisp实现与指针一起使用,这在repl级别上也不应该是可见的,还是应该根据规范?当人们假设a并b保持指向两者的指针时,可以实现类似的效果cons.
Consing,即通过重复应用来构建列表cons,支持假设conses由符号值中的指针表示.
以下两种形式是等效的:
(let ((a '(1)))
(setq b (cons 2 a)))
Run Code Online (Sandbox Code Playgroud)
(setq b '(2 1))
Run Code Online (Sandbox Code Playgroud) 给出问题的代码如下.我已经评论了哪些部分提供了正确的输出,哪些没有,但我不知道为什么,以及我应该如何正常访问类成员数据.我读到尝试在C风格循环中访问并不是很好,但我尝试使用迭代器只能遇到"错误:不匹配'运算符<='(操作数类型是'播放器'和'__gnu_cxx :: __ normal_iterator>')"
class Player
{
public:
Player() {}
Player(double strength) {}
virtual ~Player() {}
double GetStrength() const {
return Strength;
}
void SetStrength(double val){
Strength = val;
}
int GetRanking() const{
return Ranking;
}
void SetRanking(int val){
Ranking = val;
}
int GetATPPoints() const{
return ATPPoints;
}
void SetATPPoints(int val){
ATPPoints = val;
}
protected:
private:
double Strength; //!< Member variable "Strength"
int Ranking; //!< Member variable "Ranking"
int ATPPoints; //!< Member variable "ATPPoints"
};
int main()
{ …Run Code Online (Sandbox Code Playgroud)