[LON-CAPA-cvs] cvs: loncom /homework response.pm

riegler lon-capa-cvs-allow@mail.lon-capa.org
Fri, 10 Aug 2007 18:16:28 -0000


riegler		Fri Aug 10 14:16:28 2007 EDT

  Modified files:              
    /loncom/homework	response.pm 
  Log:
  Two changes in &implicit_multiplication:
  [1] (debateable)
  Replaced \w by [A-Za-z0-9]. This assumes that in a student's answer a variable name never starts or ends with underscore. On the other hand this makes it possible to use underscore as an operator (e.g. a _ 3 for (a,3) is member of a relation. Can't think of a better example...)
  [2] (required) Hitherto
  $expression=~s/(\w)\s+(\w)/$1\*$2/gs
  or
  $expression=~s/([A-Za-z0-9])\s+([A-Za-z0-9])/$1\*$2/gs
  transform
  6 a b c d e f
  into 
  6*a b*c d*e f
  whereas
  while($expression=~s/([A-Za-z0-9])\s+([A-Za-z0-9])/$1\*$2/gs){pos($expression)--}
  will produce the desired output
  6*a*b*c*d*e*f
  
Index: loncom/homework/response.pm
diff -u loncom/homework/response.pm:1.173 loncom/homework/response.pm:1.174
--- loncom/homework/response.pm:1.173	Mon Jun 25 21:40:47 2007
+++ loncom/homework/response.pm	Fri Aug 10 14:16:28 2007
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # various response type definitons response definition
 #
-# $Id: response.pm,v 1.173 2007/06/26 01:40:47 albertel Exp $
+# $Id: response.pm,v 1.174 2007/08/10 18:16:28 riegler Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -569,15 +569,16 @@
     $expression=~s/(\d+)(?:x|\*)10(?:\^|\*\*)([\+\-]*\d+)/$1\&\($2\)/gsi;
 # Fill in multiplication signs
 # a b -> a*b;3 b -> 3*b;3 4 -> 3*4
-    $expression=~s/(\w)\s+(\w)/$1\*$2/gs;
+# The while-pos-construction is necessary for a b c -> a*b*c*d instead of a*b c*d
+    while($expression=~s/([A-Za-z0-9])\s+([A-Za-z0-9])/$1\*$2/gs){pos($expression)--}
 # )( -> )*(; ) ( -> )*(
     $expression=~s/\)\s*\(/\)\*\(/gs;
 # 3a -> 3*a; 3( -> 3*(; 3 ( -> 3*(; 3A -> 3*A
     $expression=~s/(\d)\s*([a-zA-Z\(])/$1\*$2/gs;
 # a ( -> a*(
-    $expression=~s/(\w)\s+\(/$1\*\(/gs;
+    $expression=~s/([A-Za-z0-9])\s+\(/$1\*\(/gs;
 # )a -> )*a; )3 -> )*3; ) 3 -> )*3
-    $expression=~s/\)\s*(\w)/\)\*$1/gs;
+    $expression=~s/\)\s*([A-Za-z0-9])/\)\*$1/gs;
 # 3&8 -> 3e8; 3&-4 -> 3e-4
     $expression=~s/(\d+)\&\(([\+\-]*\d+)\)/$1e$2/gs;
     return $expression;