Newbie questions about Pliant
 Newbie questions about Pliant strange problem or bug squaring a zero doesn't work for some reason. Message posted by maybe Boris Reitman on 2005/12/09 19:23:28 ----------------8<----------------type Point  field Float x ymethod p dump  arg Point p  console "(" + string:(p:x) + ", " string:(p:y) ")" eolfunction do_something a  arg Point a  a dump  console (a:x)^2function point x y -> a  arg Float x y ; arg Point a  a:x := x ; a:y := ydo_something (point 0.1 0.1)console eoldo_something (point 0 0)----------->8----------------------Here is the run,----------8<-----------------------(0.1, 0.1)0.01(0, 0)?---------->8-----------------------Why is the ? mark there, instead of 0 ? Message posted by hubert.tonneau on 2005/12/09 22:29:11 Because 0.0^2 is undefined, and undefined is displayed as a question mark.Just try:pliant command 'console 0^2 eol'then:pliant command 'console 0.0^2 eol' Message posted by maybe Boris Reitman on 2005/12/10 11:38:29 Why is such behaviour desirable ?  Here I want to implement the distance squaredfunction between two points. I had to do the squaring by repeating the terms, instead of using ^2 for squaring, which is inconvenient.function distance2 a b -> d  arg Point a b ; arg Float d  d := (a:y - b:y) * (a:y - b:y) + (a:x-b:x) * (a:x-b:x) Message posted by hubert.tonneau on 2005/12/10 13:15:27 Let's imagine that we want to define:function '^' x y  arg Float x arg Int yWhat is the code for it ?Do we define at as a loop, so that x<=0 is allowed, but with potencialunresonable computation time, or do we define it as using exponencial,so that x<=0 is not allowed ?What I believe is that Pliant current behaviour is just the one you willfind in any other language. Message posted by pom on 2005/12/10 15:35:48 The code should be soething like:if x>0  return (exp y*log:x)eif x=0  if y>0    return 0  eif y=0    return 1 # usual  else     ??eif ((y cast Int)=y and y>0)  if (y cast Int)%2=1     return -(exp y*(log -x))  else     return (exp y*(log -x))else  ?? Message posted by pom on 2005/12/10 15:36:08 The code should be soething like:if x>0  return (exp y*log:x)eif x=0  if y>0    return 0  eif y=0    return 1 # usual  else     ??eif ((y cast Int)=y and y>0)  if (y cast Int)%2=1     return -(exp y*(log -x))  else     return (exp y*(log -x))else  ??