Looking at the J expression to calculate would not make any sense to someone who does know J. Giving a reference or even putting the original expression using traditional mathematical syntax and showing their similarity would show how J is not that hard to read.
On Fri, Feb 21, 2014 at 7:02 PM, Pascal Jasmin <godspiral2...@yahoo.ca>wrote: > Even if spreadsheets are streets behind (unhip), I think people still want > to make calculations, and J is both quicker than any other language, and > much quicker than spreadsheets. A key benefit to powerful one liners is > interactively obtaining answers. > > The way I would enhance the original example would be to enhance it to > daily interest and more specific payment schedules. It is relatively easy > concept, that would seem intimidating to code at the same time: > > toDailyint =: ^&365 inv > > (^&365 inv) 1.05 > 1.00013 > > looks right, and didn't even need to know the math to find it. other > language problems. > > 1.000131 ^ 365 > 1.04859 > > could point out the extended precision option x:@(^&365 inv) if there is > a need to get it right, but the above is probably the number the > bank/lender would use. > > Lets say you want to make payments every 2 weeks. > > 28$ 1,~ 13 # 0 > 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 > > shows payments for 28 days. > > 3650 $ 1,~ 13 # 0 NB. payment days for 10 years. > > 0 0 0 , 3650 $ 1,~ 13 # 0 NB. if payments start 2 weeks from 3 days from > now. (then 2 weeks thereafter) > > > biweekly =. 40 * 3650 $ 1,~ 13 # 0 NB. $40 payments biweekly for 10 > years. > > > ] endofyearmarks =: <: 365 * >: i.10 NB. will be used for > display/classification and bonus payments. > 364 729 1094 1459 1824 2189 2554 2919 3284 3649 NB. <: used to compensate > for 0 start. > > > yearly =. 100 endofyearmarks} 3650 $ 0 NB. pay $100 at end of each year. > > 100 (endofyearmarks - 30)} 3650 $ 0 NB. would set payment date 30 days > prior to end of each year. > > > payments =. biweekly + yearly NB. add lists of payments like a > spreadsheet would. Reason to calculate separately and sum is that payments > might occur on same days. Cool feature of J, that drew me into the > language. When I was learning it, I called these "noun collisions"... > smashing together data structures into 1. > > (0,endofyearmarks) { ([-~(toDailyint 1.05)*])/\. 10000,~|.payments > 1630.09 2663.44 3647.23 4584.05 5476.11 6325.57 7134.43 7904.64 8638.04 > 9336.39 10001.3 > > One issue with the above, is that payments is a compound noun without any > major benefits to it being so. The advantage of single powerful lines is > that we don't have to recompute nouns for instance if we modified biweekly > or yearly, or added a new payment stream. To balance that and readability, > a better version of the statement is: > > (0,endofyearmarks) { ([-~(toDailyint 1.05)*])/\. 10000,~|. biweekly + > yearly > 1630.09 2663.44 3647.23 4584.05 5476.11 6325.57 7134.43 7904.64 8638.04 > 9336.39 10001.3 > > Darn.... I was hoping to have the loan paid off in 10 years. > There needs to be a modification to find the day that a 0 balance is > reached, but a cool reshaping feature is available > > (0,endofyearmarks) { ([-~(toDailyint 1.05)*])/\. 10000,~|. (12*365) > $ biweekly + yearly > _590.933 546.808 1630.31 2663.44 3647.23 4584.05 5476.11 6325.57 7134.43 > 7904.64 8638.04 > > shows results at the end of years 2 to 12, and tells us that full > repayment is made sometime in year 11. To find exact date: > > (1 i:~ 0>:]) ([-~(toDailyint 1.05)*])/\. 10000,~|. (12*365) $ biweekly > + yearly > 170 > > 170 days before end of year 12. > > To me, there would be major struggles in accomplishing this in another > language, and a spreadsheet probably doesn't have enough rows. > > A good punch line is to show J performance by extending the example to a > $23100 loan paid over 100 years... by simple modification to edit history > > (0,endofyearmarks) { ([-~(toDailyint 1.05)*])/\. 23100,~|. (100*365) $ > biweekly + yearly > _4164.15 _2855.63 _1609.02 _421.909 708.536 1785.02 2810.1 3786.23 4715.75 > 5600.86 6443.7 > > I found 23100 by trial and error, by adjusting it until the last 10 years > crossed the 0 point, but it shows off J's speed in calculating through > 40000+ rows instantly, and everything else that happens on that line. > Never mind the pain of copy pasting 40000 rows in a spreadsheet, updating > the starting loan value would bring it to its knees. > > > > ----- Original Message ----- > From: Brian Schott <schott.br...@gmail.com> > To: Programming forum <programm...@jsoftware.com> > Cc: > Sent: Friday, February 21, 2014 6:51:02 PM > Subject: Re: [Jprogramming] J in 5 minutes > > Don, > > My intent was not to make the essay a financial tutorial, but to highlight > the beauty and uniqueness of J code, so some of those details seem > inappropriate. I need another introductory sentence/statement or else I > need to change the example. > > Thanks for you help, > > > > On Fri, Feb 21, 2014 at 4:51 PM, Don Guinn <dongu...@gmail.com> wrote: > > > I'm confused! I assume that the annual payment against the $10000 loan is > > $1000. Which means that the value of the loan must be more than $7000 as > > only $3000 has been paid against it. Yet the line which should be the > value > > of the loan after three years shows $3711.05. > > > > I think the description of the problem needs to include the amount of > > payment and if the payments are annual or whatever. Also, it would help > to > > reference the formula used, such as a link to a web page deriving that > > formula rather than seeing it in J without an explanation. > > > > And I couldn't view the video either. > > > > > > > -- > (B=) > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm