For the Compleat Fan
			
		
		
			
				
																			
								Dmi 							 
									
		Posts:  408  		Joined:  Sat Jun 04, 2005 4:16 pm 		
		
																Location:  Russia 
							
							
				Contact: 
				
			 
				
		 
		
						
						
													
							
						
									
						Post 
					 
								by Dmi   »  Fri Nov 18, 2005 10:12 pm 
			
			
			
			
			I experiment with keyword arguments. Like :key in common lisp.
Code: Select all 
(define-macro (keyfun _fn)
  (eval (append '(let) (list _args) _fn)))
(define (add-two)
  (let (_args (args))
    (keyfun
      (println (+ first-val second-val)))))
so:
Code: Select all 
newLISP v.8.7.0 on linux, execute 'newlisp -h' for more info.
> (add-two 'first-val 1 'second-val 2)
3 
This makes possible constructs like:
Code: Select all 
(send-email
  'from "me@here"
  'to "you@there"
  'body (format-message....))
(I reproduce some lisp example)
But can the syntax be more clear?
Something like:
Code: Select all 
(define (add-two)
  (keyfun body))
or even:
(define-keyfun (fun-name) (fun-body))
 
			
			
									
									WBR, Dmi
						 
		 
				
		
		 
	 
	 
				
		
		
			
				
																			
								Dmi 							 
									
		Posts:  408  		Joined:  Sat Jun 04, 2005 4:16 pm 		
		
																Location:  Russia 
							
							
				Contact: 
				
			 
				
		 
		
						
						 
													
							
						
									
						Post 
					 
								by Dmi   »  Sat Nov 19, 2005 11:14 am 
			
			
			
			
			I was quite stupit yesterday... it's simple!
Code: Select all 
(define-macro (keyfun)
  (eval (append '(let) (list _args) (args))))
(define-macro (define-keyfun _fnh)
  (set (_fnh 0)
       (append '(lambda) (list (1 _fnh))
               (list (append '(let (_args (args)))
                       (list (append '(keyfun) (args))))))))
(define-keyfun (test-val val)
  (print "testing " val " against " against "...")
  (println (unless (= val against) " not" "") " match"))
(test-val 1 'against 2)
 
			
			
									
									WBR, Dmi
						 
		 
				
		
		 
	 
	 
				
		
		
			
				
																			
								Fanda 							 
									
		Posts:  253  		Joined:  Tue Aug 02, 2005 6:40 am 		
		
											
							
				Contact: 
				
			 
				
		 
		
						
						 
													
							
						
									
						Post 
					 
								by Fanda   »  Sat Nov 19, 2005 6:48 pm 
			
			
			
			
			Code: Select all 
; This solution doesn't hide the implementation details. Good or bad?
(define (test)
  (let (x nil y nil)
    (apply set (args))
    (println "x = " x " y = " y)))
(test 'x 1 'y 2)  ; => x = 1 y = 2
(test 'y 2 'x 1)  ; => x = 1 y = 2
Fanda
 
			
			
									
									
						 
		 
				
		
		 
	 
	 
				
		
		
			
				
																			
								Dmi 							 
									
		Posts:  408  		Joined:  Sat Jun 04, 2005 4:16 pm 		
		
																Location:  Russia 
							
							
				Contact: 
				
			 
				
		 
		
						
						 
													
							
						
									
						Post 
					 
								by Dmi   »  Sat Nov 19, 2005 6:53 pm 
			
			
			
			
			Yes! It's that I really looking for :-) 
Thanks.
			
			
									
									WBR, Dmi