newLISP Fan Club

Forum => newLISP newS => Topic started by: Kazimir Majorinc on May 08, 2008, 08:10:26 PM

Title: Promoting my blog.
Post by: Kazimir Majorinc on May 08, 2008, 08:10:26 PM
Hello



I'm new user of Newlisp, and I'll use it for next few months and hopefully longer. I wish to promote my blog at



http://kazimirmajorinc.blogspot.com



Thanks to author and contributors who made it possible.
Title:
Post by: Lutz on May 09, 2008, 06:16:49 AM
Welcome to newLISP and the group Kazimir. Just read your first blog entry about newLISP. Thanks for setting the record straight about macros in newLISP and for pointing out the first-class nature of functions and macro-functions in newLISP and the nature of 'eval'. There are two functions in newLISP, which relate to the macro discussion:



the 'letex' function:

http://newlisp.org/download/development/newlisp_manual.html#letex



the 'expand' function:

http://newlisp.org/download/development/newlisp_manual.html#expand



the links are to a newer cleaned up version of the manual, but these two functions work identical in the official release 9.3.0
Title:
Post by: cormullion on May 09, 2008, 09:42:20 AM
Hi Kazimir! Nice blog, nice first post, and I look forward to reading your 101st post... (Actually, the 10th post is the hardest one... :) Your enthusiasm for newLISP and your knowledge of Common Lisp and Scheme should make for some interesting posts.



I'll add your name to the list of distinguished newLISP bloggers on mine!
Title:
Post by: Kazimir Majorinc on May 09, 2008, 10:56:00 AM
One thing I perhaps should say as a new user in a relatively small community is that I do not expect any backward compatibility in the future, i.e. if author (or community) see an opportunity to improve the language, libraries breaking that compatibility, excellent, I'll adapt. Maybe it is already your policy, but I had to support the case.
Title:
Post by: Kazimir Majorinc on May 15, 2008, 10:41:02 PM
I wrote simple (actually extremely) simple benchmark that tested speed of eval in Newlisp and few Scheme and Lisp implementations. It turns that Newlisp eval ... well, look for yourself.
Title:
Post by: Kazimir Majorinc on October 26, 2008, 06:38:03 AM
Just published article "Macrocall" that develops strangely simple, but interesting macro system.
Title:
Post by: Kazimir Majorinc on November 25, 2008, 09:06:40 AM
I just posted new article on my blog: "Don't Fear Dynamic Scope." (link - see signature.)
Title:
Post by: Kazimir Majorinc on November 30, 2008, 08:16:38 AM
I just posted new article on my blog: "Don't Fear Dynamic Scope (2.)"
Title:
Post by: cormullion on December 03, 2008, 09:17:37 AM
Another impressive post! I like the way you mathematicians pursue simplicity and complexity at the same time!


Quote"Protect" is short, but very complicated function. It is function of the third order, i.e. it returns macros that generate functions.


:)
Title:
Post by: newdep on December 04, 2008, 12:10:17 PM
I must agree here... your blog is nice to read.. Though Am I the only one who

has to read it more then once ;-) It all looks so simple but there is some power in those lisp lines ;-) very nice...!  (Nasdrovja!)
Title:
Post by: Excalibor on December 11, 2008, 12:06:01 AM
Very interesting blog! I'm learning quite a bit, thanks a bunch and keep it up!



laters
Title:
Post by: Kazimir Majorinc on February 01, 2009, 07:05:44 PM
Another post, not that interesting for experienced Newlispers. Someone said on comp.lang.lisp that it would be nice that Newlisp can check whether someone supplied extra arguments to function. My last post "Challenged by CL" was strangely popular (200+ visits in one day, several times more than my record) and few people voted for it ( http://www.reddit.com/r/lisp/ )
Title:
Post by: cormullion on February 02, 2009, 09:21:10 AM
Quote from: "Kazimir Majorinc"My last post "Challenged by CL" was strangely popular (200+ visits in one day, several times more than my record)


there are a lot of CL-ers looking for an argument, it seems. I don't know why, but you're doing well, Kazimir!
Title:
Post by: DrDave on February 02, 2009, 09:41:31 AM
Quote from: "cormullion"
there are a lot of CL-ers looking for an argument, it seems.

@cormullion, was that "looking for an argument" in reference to "check whether someone supplied extra arguments to function", or meant being argumentative?
Title:
Post by: cormullion on February 02, 2009, 09:43:07 AM
both :) But I expect Kazimir's visitors came tooled up with their choice of weapon...
Title:
Post by: Kazimir Majorinc on February 07, 2009, 09:38:01 AM
I published three more posts in the meantime:



