确切的问题是“你要使用的等式x = f(Xo)”。这是if语句已经如此,如果是,则继续,如果没有则提示用户输入不同的函数。
答案 0 :(得分:1)
关于它已经位于if statement
内的位不太可行,因为在初始响应为负的情况下,不允许为某些内容分配替代值。
你应该可以使用这样的东西。调用p()
,然后将其结果分配给ans
,然后使用该值(和/或针对某些属性对其进行测试)。
restart:
p := proc()
local answer, oldprompt, res1, res2;
oldprompt := interface(':-prompt'=``);
try
printf("Is the equation you want to use x=f(Xo)? (y/n)\n");
res1 := readline(-1);
if member(res1,{"y;","y","yes;","yes"}) then
answer := x=f(Xo);
elif member(res1,{"n;","n","no;","no"}) then
printf("Enter your equation.\n");
res2 := readline(-1);
answer := parse(res2);
else
printf("Response not recognized\n");
end if;
catch:
finally
interface(':-prompt'=oldprompt);
end try;
if answer='answer' then NULL else answer end if;
end proc:
ans := p();
[编辑如下]
可以让它更接近您的原件。使用下面的过程p
,返回的结果将是true / false / FAIL之一,并且可以在条件中使用。如果返回值为false(由于对初始查询的响应),则会对另一个表达式的选择进行第二次查询。
这个版本的p
有两个参数,第一个是建议的初始方程。第二个是可以任意替代的名称。
restart:
p := proc(candidate, resultvar)
local result, oldprompt, res1, res2;
oldprompt := interface(':-prompt'=``);
try
printf(sprintf("Is the equation you want to use %a? (y/n)\n",
candidate));
res1 := readline(-1);
if member(res1,{"y;","y","yes;","yes"}) then
result := true;
assign(resultvar,candidate);
elif member(res1,{"n;","n","no;","no"}) then
result := false;
printf("Enter your equation.\n");
res2 := readline(-1);
assign(resultvar,parse(res2));
else
printf("Response not recognized\n");
result := FAIL;
end if;
catch:
finally
interface(':-prompt'=oldprompt);
end try;
return result;
end proc:
现在我们可以测试一下。
p(x=f(X0), 'ans');
ans;
我们也可以在p
语句中使用对if
的调用。例如,
if p(x=f(X0), 'ans') then
"accepted";
else
"new choice made";
end if;
ans;
此处,对第一个查询回答“n”将使条件测试看到false
值,但命名参数ans
将被指定为副作用。