Programming 530

Lisp 계열 언어에서의 mutation 방법에 대한 고찰

Common Lisp에서는 setf macro가 container에 대해 mutation할 때, 매크로로 처리한다. 즉, container에 대한 read 함수와 별개로 write 함수가 구현되어 있어야 한다. (여기서는 rplaca) 예제: * (let ((a (list 1 2))) (setf (nth 0 a) 3) a) (3 2) * (macroexpand '(setf (nth 0 a) 3)) (LET* ((#:LIST (NTHCDR 0 A)) (#:NEW 3)) (SB-KERNEL:%RPLACA #:LIST #:NEW)) Clojure에서는 mutation이 필요한 것은 atom 등으로 되어 있어야 한다. 그래서 container에 대해 read 함수만 있고 특별한 mutation 함수가 없어도 된..

Programming 2021.05.29

F# 파일 하나로 컴파일하기

F# 프로그램을 컴파일할 때, fsc.exe a.fs 또는 스크립트 파일 fsc.exe a.fsx 하면 a.exe 실행파일과 2MB 정도의 FSharp.Core.dll 이 생성된다. fsc.exe --standalone a.fs 하면 .exe 파일 하나로 만들어진다. 그리고 크기도 위 dll 파일을 더한 것보다 작게 나온다. (1.4MB 정도 추가됨) (.NET은 있어야 함) Compiler Options - F# | Microsoft Docs Compiler Options - F# Use F# compiler command-line options to control the compilation of your F# apps and libraries. docs.microsoft.com

Programming 2021.05.19

SBCL 에 대한 실망

SBCL 2.1.10 전의 소스 코드 한글 문제이다. https://sbcl.org/ 윈도우에서 quicklisp 로 cl-ppcre, dexador 도 깔고 웹 스크레이핑도 가능하게 되었는데, (예전에는 http client 로 drakma 설치시 에러가 났었다.) 한글 출력이 문제다. UTF-8 로 해도 소용 없었다. CMD>copy con test.lisp(format t "가나다~%")^Z 1개 파일이 복사되었습니다.CMD>sbcl --script test.lisp°¡³ª´Ù나가시는 문은 저쪽입니다.리눅스에서는 한글이 잘 출력된다.윈도우에서, 소스 코드를 UTF-8 인코딩으로 저장하고sbcl --eval "setf sb-impl::*default-external-format* :ut..

Programming 2021.04.05