* Apply Has Its Secrets Too.

* Calculate or Ask.

* Test for Unnecessary Arguments.



Thanks on encouragement.
Title:
Post by: DrDave on February 07, 2009, 11:08:37 AM
Thanks for the nice analysis of Apply.
Title:
Post by: Kazimir Majorinc on February 08, 2009, 06:41:51 AM
Three new posts:
  • * The most probable cond.

    * Trees, branches and leaves.

    * Random sublists.
The first is another one expressive macro, other two are simple examples of functional programming.
Title:
Post by: cormullion on February 09, 2009, 10:16:22 AM
Excellent work as ever. With your productivity, I don't need to write any posts these days... :)



(Perhaps you are making your students write articles for you... ! :)
Title:
Post by: Kazimir Majorinc on February 09, 2009, 12:38:21 PM
Thanx. My main productivity limit is that I do not have discipline to go to sleep when my productivity falls. Anyone else in that boat? In the meantime:



* Decline of Lisp Usenet.



I expect this one to attract some people.
Title:
Post by: Kazimir Majorinc on February 14, 2009, 12:08:49 AM
Another post:



* More on Usenet Posting Frequency.
Title:
Post by: Kazimir Majorinc on February 23, 2009, 06:01:40 AM
Three new items:
  • * The Controversies are Going on.

    * Where is Letex!

    * Multiple Loops.
(for-multi ((i j) 0 8 4)
   (dotimes-multi ((i j) 5) (print "*"))
   (println " i= " i ", j=" j))
[/list]
Title:
Post by: Kazimir Majorinc on March 04, 2009, 04:54:39 PM
Three new posts:



* Add and Multiply Digits

* The First Use of Identity Function

* Text Titles
Title:
Post by: Kazimir Majorinc on March 12, 2009, 02:21:05 PM
I published four new posts in last few days:



* Gensym and Genlet.

* Genlocal.

* Genloops.



* Supernatural Symbols. (already published on this forum)
Title:
Post by: Excalibor on March 16, 2009, 07:27:26 AM
Kazimir, as always your blog is an interesting and educative reading, thanks for it!



But, in the name of all the conses, would you think about explaining further what's with supernatural symbols??? Please :-)



thx!
Title:
Post by: Kazimir Majorinc on March 16, 2009, 11:02:40 AM
Thanks.



I called them 'supernatural' because it appears that they know what happens around them very first moment they are mentioned in the program.



This is how I did it: Lutz just said that symbols are inserted into symbol table (symbol) during some preparation phase of the expression evaluation. So, symbols are already in (symbol) on the beginning of the evaluation of some block - even if subexpressions that mention these simbols for a first time weren't evaluated yet.



Only thing I needed to do is to remember list (symbol) before begin block, and then again on the beginning of the block. The difference between these two contains exactly variables used in block.



Code is for a dramatic effect hidden in the function self-conscious-symbols. But in essence, it is:



(set 'symbols-initially (symbols))

(begin (dolist(x (difference (symbols)           ;this list contains
                             symbols-initially)) ;Sri ... and x only
                             
              (set x (string "Hi. My name is " x ". Ohm...")))
               
       (println Sri-Aurobindo))
       
; Hi. My name is Sri-Aurobindo. Ohm...


Did I adressed the issue that interested you?
Title:
Post by: newdep on March 31, 2009, 01:48:47 PM
very nice kazimir ! -> //http://www.instprog.com/Instprog.default-library.lsp



perhpas 'nice' is an understatement here ;-)
Title:
Post by: Kazimir Majorinc on March 31, 2009, 10:43:57 PM
Thanks. It is perpetually in "experimental" phase, running tests etc, but in long terms I'll put it in some prettier form.
Title:
Post by: Excalibor on April 02, 2009, 02:23:01 AM
Quote from: "newdep"very nice kazimir ! -> //http://www.instprog.com/Instprog.default-library.lsp



