exceeding nr of arguments in a list (or zf-expression)

demast.pjf@hsbrabant.nl demast.pjf@hsbrabant.nl
Wed, 12 Apr 2000 18:16:20 +0200


Hello,

For solving puzzles zf-expressions are sometimes useful, but the maximum nr
of expressions (generators and filters) is 32 according to the reference
manual. In the following function (to solve a puzzle, to fill in 19 unique
numbers in a hexagon so that each row/column has the sum 38) the compiler
starts complaining before this maximum has been reached, the following zf
expression had 30 generators and filters, but according to the compiler it's
more then 32:

Any suggestions why the compiler thinks there are more then 32 expressions?

(I solved it by splitting up the generator, but it looks ugly because you
need to give the help functions a list of numbers found so far.)

Paul de Mast


hexagon :: [Int]
hexagon
= hd [ [x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19]
		\\	x1 <- [15]
		,	x2 <- removeMembers [1..19] [x1]
		,	x3 <- removeMembers [1..19] [x1,x2]
		|	sum [x1,x2,x3] == 38
		,	x4 <- removeMembers [1..19] [x1,x2,x3]
		,	x8 <- removeMembers [1..19] [x1,x2,x3,x4]
		|	sum [x1,x4,x8] == 38
		,	x7 <- removeMembers [1..19] [x1,x2,x3,x4,x8]
		,	x12 <- removeMembers [1..19] [x1,x2,x3,x4,x8,x7]
		|	sum [x3,x7,x12] == 38
		, 	x13 <- removeMembers [1..19] [x1,x2,x3,x4,x8,x7,x12]
		,	x17 <- removeMembers [1..19] [x1,x2,x3,x4,x8,x7,x12,x13]
		|	sum [x8,x13,x17] == 38
		,	x18 <- removeMembers [1..19] [x1,x2,x3,x4,x8,x7,x12,x13,x17]
		,	x19 <- removeMembers [1..19] [x1,x2,x3,x4,x8,x7,x12,x13,x17,x18]
		|	sum [x18,x19,x17] == 38
		,	x16 <- removeMembers [1..19] [x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19]
		|	sum [x16,x19,x12] == 38
		,	x11 <- removeMembers [1..19] [x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19,x16]
		,	x15 <- removeMembers [1..19]
[x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19,x16,x11]
		|	sum [x7,x11,x15,x18] == 38
		,	x5 <- removeMembers [1..19]
[x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19,x16,x11,x15]
		,	x6 <- removeMembers
[1..19][x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19,x16,x11,x15,x5]
		|   	sum [x4,x5,x6,x7] == 38 && sum [x2,x6,x11,x16] == 38
		,	x9 <- removeMembers [1..19]
					[x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19,x16,x11,x15,x5,x6]
		|	sum [x2,x5,x9,x13] == 38
		,	x10 <- removeMembers [1..19]
					[x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19,x16,x11,x15,x5,x6,x9]
		|	sum [x8,x9,x10,x11,x12] == 38	&& sum [x1,x5,x10,x15,x19] == 38
		,	x14 <- removeMembers [1..19]
					[x1,x2,x3,x4,x8,x7,x12,x13,x17,x18,x19,x16,x11,x15,x5,x6,x9,x10]
		|  	sum [x13,x14,x15,x16] == 38
			&& sum [x3,x6,x10,x14,x17] == 38
			&& sum [x4,x9,x14,x18] == 38
	]