'Programming/lisp'에 해당되는 글 35건

  1. 2013.01.17 lisp i/o
  2. 2013.01.17 lisp file i/o
  3. 2013.01.16 lisp savefun / load
  4. 2013.01.16 xlisp
  5. 2013.01.14 lisp 연관리스트
  6. 2013.01.14 lisp의 con cell 과 NIL
  7. 2013.01.11 lisp #
  8. 2013.01.09 만들면서 배우는 리스프 프로그래밍 2
  9. 2013.01.09 lisp 전역변수 / 지역변수
  10. 2013.01.03 lisp car / cdr
Programming/lisp2013. 1. 17. 18:53
c언어로 치면 printf() 와 scanf()인데
어짜피 stream 이기 때문에 file을 열어 놓은 스트림을
read나 printf 계열 함수에 연결해서 써도 문제는 없을듯 하니
c언어 보다 더욱 범용성이 있어 보인다고 해야하나
c보다는 리눅스의 FMIO(File Mapped IO)에 가까운 느낌이라고 해야하나?

read an expression
(read [<stream> [<eofp> [<eof> [<rflag>]]]])

print an expression on a new line
(print <expr> [<stream>])

print an expression
(prin1 <expr> [<stream>])

print an expression without quoting
(princ <expr> [<stream>])

pretty print an expression
(pprint <expr> [<stream>])

print to a string
(prin1-to-string <expr>)
(princ-to-string <expr>) 