perhpas 'nice' is an understatement here ;-)


Agreed! I already use it and abuse it, so thanks for the great work.



Now, returning to supernatural symbols, I think I get the idea...  It's interesting, though, as it came to my mind this could be used to make functions that shape themselves at evaluation time depending on outside knowledge (via (symbols)) at the moment of evaluation... Maybe it's a silly idea, but it could allow not just self-mutating functions, but also evolutionary ones?



Just a quick thought...



When's your next blog entry coming? :-)



laters and thanks!
Title:
Post by: Kazimir Majorinc on April 02, 2009, 01:34:03 PM
Thanks again, Excalibor.



No, I do not think it is silly idea, quite contrary, it is interesting idea. Analogies with physical world are very promissing.



I think I'll have new post in 2-3 hours.
Title:
Post by: itistoday on April 04, 2009, 06:15:36 PM
Great blog Kazimir! I worked through your genlet function and modified it a bit to avoid some variable capture possibilities, as well as changing it to support both forms of 'let' (i.e: (let (i 0) .. ) vs. (let ((i 0)) .. )):


(define-macro (genlet)
(if (list? (args 0 0))
; (genlet ((var1 val1) (var2 val2)) ... )
(letex
( H1 (map (fn (x) (list (x 0) '(gensym))) (args 0))
H2 (args 0)
  H3 (cons 'begin (rest (args)))
H4 (cons 'begin (map
(fn (x) (list 'delete (list 'quote (x 0))))
(args 0)))
)
(letex H1 (first (list (let H2 H3) H4)))
)
; (genlet (var1 val1 var2 val2) ... ) => convert to other form
(letex (H1 (cons 'genlet (cons (explode (args 0) 2) (rest (args)))))
(eval H1)
)
)
)
Title:
Post by: Kazimir Majorinc on April 05, 2009, 10:14:42 AM
Thanx, itistoday.



I have noted that actually letex does different thing than I though initially. I thought that



(letex((x 1))(f x))



is equivalent to



(f 1)



while local binding of x to 1 does not exist in time of evaluation. It turned it is not true, as can be seen from this code:


(set 'x 100)
(letex ((x 1))
      (print (eval (sym "x")))

(exit)

It evaluates to - 1, not to 100.



It happens because



(letex((x 1))(f x something))



is actually



(let ((x 1))(eval (expand '(f x something) 'x))



and not



(eval (let ((x 1))(expand '(f x something) 'x))



as I thought to be. So, x=1 binding is actually alive in moment of eval. It might cause overshadowing of some outer x. That's why I have to replace all letex with "manual" combination of eval and expand.



Lutz, maybe letex should be replaced or supported with evlex?
Title:
Post by: Lutz on April 05, 2009, 10:57:23 AM
Yes, it is the local version of 'x' which gets expanded, and the body of the 'letex' expression gets evaluated in the local scope. Like in a simple 'let', the locals shadow the outer scope.



'letex' is like a 'let' plus expansion of locals in the body before the evaluation of that body. You take out the expansion and have a normal 'let'.
Title:
Post by: Kazimir Majorinc on April 08, 2009, 11:12:11 AM
Two new items:



* On macroexpansion.

* Crawler tractor.



(//%3C/s%3E%3CURL%20url=%22http://www.instprog.com/crawler-tractor/Landwasserschlepper%20comienza%20en%201936green.png%22%3E%3CLINK_TEXT%20text=%22http://www.instprog.com/crawler-tractor%20...%206green.png%22%3Ehttp://www.instprog.com/crawler-tractor/Landwasserschlepper%20comienza%20en%201936green.png%3C/LINK_TEXT%3E%3C/URL%3E%3Ce%3E)
Title:
Post by: newdep on April 08, 2009, 12:36:30 PM
Hi Kazimir,



I did not see my feedback on you blog so im posting it here..



Im getting a Stack error when using your infinite loop function push/pop.

(Crawler Tractor)



ERR: call stack overflow : pop <8060DC0>

called from user defined function f



That is a little odd i think because your function is in my eyes not

consuming memory/stack... It is though hitting the 64bit barrier, but

then the newlisp error message is wrong...



btw..nice pictures..heheh Real! Enginering..
Title:
Post by: Kazimir Majorinc on April 08, 2009, 01:48:32 PM
Same for me, at



"Hi for the 790000. time."



(sys-info) suggests that number of Lisp cells - is growing all the time. It appears that pop doesn't release memory.



Yes, vehicle is great. Landwasserschlepper from 1936.
Title:
Post by: axtens on April 08, 2009, 09:11:43 PM
While we're on the subject of blogs, I've just made my first newLISP posting on my own blog (//http)



Kind regards,

Bruce.
Title:
Post by: Lutz on April 09, 2009, 01:17:34 AM
The error message is misleading and will be changed, its not the call stack but the result-stack from ORO management which never gets cleared in Kazimir's self modifying function, which never returns. Under normal circumstances 'pop' will release memory.
Title:
Post by: Kazimir Majorinc on April 09, 2009, 07:14:05 AM
Lutz, is there a chance to make this normal circumstance? Or at least to add some command for manual memory release in that case?



One advantage of the ORO concept might be that functions know their reference, being it some symbol, like x, or expression like (L 1). Any chance for that? Sorry if I asked for that already, I forgot.



Very interesting blog, axtens. Impressive number of programming languages.



I encourage everyone to start writting blog because it really helps. Helps in what? To initiate or increase communication about topics you want to communicate.
Title:
Post by: axtens on April 09, 2009, 07:40:31 AM
Quote from: "Kazimir Majorinc"Very interesting blog, axtens. Impressive number of programming languages.



I encourage everyone to start writting blog because it really helps. Helps in what? To initiate or increase communication about topics you want to communicate.


Thanks for the encouragement. Yes, maintaining a weblog is good on a variety of levels, including as practice in making technical writing comprehensible.



-- Bruce.
Title:
Post by: cgs1019 on April 09, 2009, 12:56:14 PM
Quote from: "Kazimir Majorinc"Thanx, itistoday.

Lutz, maybe letex should be replaced or supported with evlex?



(eval (letex ((x 1)) '(f x)))


quoting the expr and wrapping in eval does the trick for me[/code]
Title:
Post by: Lutz on April 09, 2009, 01:11:46 PM
Kazimir, this is an issue with the maximum of consecutive blocks/statements in a lambda function. The same case it taken care of in all loops and many other statements which iterate in some form and regularly free memory. Introducing this mechanism to lambda and lambda-macro functions would cost too much overhead.



Keeping lambda and lambda-macro overhead at an absolute minimum is important for Lisp, as good Lisp programming style favors smaller functions. At the moment a cleanup only occurs upon leaving the function. For normal programming purpose ~4000 statements-blocks in one function are more than enough.
Title:
Post by: Kazimir Majorinc on April 09, 2009, 02:04:52 PM
Quote from: "Lutz"Keeping lambda and lambda-macro overhead at an absolute minimum is important for Lisp, as good Lisp programming style favors smaller functions. At the moment a cleanup only occurs upon leaving the function.


OK, then maybe in future when speed will be even less critical than today.


Quote from: "cgs1019"
(eval (letex ((x 1)) '(f x)))


Yes, you're right it is simpler than


(eval (let ((x 1))
             (expand '(f x) 'x)))
Title:
Post by: Lutz on April 09, 2009, 10:19:47 PM
but this:


(eval (letex ((x 1)) '(f x)))

is the same as this:


(letex ((x 1)) (f x))

'letex' does evaluate after expanding
Title:
Post by: itistoday on April 09, 2009, 10:24:12 PM
Quote from: "Lutz"'letex' does evaluate after expanding


That reminds me of something I wanted to ask you.  In the 'genlet' code that I gave above, why do I have to have the extra 'eval' here:


     (letex (H1 (cons 'genlet (cons (explode (args 0) 2) (rest (args)))))
         (eval H1)
      )


But not here:


     (letex
         (    H1 (map (fn (x) (list (x 0) '(gensym))) (args 0))
            H2 (args 0)
              H3 (cons 'begin (rest (args)))
            H4 (cons 'begin   (map
                           (fn (x) (list 'delete (list 'quote (x 0))))
                        (args 0)))
         )
         (letex H1 (first (list (let H2 H3) H4)))
      )
Title:
Post by: Kazimir Majorinc on April 09, 2009, 10:42:54 PM
There is a subtle difference - in the case of letex, in the moment of evaluation local binding is still alive, in the case of eval-letex-quote, it is not.


(set 'y 'x)
(println (let ((x 2))
              (eval (letex((x 1))
                         '(+ (eval y) x))))) ;=>3 because y => outer x

(println (let ((x 2))
              (letex((x 1))
                    (+ (eval y) x)))) ;=>2 because y => inner x
                 
(exit)
Title:
Post by: Lutz on April 09, 2009, 11:38:59 PM
Kazimir:

yes, you are right, but it wouldn't make a difference. If the expression to expand has free variables, they would bind to the environment outside the 'letex' anyway and all locals are expanded ;-)



Also, the right side of the assignment in the 'letex' locals is always evaluated in the parent environment:


> (set 'y 1)
(letex ((x y) (y 2)) '(x y)) => (1 2)


Itistoday:

'letex', 'unify' and 'expand' (which is used by the first two) do not make expansion on the top level. So this:


> (letex (expr '(+ 1 2 3)) expr) => (+ 1 2 3)

is just the same as this:


(let (expr '(+ 1 2 3)) expr) => (+ 1 2 3)

to avoid 'expr' beeing the top level do:


> (letex (expr '(+ 1 2 3)) (begin expr))
6
>
Title:
Post by: Kazimir Majorinc on April 10, 2009, 12:49:27 AM
Well, maybe eval-let-expand has a bit more sense than let-eval-expand, maybe both have sense, but it is not really that important as long as one knows what can he expect.



However, I noted one thing that could be significant problem, and maybe one that is smaller problem:


(println (letex ((x 'y)) x))      ; => y
(println (letex ((x 'y)) 'x))     ; => y




(set 'x 4)
(expand 'x 'x)  ;=> error
(exit)
Title:
Post by: Lutz on April 10, 2009, 01:32:29 AM
Yes, 'letex' and 'expand' don't expand on the top level. 'expand' will throw and error on this and 'letext' doesn't.



So probably 'letex' should throw an error too, when trying to expand a symbol on the top level. Starting with 10.0.4 'letex' will throw an error in this case.
Title:
Post by: Kazimir Majorinc on April 10, 2009, 03:18:24 AM
Quote from: "Lutz"Yes, 'letex' and 'expand' don't expand on the top level. 'expand' will throw and error on this and 'letext' doesn't.



So probably 'letex' should throw an error too, when trying to expand a symbol on the top level. Starting with 10.0.4 'letex' will throw an error in this case.


If some nonformal semantics is substitution, then evaluation, then such trivial cases -- I think mathematical notation is f(x|y) -- have sense. It is one of those things like x-x, x/x, trivial, but simplifies calculations.



> (letex((x ''y))'x)

'y

> (letex((x ''y))x)

'y ; -- why not just y?

>




for letex and evletex, I don't know, maybe you can define evletex "just in case," I think it is marginally more useful, whatever it is, it doesn't hurt. Finally, cos(x) is barely sin(x+1.57). But really not a big deal.







Itistoday:



I think it is simplified situation in your example:


(println (letex ((H1 '(let ((x ''y)) x)))
            (eval H1))) ; =>y, without eval it is (let ((x ''y)) x)

             ; is equivalent to

(println (letex ((H1 '((x ''y))))
             (letex H1 (eval 'x)))) ;=>y, without eval it is 'y
             
             ; is equivalent to
             
(println (letex ((H1 '((x ''y))))
             (letex H1 (first (list x))))) ;=> y, because (first (list x))=(eval 'x)
Title:
Post by: Lutz on April 10, 2009, 09:44:02 AM
Both 'letex' cases should (and in the future will) throw an error. Like 'expand' they should throw an error when trying to expand something not in a list on the top-level.



When you enclose the x or 'x in a list expression, you see it working correctly:


> (letex ((x ''y)) '('x))
(''y)
> (letex ((x ''y)) '(x))
('y)
>


When symbol-on-top-level expansion+evaluation is needed, than do an evaluation assignment without expansion. The 'letex' expression is then redundant:


> (set 'x ''y)
'y
> (set 'x 'y)
y


which is what you were expecting.
Title:
Post by: Kazimir Majorinc on April 10, 2009, 10:24:48 AM
QuoteWhen symbol-on-top-level expansion+evaluation is needed, than do an evaluation assignment without expansion. The 'letex' expression is then redundant:


> (set 'x ''y)
'y
> (set 'x 'y)
y


which is what you were expecting.[/quote]



Yes, it is clearly redundant. Unfortunately, sometimes we do not know whether it is redundant until runtime.


(letex((x (f)))
   (letex((y (g)))
       x)) ; <= we cannot know
            ;whether inner letex is redundant,
            ;because x will be replaced with (f)
            ;which might be known only during runtime  


Without that, we should do something like


(letex((x (f)))
  (if (not (list? x))
      x
      (letex ((y (g)))
          x)))


(I didn't tested that code)
Title:
Post by: Lutz on April 12, 2009, 11:28:03 PM
In the end a more generalized 'letex' and 'expand' could be implemented for 10.0.4, which allows expansion of symbols not enclosed in a list expression or quoted, as in the following examples:


(set 'x 123 'y 456)
(expand 'x 'x) => 123
(letex (x '(+ 3 4)) 'x) => (+ 3 4)
(letex (x '(+ 3 4)) x) => 7


previously 'expand' would throw an error (line 2) and 'letex' would skip template expansion silently (line 4). This is now consistent with 'unify', which always allowed top-level symbol unification:


(unify 'S 'v) => ((S v))

'expand', 'letex' and 'unify' all are based on the same symbol expansion subroutines.
Title:
Post by: Kazimir Majorinc on April 13, 2009, 07:10:43 AM
Good, it looks like two small steps forward, generalization and consistency.
Title:
Post by: Kazimir Majorinc on October 05, 2009, 06:25:33 PM
I didn't refered my blog posts for a while. Here is the list of a new posts:



62. Supressed Printing.

63. On Serial Substitution and Not Reading The Manual.

64. Propositional Variables and Formulas.

65. Reader Macros in Newlisp?

66. Some Lisp Related Alexa Ranks

67. Eval-string or eval?

68. Lispers on AI, 2009 poll

69. Random Propositional Formulas of a Given Average Length

70. On Expected Truth Value of a Random Propositional Formula

71. On Expected Truth Value of a Random Propositional Formula (2)

72. The Probability That Random Propositional Formula is Tautology

73. Lists of Propositional Formulas

74. Debug-wrapping Around Built-in Primitives

75. One Hundred Propositional Tautologies (1)



+ Poll on eval and Lisp.
Title:
Post by: Kazimir Majorinc on October 14, 2009, 08:11:44 AM
76. One Hundred Propositional Tautologies. (2)

77. Opinion on eval in Lisp, Python and Ruby - The Results of The Poll.



+ Poll: Why you do not use Lisp?



(Everyone who uses some other programming language beside Lisp can vote - why he doesn't use Lisp for that purpose.)
Title: Re: Promoting my blog.
Post by: Kazimir Majorinc on May 10, 2010, 12:53:48 AM
78. Why you do not use Lisp? The results of the poll.

79. One hundred propositional tautologies (3).

80. One hundred propositional tautologies (4).

81. One hundred propositional tautologies (5).

82. Tortelvis.

83. Relatively short propositional formulas and symbols instead of pointers and tables.

84. Symbols as sexprs.

85. Speed of Clojure's eval.

86. Happy new year 2010.

87. PicoLisp and OpenLisp: New eval speed champions.

88. Those were the days.

89. Alan Kay on Lisp and Fexprs.

90. Composition of functions or macros.

91. Composing fexprs preserves short-circuit evaluation.

92. How many syllogisms are there?

93. The program for derivation of syllogisms, condensed version.

94. Another difference between C++ and C#: the weekends.

95. What Edsger W. Dijkstra blogged about Lisp?

96. McCarthy - Dijkstra short polemics in 1976.

97. Interesting case of mismatched parentheses.



+ Poll: Your favorite programming language and your political position.
Title: Re: Promoting my blog.
Post by: cormullion on May 10, 2010, 09:45:18 AM
Nearly 100 posts! I'll crack a virtual beer with you when you post it... :)
Title: Re: Promoting my blog.
Post by: Kazimir Majorinc on February 08, 2011, 02:28:28 AM
I published few posts in the meantime. And also stole some elements from Greg's design (//http) recently.  



098. Short notes on McCarthy's "Recursive Functions ... "

099. And, Why Didn't Dijkstra Like Lisp?

100. Lecture on Newlisp, 6. June 2010.



101. Small But Robust Bug in Gabriel and Steele's "Evolution of Lisp"

102. Using (sin cos 0.5) instead of (sin (cos 0.5))

103. "Nothing Will Happen", Split, Croatia, 19-22 August 2010...

104. The Cover of "Byte Magazine" 1979 Lisp Issue.

105. McCarthy's 1960 "Recursive Functions ..." Lisp



106. McCarthy-60 Lisp Implemented as Association List

107. A Few Photographies from "Nothing will happen", Split 2010

108. Politics - Programmers are not Conservatives.

109. McCarthy-60 Lisp in McCarthy-60 Lisp in ...

110. Change of The Blog Name.



111. On Pitman's "Special Forms in Lisp."

112. Lambda Calculus Interpreter.

113. Expansion of Free Variables.

114. The Fonts of Power.

115. Do You Need Five Hundred Random Lambda-Expressions...



116. In Search for The Irreducible Lambda-Expressions.

117. Two Thoughts on Lisp Syntax.

118. Cantor's Enumerations (1)

119. Cantor's Enumerations (2)

120. Cantor's Enumerations (3)



121. Enumeration of Lambda-Expressions.

122. 199019 Reduced Lambda-Expressions.

123. Lambda Calculus Interpreter (2).

124. Relative Popularity of Lisp Dialects and Some Trends.

125. When Were The Best Days for Lisp?



126. Why they say this is the most important metacircular blog post?

127. Find Your Way Through Lisp Labyrinth.

128. Some differences between lambda-calculus and Lisp (1).

129. Some differences between lambda-calculus and Lisp (2).

130. Some Basic Concepts Implemented and Reduced in Lambda calculus.



131. Lambda Calculus Meta-variables Supported in my Newlisp library
Title: Re: Promoting my blog.
Post by: m i c h a e l on February 09, 2011, 11:07:05 AM
Hi Kazimir!



I was surprised and delighted to discover "The Fonts of Power" among the staggering number of posts you've done. Melissa is a certified font lunatic, and I caught the bug from her.



I noticed all the fonts you list are serifs. What are your favorite sans serifs? Also, I see you changed your photo from the green, vehement you to a full-color, slightly forlorn-looking you. There used to be a part after this asking if it reflected your feelings about the lack of Lisp use today, but Melissa said it sounded forced, so I deleted it ;-)



m i c h a e l
Title: Re: Promoting my blog.
Post by: Kazimir Majorinc on February 10, 2011, 10:48:25 AM
Hi, Michael.



Yes, I prefer serifs, although I admit that sans serifs are more readable on screen, but if I need that I use Arial. I also like Art Nouveau fonts. What are your favourite fonts?



I abandoned vehement photo because I've read somewhere that readers are less likely to return to site if they see ugly photos. On last one I tried to look serious, and I didn't seen immediately that it looks like I'm sad.
Title: Re: Promoting my blog.
Post by: m i c h a e l on February 11, 2011, 11:15:39 AM
Quote from: "Kazimir"What are your favourite fonts?




Our favorite sans serif is Maiandra GD by Dennis Pasternak. Our favorite serif is Livory by Hannes von Döhren and Livius Dietzel, and our favorite monospaced typeface is Quadraat Sans Mono by Fred Smeijers.


Quote from: "Kazimir"I abandoned vehement photo because I've read somewhere that readers are less likely to return to site if they see ugly photos. On last one I tried to look serious, and I didn't seen immediately that it looks like I'm sad.


I thought you might be trying for the serious look there. If you post this picture to reddit, maybe you can become a part of the whole "Sad Keanu" meme ;-)



m i c h a e l