infix functions with patterns
Jon Loldrup <[email protected]> Thu, 14 Jan 2010 14:16:24 +0100
| Newsgroups | gmane.comp.lang.sml.smlnj |
|---|---|
| Message-ID | <[email protected]> |
Hi
I'm new on this mailinglist. I'm implementing an ant colony algorithm
in SML and I'm trying to make an infix function (fun CarCAdd) to add
two cartesian coordinates:
fun (CarC(X(x1),Y(y1)) CarCAdd CarC(X(x2),Y(y2))) =3D CarC(X(x1+x2),Y(y1+y2=
))
I get this error message:
File "/tmp/sml2231HHf", line 47, characters 4-49:
! fun (CarC(X(x1),Y(y1)) CarCAdd CarC(X(x2),Y(y2))) =3D CarC(X(x1+x2),Y(y1+=
y2))
! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (*these ^ are pointing up to*)
! Ill-formed left hand side of a clause (*but
not including the =3D *)
[closing file "/tmp/sml2231HHf"]
I have another infix function using pattern matching as well:
fun (Rad(r1)) radAdd (Rad(r2)) =3D Rad(r1+r2)
so I don't see why my CarC should be erroneous.
Heres the rest of the code needed to compile:
(the compiler output is below the code)
load "Math";
open Math;
load "Random";
open Random;
load "Array2";
load "Array";
open Array;
load "Real";
open List;
val RGen =3D newgen()
val RNum =3D random RGen
datatype xCoord =3D X of real
datatype yCoord =3D Y of real
datatype angle =3D Rad of real
datatype distance =3D Dist of real (*en vektors l=E6ngde*)
datatype polCoord =3D PolC of (angle*distance) (*radian*laengde*)
datatype carCoord =3D CarC of (xCoord*yCoord) (*x,y Cartesiske koordinat=
er*)
datatype path =3D Path of (angle array) (*een vej*)
datatype paths =3D Paths of (path array) (*en vej pr myre*)
datatype feromone =3D Ferom of real
datatype feroSpot =3D fSpot of (feromone*carCoord)
datatype feroSpots=3D fSpots of (feroSpot list)
val origo =3D CarC(X(0.0),Y(0.0))
val orig =3D CarC(X(1.0),Y(1.0))
val dest =3D CarC(X(5.0),Y(2.0))
val antsNum =3D 17
val jointsNum =3D 5
val lengths =3D fromList([1,2,1,2,1])
fun PCtoCC Polk(Rad(rad),Dist(dist)) =3D CarC(X(dist*cos(rad)),Y(dist*sin(r=
ad)))
infix radAdd
fun (Rad(r1)) radAdd (Rad(r2)) =3D Rad(r1+r2)
(*adds cartesian coordinates*)
infix CarcAdd
fun (CarC(X(x1),Y(y1)) CarCAdd CarC(X(x2),Y(y2))) =3D CarC(X(x1+x2),Y(y1+y2=
))
*******************************************
*******************************************
The compiler gives me the following:
(The error description is at the bottom
I used MoSML for this ouput, to get
a more detailed error description)
*******************************************
*******************************************
Moscow ML version 2.01 (January 2004)
Enter `quit();' to quit.
- [opening file "/tmp/sml2231HHf"]
> val it =3D () : unit
> type real =3D real
val cos =3D fn : real -> real
val tan =3D fn : real -> real
val ln =3D fn : real -> real
val pi =3D 3.14159265359 : real
val cosh =3D fn : real -> real
val pow =3D fn : real * real -> real
val exp =3D fn : real -> real
val tanh =3D fn : real -> real
val asin =3D fn : real -> real
val atan2 =3D fn : real * real -> real
val log10 =3D fn : real -> real
val acos =3D fn : real -> real
val atan =3D fn : real -> real
val sin =3D fn : real -> real
val sinh =3D fn : real -> real
val e =3D 2.71828182846 : real
val sqrt =3D fn : real -> real
> val it =3D () : unit
> type generator =3D generator
val rangelist =3D fn : int * int -> int * generator -> int list
val newgenseed =3D fn : real -> generator
val random =3D fn : generator -> real
val newgen =3D fn : unit -> generator
val range =3D fn : int * int -> generator -> int
val randomlist =3D fn : int * generator -> real list
> val it =3D () : unit
> val it =3D () : unit
> type 'a array =3D 'a array
val 'a copy =3D fn :
{di : int, dst : 'a array, len : int option, si : int, src : 'a array} ->
unit
val 'a length =3D fn : 'a array -> int
val 'a update =3D fn : 'a array * int * 'a -> unit
val ('a, 'b) foldr =3D fn : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b
val maxLen =3D 4194303 : int
val 'a tabulate =3D fn : int * (int -> 'a) -> 'a array
val 'a extract =3D fn : 'a array * int * int option -> 'a vector
val 'a array =3D fn : int * 'a -> 'a array
val 'a appi =3D fn : (int * 'a -> unit) -> 'a array * int * int option ->=
unit
val ('a, 'b) foldri =3D fn :
(int * 'a * 'b -> 'b) -> 'b -> 'a array * int * int option -> 'b
val 'a modifyi =3D fn : (int * 'a -> 'a) -> 'a array * int * int option -=
> unit
val 'a modify =3D fn : ('a -> 'a) -> 'a array -> unit
val 'a sub =3D fn : 'a array * int -> 'a
val 'a app =3D fn : ('a -> unit) -> 'a array -> unit
val 'a fromList =3D fn : 'a list -> 'a array
val ('a, 'b) foldli =3D fn :
(int * 'a * 'b -> 'b) -> 'b -> 'a array * int * int option -> 'b
val ('a, 'b) foldl =3D fn : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b
val 'a copyVec =3D fn :
{di : int, dst : 'a array, len : int option, si : int, src : 'a vector} ->
unit
> val it =3D () : unit
> datatype 'a list =3D
('a list,{con 'a nil : 'a list, con 'a :: : 'a * 'a list -> 'a list})
val 'a tabulate =3D fn : int * (int -> 'a) -> 'a list
val 'a rev =3D fn : 'a list -> 'a list
exn Empty =3D Empty : exn
val 'a tl =3D fn : 'a list -> 'a list
val 'a partition =3D fn : ('a -> bool) -> 'a list -> 'a list * 'a list
val ('a, 'b) map =3D fn : ('a -> 'b) -> 'a list -> 'b list
val 'a take =3D fn : 'a list * int -> 'a list
con 'a :: =3D fn : 'a * 'a list -> 'a list
val 'a last =3D fn : 'a list -> 'a
val 'a all =3D fn : ('a -> bool) -> 'a list -> bool
val 'a getItem =3D fn : 'a list -> ('a * 'a list) option
val 'a revAppend =3D fn : 'a list * 'a list -> 'a list
val 'a hd =3D fn : 'a list -> 'a
val 'a null =3D fn : 'a list -> bool
val 'a length =3D fn : 'a list -> int
val 'a filter =3D fn : ('a -> bool) -> 'a list -> 'a list
val 'a drop =3D fn : 'a list * int -> 'a list
val 'a app =3D fn : ('a -> unit) -> 'a list -> unit
val 'a nth =3D fn : 'a list * int -> 'a
val 'a exists =3D fn : ('a -> bool) -> 'a list -> bool
val 'a concat =3D fn : 'a list list -> 'a list
val ('a, 'b) mapPartial =3D fn : ('a -> 'b option) -> 'a list -> 'b list
con 'a nil =3D nil : 'a list
val 'a find =3D fn : ('a -> bool) -> 'a list -> 'a option
val ('a, 'b) foldl =3D fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b
val 'a @ =3D fn : 'a list * 'a list -> 'a list
val ('a, 'b) foldr =3D fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b
File "/tmp/sml2231HHf", line 47, characters 4-49:
! fun (CarC(X(x1),Y(y1)) CarCAdd CarC(X(x2),Y(y2))) =3D CarC(X(x1+x2),Y(y1+=
y2))
! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (*these ^ are pointing up to*)
! Ill-formed left hand side of a clause (*but
not including the =3D *)
[closing file "/tmp/sml2231HHf"]
kind regards Jon Loldrup
---------------------------------------------------------------------------=
---
Throughout its 18-year history, RSA Conference consistently attracts the
world's best and brightest in the field, creating opportunities for Confere=
nce
attendees to learn about information security's most important issues throu=
gh
interactions with peers, luminaries and emerging and established companies.
http://p.sf.net/sfu/rsaconf-dev2dev