使用Maple我如何提示用户回答布尔表达式?

时间:2014-02-02 02:35:17

标签: maple

确切的问题是“你要使用的等式x = f(Xo)”。这是if语句已经如此,如果是,则继续,如果没有则提示用户输入不同的函数。

1 个答案:

答案 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将被指定为副作用。