문제
많은 분들이 지적하셨듯이 이 질문, Lisp는 주로 학습 경험으로 사용됩니다.그럼에도 불구하고 어떻게든 Lisp 알고리즘을 사용하고 이를 C# 프로그램과 결합할 수 있다면 좋을 것입니다.대학에서 내 교수들은 프로그램에서 내 Lisp 루틴을 사용하는 방법을 나에게 결코 말해주지 못했습니다(아니요, Lisp에서 GUI를 작성하지 마세요. 감사합니다).그러면 어떻게 해야 합니까?
해결책
Lisp의 다음 .Net 구현을 사용해 보세요.
Ironscheme은 Microsoft DLR을 기반으로 R6RS 준수 체계 구현을 목표로합니다.
l Sharp .NET은 .NET를위한 강력한 LISP와 같은 스크립팅 언어입니다.ARC와 유사한 LISP 방언을 사용하지만 풍부한 라이브러리 세트를 제공하는 .NET 프레임 워크와 밀접하게 통합됩니다.
다른 팁
단순히 루틴만 사용하려는 경우 .NET에서 Lisp 표현식을 사용할 수 있는 LSharp를 사용해 볼 수 있습니다.
다른 방법(Lisp의 .NET 사용)은 RDNZL입니다.
.Net 1.1 SDK에는 LISP 컴파일러 예제가 포함되어 있습니다.SDK\v1.1 ool Developers Guide\Samples\clisp를 참조하세요.
나는 이것이 정말 오래된 질문이라는 것을 알고 있습니다.하지만 나는 내 경험과 관점에서 대답을 제공하려고 노력할 것입니다.
Scheme/Lisp의 순수함, 우아함, 단순함을 사랑하는 우리 같은 사람들에게 이것이 실제 제작에서 어떻게 매우 유용할 수 있는지에 대한 격려와 영감을 주기를 바랍니다 :)
저는 최근에 Scheme과 같은 통역사를 오픈소스로 공개했습니다. 책략, C#으로 작성됨(~1500줄의 코드)동기와 유용성은 다음과 같습니다.
너무 자세히 설명하지 않고 다른 개발자/데이터 과학자가 플러그 앤 플레이할 수 있는 요청 처리 논리를 원하는 웹 API 서버를 구축하고 있었습니다.여기서는 우려 사항을 분리해야 한다는 분명한 요구가 있었습니다. 서버는 요청 처리 논리에 크게 신경 쓰지 않지만 어떤 요청을 처리할 수 있는지, 어디에서 찾을 수 있는지 알아야 합니다. 짐 핸들러의 논리.
따라서 서버 애플리케이션에 핸들러 구현을 배치하는 대신 서버는 몇 가지 기준과 논리를 기반으로 함께 연결되어 재사용 가능한 "블록"만 제공합니다. 관로, 즉 다음을 통해 정의된 핸들러 구성.우리는 그러한 파이프라인을 설명하기 위해 JSON/XML을 시도했고 곧 다음과 같은 사실을 깨달았습니다. 나는 본질적으로 추상 구문 트리 파서를 구축하고 있었습니다..
이것이 경량의 s-expression 기반 작은 언어에 대한 요구라는 것을 깨달았을 때였습니다.그래서 임베디드를 구현했습니다. 책략 통역사.
예제 명령 처리 응용 프로그램을 넣었습니다. 여기, 위에서 언급한 웹 서버 디자인 철학의 핵심을 담고 있습니다.다음과 같이 작동합니다.
C#에서 구현 된 일부 기능으로 임베디드 스키미 통역사를 확장합니다.
그것은 발견한다
.ss
구현 된 기능을 사용하여 명령 처리 파이프 라인을 정의하는 스크립트.서버는 기호를 찾아 스크립트에서 파이프 라인을 찾아서 유지합니다.
EXECUTE
다음 유형이어야 합니다.Func<object, object>
.명령 요청이 들어 오면 해당 명령 프로세서 (
EXECUTE
) 및 결과에 대한 응답.
마지막으로 다음은 이 TCP 명령 서버를 통해 온라인 맨페이지 조회를 제공하는 복잡한 예제 스크립트입니다.
; This script will be load by the server as command `man`. The command
; is consistent of the following functions chained together:
;
; 1. An online man-page look up - it detects the current operating system and
; decides to use either a linux or freebsd man page web API for the look up.
;
; 2. A string truncator `truncate-string` - it truncates the input string, in
; this case the output of the man-page lookup, to the specified number of
; characters.
;
; The client of the command server connects via raw RCP protocol, and can issue
; commands like:
;
; man ls
;
; and gets response of the truncated corresponding online manpage content.
(define EXECUTE
(let ((os (get-current-os))
(max-length 500))
(chain ; chain functions together
(cond ; pick a manpage lookup based on OS
((equal? os "freebsd") (man-freebsd))
((equal? os "linux") (man-linux))
(else (man-freebsd)))
(truncate-string max-length)))) ; truncate output string to a max length
명령 서버가 이 스크립트를 로드하면 TCP 클라이언트가 명령을 실행할 수 있습니다. man <unix_command>
서버에:
$ ncat 127.0.0.1 8080
man ls
LS(1) FreeBSD General Commands Manual LS(1)
NAME
ls -- list directory contents
SYNOPSIS
ls [--libxo] [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwxy1,] [-D format]
[file ...]
DESCRIPTION
For each operand that names a file of a type other than directory, ls
displays its name as well as any requested, associated information. For
each operand that names a file of type directory, ls displays the names
of files contained within that directory, as well as any requested,
아마도 L#을 살펴봐야 할 것입니다.그것이 당신이 찾고 있는 것인지는 모르겠지만(대학 이후로 Lisp를 접해본 적이 없습니다) 확인해 볼 가치가 있을 것입니다.
도 있습니다 도트리스프.