> (print "test string") 
"test string"           
"test string"           
> (print '(test string))
(test string)           
(test string)            
 
> (princ "test string") 
test string             
"test string"           
> (princ '(test string))
(test string)           
(test string)           

> (prin1 "test string") 
"test string"           
"test string"           
> (prin1 '(test string))
(test string)           
(test string)           

'Programming > lisp' 카테고리의 다른 글

lisp backquote / 유사인용  (0) 2013.01.19
lisp rem, mod  (0) 2013.01.17
lisp file i/o  (0) 2013.01.17
lisp savefun / load  (0) 2013.01.16
xlisp  (0) 2013.01.16
Posted by 구차니
Programming/lisp2013. 1. 17. 18:50
C언어로 치면 feopn() / fclose() / fseek() / fread()

xlisp.exe의 경로에 생성됨.
ubuntu의 clisp는 실행된 "현재경로"에 생성됨.
> (setq out-stream (open "my-temp-file"))                    
error: file does not exist - "my-temp-file"                  
1> (setq out-stream (open "my-temp-file" :direction :output))
#<Character-Output-Stream 4:"my-temp-file">                  
1> (close out-stream)                                        
t                                                            
1> (setq out-stream (open "my-temp-file"))                   
#<Character-Input-Stream 4:"my-temp-file">                   
1> (close out-stream)                                        
t                                                            
1>                                                            

[링크 : http://psg.com/~dlamkins/sl/chapter03-11.html]

open a file stream
(open <fname> &key :direction :element-type :if-exists :if-does-not-exist)

close a file stream
(close <stream>)

check for existance of a file
(probe-file <fname>)

delete a file
(delete-file <fname>)

get length of file
(file-length <stream>)

get or set file position
(file-position <stream> [<expr>])

read a byte from a stream
(read-byte <stream>[<eofp>[<eof>]])

write a byte to a stream
(write-byte <byte> <stream>)

'Programming > lisp' 카테고리의 다른 글

lisp rem, mod  (0) 2013.01.17
lisp i/o  (0) 2013.01.17
lisp savefun / load  (0) 2013.01.16
xlisp  (0) 2013.01.16
lisp 연관리스트  (0) 2013.01.14
Posted by 구차니
Programming/lisp2013. 1. 16. 22:05
xlisp의 경우 실행파일 위치가 XLPATH 인듯 하고
해당 위치에 자동으로 *.lsp 파일을 읽거나 저장한다.

load a source file
(load <fname> &key :verbose :print)

An implicit errset exists in this function so that if error occurs during loading, and *breakenable* is NIL, then the error message will be printed and NIL will be returned.  The OS environmental variable XLPATH is used as a search path for files in this function.  If the filename does not contain path separators ('/' for UNIX, and either '/' or '\' for MS-DOS) and XLPATH is defined, then each pathname in XLPATH is tried in turn until a matching file is found.  If no file is found, then one last attempt is made in the current directory.  The pathnames are separated by either a space or semicolon, and a trailing path separator character is optional.

<fname> the filename string, symbol, or a file stream created with open. The extension "lsp" is assumed.
:verbose the verbose flag (default is T)
:print the print flag (default is NIL)
returns T if successful, else NIL 

save function to a file
(savefun <fcn>)

defined in init.lsp

<fcn> function name (saves it to file of same name, with extension ".lsp")
returns T if successful  


사용예
> (defun add (a b) (+ a b))
add                        
> (savefun add)            
"ADD.lsp"                   

> (load "add")        
; loading "add.lsp"    
t                      
> (add 2 3)           
5                      
> #'add               
#<Closure-ADD: #9b92b0> 

'Programming > lisp' 카테고리의 다른 글

lisp i/o  (0) 2013.01.17
lisp file i/o  (0) 2013.01.17
xlisp  (0) 2013.01.16
lisp 연관리스트  (0) 2013.01.14
lisp의 con cell 과 NIL  (0) 2013.01.14
Posted by 구차니
Programming/lisp2013. 1. 16. 21:44
xlisp에서 하다보면

1>
2>

이런식으로 숫자가 에러가 날때마다 늘어나는데
무언지 어떻게 줄이는지 몰라서 찾다보니
xlisp 도움말에 다음과 같은 내용이 있었다.

ctrl-c나 ctrl-g를 통해서 한단계 위로 간다고 해도
setq 등을 통해서 선언한 변수는 그대로 살아있다.

XLISP then issues the following prompt (unless standard input has been redirected):

>

This indicates that XLISP is waiting for an expression to be typed.  If the current package is other than user, the the package name is printed before the ">".

When a complete expression has been entered, XLISP attempts to evaluate that expression. If the expression evaluates successfully, XLISP prints the result and then returns for another expression.

The following control characters can be used while XLISP is waiting for input:


Backspace delete last character
Del delete last character
tab tabs over (treated as space by XLISP reader)
ctrl-C goto top level
ctrl-G cleanup and return one level
ctrl-Z end of file (returns one level or exits program)
ctrl-P proceed (continue)
ctrl-T print information 

> (_)                                           
error: unbound function - _                     
if continued: try evaluating symbol again       
1>                                              ctrl-P
[ continue from break loop ]                    
error: unbound function - _                     
if continued: try evaluating symbol again       
1>                                              ctrl-T
[ Free: 7422, Total: 152117, GC calls: 2,       
  Edepth: 31183, Adepth 41579, Sdepth: 999588 ] 
                                                 ctrl-G
[ back to previous break level ]                
>                                                

> (_)                                     
error: unbound function - _               
if continued: try evaluating symbol again 
1>                                             ctrl-C 
[ back to top level ]
>                                          

'Programming > lisp' 카테고리의 다른 글

lisp file i/o  (0) 2013.01.17
lisp savefun / load  (0) 2013.01.16
lisp 연관리스트  (0) 2013.01.14
lisp의 con cell 과 NIL  (0) 2013.01.14
lisp #  (0) 2013.01.11
Posted by 구차니
Programming/lisp2013. 1. 14. 23:15
associative memory의 줄임말이려나?
아무튼 굳이 NIL로 끝나지 않는 리스트로 하지 않아도 상관은 없지만
(assoc '찾을값 찾을목록)
식으로 사용하면 된다. 하지만 linked list를 이용해서 검색하는 것으로 
성능상의 하락이 있으므로 해싱을 이용하는 등, 다른방법을 강구하는 것이 좋다고 한다.

(setq tt '((bill . double)
            (lisa . coffee)
            (john . latte)))
((BILL . DOUBLE) (LISA . COFFEE) (JOHN . LATTE))
> (assoc 'lisa tt)
(LIST . COFFEE)

(setq ta '((bill double)
            (lisa coffee)
            (john latte)))
((BILL DOUBLE) (LISA COFFEE) (JOHN LATTE))
> (assoc 'lisa ta)
(LIST . COFFEE)


'Programming > lisp' 카테고리의 다른 글

lisp savefun / load  (0) 2013.01.16
xlisp  (0) 2013.01.16
lisp의 con cell 과 NIL  (0) 2013.01.14
lisp #  (0) 2013.01.11
만들면서 배우는 리스프 프로그래밍  (2) 2013.01.09
Posted by 구차니
Programming/lisp2013. 1. 14. 23:04
lisp는 이름 그대로 LISt Processing으로
LIST를 기반으로 작업하게 된다.

자료구조에서 배우던 linked list를 이용해서 자료를 저장하게 되는데
C언어에서 항상 문자열은 0x00 혹은 \0으로 끝맺듯
list 도 마지막은 NIL로 표기를 하게 된다.

아래는 NIL로 끝나지 않는 리스트와 NIL로 끝나는 리스트를 만든것으로
. 은 NIL로 끝나지 않는 리스트를 의미하게 된다. 
[1]> '(1 . 2)
(1 . 2)
[2]> (cons 1 2)
(1 . 2)
[3]> '(1 2)
(1 2)
[4]> (cons 1 (cons 2 NIL))
(1 2)
 

last는 안되고 아무튼 rest는 남은걸 나타내는 것이기 때문에 가능한 것 같은데
(1 2)에 대한 rest 두번은 NIL이 나오고
(1 . 2) 에 대한 rest 두번은 존재하지 않기 때문에 에러가 발생하게 된다.
[6]> (rest (rest '(1 2)))
NIL
[6]> (rest (rest '(1 . 2)))

*** - REST: 2 is not a list
The following restarts are available:
ABORT          :R1      Abort debug loop
ABORT          :R2      Abort main loop
[7]> (rest '(1 . 2))
2


그나저나.. 책에 의하면 아래와 같이 뜬다고 하는데
> (defparameter foo '(1 2 3))
FOO
> (setf (cdddr foo) foo)
#1=(1 2 3 . #1#) 

내가 사용하는 clisp 2.49에서는 뻗어버린다 -_-
  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+' /  I      8         8           8     8        8    8
   \  `-+-'  /       8         8           8      ooooo   8oooo
    `-__|__-'        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/>

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2010

Type :h and hit Enter for context help.
 
[12]> (defparameter foo '(1 2 3))
FOO
[13]> (setf (cdddr foo) foo)
^C
*** - Ctrl-C: User break
The following restarts are available:

*** - handle_fault error2 ! address = 0x68457000 not in [0x65de5658,0x68457000) !
SIGSEGV cannot be cured. Fault address = 0x68457000.
GC count: 47
Space collected by GC: 0 355764032
Run time: 40 918556
Real time: 164 950564
GC time: 23 933489
Permanently allocated: 94080 bytes.
Currently in use: 1194294496 bytes.
Free space: 12 bytes. 


'Programming > lisp' 카테고리의 다른 글

xlisp  (0) 2013.01.16
lisp 연관리스트  (0) 2013.01.14
lisp #  (0) 2013.01.11
만들면서 배우는 리스프 프로그래밍  (2) 2013.01.09
lisp 전역변수 / 지역변수  (0) 2013.01.09
Posted by 구차니
Programming/lisp2013. 1. 11. 17:15
#으로 시작하는 매크로인데
공부하면서 접하게 되는건 function 을 대체하는 #' 정도?

2012/12/05 - [Programming/lisp] - lisp - #' 와 '

 In addition, the first character may not be '#' (non-terminating macro character), nor may the symbol have identical syntax with a numeric literal.  Uppercase and lowercase characters are not distinguished within symbol names because, by default, lowercase characters are mapped to uppercase on input.

Standard Non-Terminating Macro Characters
-----------------------------------------
#
[링크 : http://psg.com/~dlamkins/sl/chapter03-11.html]

#
 
This is a dispatching macro character. It reads an optional digit string and then one more character, and uses that character to select a function to run as a macro-character function.
The # character also happens to be a non-terminating macro character. This is completely independent of the fact that it is a dispatching macro character; it is a coincidence that the only standard dispatching macro character in Common Lisp is also the only standard non-terminating macro character.

See the next section for predefined # macro-character constructions.

[링크 : http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node190.html] 

Table 22-4: Standard # Macro Character Syntax
 
#!  undefined *                #<backspace>  signals error 
#"  undefined                  #<tab>        signals error 
##  reference to #= label      #<newline>    signals error 
#$  undefined                  #<linefeed>   signals error 
#%  undefined                  #<page>       signals error 
#&  undefined                  #<return>     signals error 
#'  function abbreviation      #<space>      signals error 
#(  simple vector              #+      read-time conditional 
#)  signals error              #-      read-time conditional 
#*  bit-vector                 #.      read-time evaluation 
#,  load-time evaluation       #/      undefined 
#0  used for infix arguments   #A, #a  array 
#1  used for infix arguments   #B, #b  binary rational 
#2  used for infix arguments   #C, #c  complex number 
#3  used for infix arguments   #D, #d  undefined 
#4  used for infix arguments   #E, #e  undefined 
#5  used for infix arguments   #F, #f  undefined 
#6  used for infix arguments   #G, #g  undefined 
#7  used for infix arguments   #H, #h  undefined 
#8  used for infix arguments   #I, #i  undefined 
#9  used for infix arguments   #J, #j  undefined 
#:  uninterned symbol          #K, #k  undefined 
#;  undefined                  #L, #l  undefined 
#<  signals error              #M, #m  undefined 
#=  label following object     #N, #n  undefined 
#>  undefined                  #O, #o  octal rational 
#?  undefined *                #P, #p  pathname 
#@  undefined                  #Q, #q  undefined 
#[  undefined *                #R, #r  radix-n rational 
#\  character object           #S, #s  structure 
#]  undefined *                #T, #t  undefined 
#^  undefined                  #U, #u  undefined 
#_  undefined                  #V, #v  undefined 
#`  undefined                  #W, #w  undefined 
#{  undefined *                #X, #x  hexadecimal rational 
#|  balanced comment           #Y, #y  undefined 
#}  undefined *                #Z, #z  undefined    
#~  undefined                  #<rubout> undefined
 

'Programming > lisp' 카테고리의 다른 글

lisp 연관리스트  (0) 2013.01.14
lisp의 con cell 과 NIL  (0) 2013.01.14
만들면서 배우는 리스프 프로그래밍  (2) 2013.01.09
lisp 전역변수 / 지역변수  (0) 2013.01.09
lisp car / cdr  (0) 2013.01.03
Posted by 구차니
Programming/lisp2013. 1. 9. 22:37
아직 전부를 다읽은건 아니지만
대충 훑어 본바로서는 입문용으로 쓰기에는 약간 난이도가 있지만
리스프를 약간이라도 이해한 사람이라면 단시간에 높은 레벨에 까지 이를수 있을듯한 책이다.

2011년 11월 27일 초판이고, 3.5만원이라 조금 비싸지만
가지고 있을만한 가치가 있는 책이다.
(일단은 구립도서관에서 빌려왔지만 ^^;)

그나저나 누가 이걸 신청할걸까.. 구립도서관에서 자체적으로 구매한걸까?

+ 웹 서버 라던가 생명게임이라던가 조금 난이도 있는 내용들을 다루지만
다르게 말하면 이 책 한권에 웬만한 난이도는 이해할수 있는 내용이 담겨 있다는 것!


[링크 : http://www.yes24.com/24/goods/5968810]

'Programming > lisp' 카테고리의 다른 글

lisp의 con cell 과 NIL  (0) 2013.01.14
lisp #  (0) 2013.01.11
lisp 전역변수 / 지역변수  (0) 2013.01.09
lisp car / cdr  (0) 2013.01.03
lisp 반복문  (0) 2012.12.31
Posted by 구차니
Programming/lisp2013. 1. 9. 21:43
define a parameter
(defparameter <sym> <val> [<comment>])

fsubr.

<sym> the symbol (will be marked special)
<val> the value
<comment>  optional comment string (ignored)
returns the value

define a variable
(defvar <sym> [<val> [<comment>]])

fsubr.  Variable only initialized if not previously defined.

<sym> the symbol (will be marked special)
<val> the initial value, or NIL if absent.
<comment>  optional comment string (ignored)
returns the current value

set the global value of a symbol
(set <sym> <expr>)

You can also use (setf (symbol-value <sym>) <expr>)

<sym> the symbol being set
<expr> the new value
returns the new value

set the value of a symbol
(setq [<sym> <expr>]...)

fsubr. You can also use (setf <sym> <expr>)

<sym> the symbol being set (quoted)
<expr> the new value
returns the last new value or NIL if no arguments



전역변수
(defparameter *var_name* value) 마지막에 정의된것으로 변경가능
(defvar *var_namevalue) 처음 정의된것으로 고정

> (defparameter *a* 1)
*a*
> *a*
1
> (defparameter *a* 2)
*a*
> *a*

> (defvar*a* 1)
*a*
> *a*
1> (defvar *a* 2)
*a*
> *a*
1

지역변수
(let ((variable_declarations)) (body)

> (let ((*a* 5)) (princ *a*))
5
5
> *a*
 

'Programming > lisp' 카테고리의 다른 글

lisp #  (0) 2013.01.11
만들면서 배우는 리스프 프로그래밍  (2) 2013.01.09
lisp car / cdr  (0) 2013.01.03
lisp 반복문  (0) 2012.12.31
clisp  (0) 2012.12.29
Posted by 구차니
Programming/lisp2013. 1. 3. 21:25
난해한(!) 명령어중에 하나로 car / cdr이라는 lisp 명령어가 있다.
car은 first에 대응되며 list의 가장 처음 내용만 보여주고
cdr은 rest에 대응되며 list의 처음것을 제외한 내용을 보여준다.

1> (car '(1 2 3))
1                
1> (cdr '(1 2 3))
(2 3)
1> (rest '(1 2 3))
(2 3) 

return the car of a list node
(car <expr>)

May be used as a place form.

<expr> the list node
returns the CAR of the list node


return the cdr of a list node
(cdr <expr>)

May be used as a place form.

<expr> the list node
returns the CDR of the list node

all cxxr combinations
(cxxr <expr>)
all cxxxr combinations
(cxxxr <expr>)
all cxxxxr combinations
(cxxxxr <expr>)

May be used as place forms when common2.lsp loaded.

a synonym for car
(first <expr>)
a synonym for cadr
(second <expr>)
a synonym for caddr
(third <expr>)
a synonym for cadddr
(fourth <expr>)
fifth list element
(fifth <expr>)
sixth list element
(sixth <expr>)
seventh list element
(seventh <expr>)
eighth list element
(eighth <expr>)
ninth list element
(ninth <expr>)
tenth list element
(tenth <expr>)
a synonym for cdr
(rest <expr>)

May be used as place forms when common2.lsp loaded.  fifth through tenth defined in common2.lsp. 

Etymology

Lisp was originally implemented on the IBM 704 computer, in the late 1950s. The 704 hardware had special support for splitting a 36-bit machine word into four parts, an "address part" and "decrement part" of 15 bits each and a "prefix part" and "tag part" of three bits each.

Precursors to Lisp included functions:

  • car (short for "Contents of the Address part of Register number"),
  • cdr ("Contents of the Decrement part of Register number"),
  • cpr ("Contents of the Prefix part of Register number"), and
  • ctr ("Contents of the Tag part of Register number"),

each of which took a machine address as an argument, loaded the corresponding word from memory, and extracted the appropriate bits.

http://en.wikipedia.org/wiki/CAR_and_CDR]

'Programming > lisp' 카테고리의 다른 글

만들면서 배우는 리스프 프로그래밍  (2) 2013.01.09
lisp 전역변수 / 지역변수  (0) 2013.01.09
lisp 반복문  (0) 2012.12.31
clisp  (0) 2012.12.29
lisp 기본함수  (0) 2012.12.29
Posted by 구차니