JoyCog

Check-in [4535761621]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Correct qsort1, don't nest gear pairs, build up triples and concat

The qsort1 definition was wrong, hence the comment about the wrong
result. I'd forgot that `swap23` mentioned here:

http://www.kevinalbrecht.com/code/joy-mirror/j06prg.html

isn't just `swap`, but rather `[swap] dip`. However, before I realised
that I wondered if the nested gear pairs was the issue and decided to
build up a flatter list. I.e. [ [ 4.16667 12 50] ... ] as opposed to
[ [ 4.16667 [12 50] ] ... ]. I think I prefer this approach anyway as
rather than build up a list of ratios, then a list of pairs and then zip
these together, can build up two lists of triples and just concat these.

Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | origin/master | trunk
Files: files | file ages | folders
SHA3-256: 4535761621f7455fe961e4b415df644c6f2e7985615b46a8ce4668cea43e7e7f
User & Date: base@atomicules.co.uk 2014-02-06 10:17:17
Context
2014-02-06
13:07
Oooh, starting to get the hang of this. Ratios takes littlegears as arg

Biggears is still defined inline, but ratios is now a proper function. check-in: e2673caf01 user: base@atomicules.co.uk tags: origin/master, trunk

10:17
Correct qsort1, don't nest gear pairs, build up triples and concat

The qsort1 definition was wrong, hence the comment about the wrong
result. I'd forgot that `swap23` mentioned here:

http://www.kevinalbrecht.com/code/joy-mirror/j06prg.html

isn't just `swap`, but rather `[swap] dip`. However, before I realised
that I wondered if the nested gear pairs was the issue and decided to
build up a flatter list. I.e. [ [ 4.16667 12 50] ... ] as opposed to
[ [ 4.16667 [12 50] ] ... ]. I think I prefer this approach anyway as
rather than build up a list of ratios, then a list of pairs and then zip
these together, can build up two lists of triples and just concat these. check-in: 4535761621 user: base@atomicules.co.uk tags: origin/master, trunk

2014-02-05
12:18
First commit, adding new file. Almost working check-in: 8e5a99e87b user: base@atomicules.co.uk tags: origin/master, trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to joycog.joy.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(* Given two lists of gear sprockets will calculate all ratios *)

DEFINE

	(* Constants. Ultimately these want to be arguments to the programme *)

	littlegears == [12 13 15 17 19 21 23 26];
	biggears == [30 50];

	(* Calculate Ratios *)

	biggear1 == biggears first 1.0 *;
	biggear2 == biggears second 1.0 *;

	ratios1 == [biggear1 swap /] map;
	ratios2 == [biggear2 swap /] map;

	ratios == littlegears dup ratios2 swap ratios1 concat;

	(* Make up gear pairs *)

	(* Since can't find a way to format integer as string, rather than list 
	    results as [ [ 4.16667 "50/12" ] ... ], list as [ [ 4.16667 [ 50 12 ] ] ... ]
	 *)

	pairs1 == [ biggear1 unitlist cons] map;
	pairs2 == [ biggear2 unitlist cons] map;

	pairs == littlegears dup pairs2 swap pairs1 concat;

	(* Zip together *)

	ratiosandpairs == ratios pairs zip;

	(* Sort *)

	qsort1 == [ small ]
			  [ ]
			  [ uncons [[first] unary2 > ] split ]
			  [ swap cons concat ]
			  binrec;

	sorted == ratiosandpairs sorted.

	(* Almost working, but list is a bit flattened and includes empty lists *)







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
<
<
<




|
|
|
|

|
<
<
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30




31
32
33
34
35
36
37
38
39
40


(* Given two lists of gear sprockets will calculate all ratios *)

DEFINE

	(* Constants. Ultimately these want to be arguments to the programme *)

	littlegears == [12 13 15 17 19 21 23 26];
	biggears == [34 50];

	(* Build up list of ratios and gear pairs *)

	biggear1 == biggears first
	            1.0 *;
	biggear2 == biggears second
	            1.0 *;

	ratios1 == littlegears dup
	           [biggear1 swap /] map
	           swap
	           zip
	           [biggear1 unitlist concat] map;

	ratios2 == littlegears dup
	           [biggear2 swap /] map
	           swap
	           zip
	           [biggear2 unitlist concat] map;
	
	ratios == ratios1 ratios2 concat;





	(* Sort *)

	qsort1 == [ small ]
	          [ ]
	          [ uncons [[first] unary2 > ] split ]
	          [ [swap] dip cons concat ]
	          binrec;

	sorted == ratios qsort1.