LINUX.ORG.RU

Lisp for dummies


0

0

Имеется Debian/Ubuntu. Хочу написать на лиспе что-нить учебное с сокетами. Давно, давно не чуствовал я себя настолько тупым. Три вопроса:

1) как компилировать с помощью sbcl? (у gcl есть хоть параметр -compile). Можно ли использовать gcl, кстати?

2) как заставить работать что-то типа: (resolve-host-ipaddr "linux.org.ru")
apt-get install cl-port сделан, последующие попытки заставить работать что-то из пакета port из gcl не увенчались успехом (There is no package with the name PORT)

PS Этим вообще кто-то пользуется? Гугль выводит убийственно мало результатов.

★★★★★
Ответ на: комментарий от marsijanin

Да, sbcl --noinform --disable-debugger --eval '(compile-file "$(FileNameExt)")' --eval '(quit)'
помогает, ну если проще никак...

sv75 ★★★★★
() автор топика

> 1) как компилировать с помощью sbcl? (у gcl есть хоть параметр -compile). Можно ли использовать gcl, кстати?

SBCL НЕ компилировать не умеет. Если ты про stand-alone исполняемый файл, то читай документацию на sb-ext:save-lisp-and-die

> 2) как заставить работать что-то типа: (resolve-host-ipaddr "linux.org.ru")

(sb-bsd-sockets:get-host-by-name "linux.org.ru)

#<HOST-ENT {10027FE871}>

mv ★★★★★
()
Ответ на: комментарий от mv

> sb-ext:save-lisp-and-die

Понял!

> (sb-bsd-sockets:get-host-by-name "linux.org.ru)

Это я нашел, но как я понимаю это только для sbcl, в отличие от port, который не только для него. Во вторых:
$ sbcl
* (sb-bsd-sockets:get-host-by-name "linux.org.ru)
...
package "SB-BSD-SOCKETS" not found

Я видимо каких-то основ не понимаю :(

sv75 ★★★★★
() автор топика
Ответ на: комментарий от sv75

> Это я нашел, но как я понимаю это только для sbcl, в отличие от port, который не только для него.

CLOCC (в который входит PORT) в sbcl тоже работает, нужно просто поставить и подключить

> package "SB-BSD-SOCKETS" not found

(require 'sb-bsd-sockets)

mv ★★★★★
()
Ответ на: комментарий от mv

> нужно просто поставить и подключить

Вот это что именно означает? Наверное у меня тут непонимание.

> (require 'sb-bsd-sockets)

Нет, не настолько не понимаю, (require 'port) не работало, тут аналогично:

(require 'sb-bsd-sockets)
(sb-bsd-sockets:get-host-by-name "linux.org.ru")
...
; compilation unit aborted
; caught 1 fatal ERROR condition
; compilation aborted because of fatal error:
; READ failure in COMPILE-FILE:
; /home/seva/...net01.fasl written
; package "SB-BSD-SOCKETS" not found

sv75 ★★★★★
() автор топика
Ответ на: комментарий от mv

> А версия sbcl какая?

Так-с, из шела лиспа в REPL sb-bsd-sockets работает. Осталось понять как port заставить работать

sv75 ★★★★★
() автор топика
Ответ на: комментарий от sv75

> Осталось понять как port заставить работать

... все-таки плюнуть и взять простой и понятный эрланг :(

sv75 ★★★★★
() автор топика
Ответ на: комментарий от sv75

>> Осталось понять как port заставить работать

>... все-таки плюнуть и взять простой и понятный эрланг :(

tar xvzf clocc-02-05-07.tgz /usr/local/src

cd /usr/local/src/clocc

export LISTTYPE=sbcl

make clocc-top

cd src/port

make system

echo "(setq *clocc-root* "/usr/local/src/clocc/") (load (concatenate 'string *clocc-root* "clocc"))" >> ~/.sbclrc

Дальше по инструкции в clocc/INSTALL у меня заработало:

(load (translate-logical-pathname "clocc:src;port;"))

Но (load (concatenate 'string *clocc-root* "src/port/net")) работает

mv ★★★★★
()
Ответ на: комментарий от mv

Нда, библиотека... sbcl без db-sockets работать будет не очень. Патч для sb-bsd-sockets resolve-host-ipaddr не покрывает

mv ★★★★★
()
Ответ на: комментарий от mv

Спасибо за потраченное время, но пока пойду изучать Haskell до следующего обострения :(

sv75 ★★★★★
() автор топика
Ответ на: комментарий от mv

> tar xvzf clocc-02-05-07.tgz /usr/local/src


Превращать debian в слаку?

apt-get install sbcl common-lisp-controller
apt-get install cl-port


* (require 'sb-bsd-sockets) 

("SB-BSD-SOCKETS")
* (sb-bsd-sockets:get-host-by-name "linux.org.ru") 

#<SB-BSD-SOCKETS:HOST-ENT {1003150121}>
*

anonymous
()
Ответ на: комментарий от anonymous

> Превращать debian в слаку?

У меня Fedora :-P

>apt-get install sbcl common-lisp-controller

>apt-get install cl-port

> * (require 'sb-bsd-sockets)

> ("SB-BSD-SOCKETS")

> * (sb-bsd-sockets:get-host-by-name "linux.org.ru")

> #<SB-BSD-SOCKETS:HOST-ENT {1003150121}>

Всё это хорошо и прекрасно, но

а) CLOCC нужен для port/net.lisp, а не для sb-bsd-sockets

б) sb-bsd-sockets в sbcl из коробки (в sbcl/contrib)

mv ★★★★★
()
Ответ на: комментарий от mv

>apt-get install cl-port
                 ^^^^^^^

Package: cl-port
Priority: optional
Section: universe/devel
Installed-Size: 176
Maintainer: Peter Van Eynde <pvaneynd@debian.org>
Architecture: all
Version: 20060408-1
Depends: common-lisp-controller
Suggests: cmucl-source, cmucl, sbcl, clisp
Filename: pool/universe/c/cl-port/cl-port_20060408-1_all.deb
Size: 36608
MD5sum: 22b35c372c8e8361a55c854387363d48
SHA1: ee6fd49597e704afc660da7201757ce6ddcde45e
SHA256: a4645f8e8fd28985d8dbe523f2eae9d307d41ce0d2d7baf677d64491facdc560
Description: Common Lisp Object Collections Port Package
 This package provides cross-implementation portability functions taken
 from the Common Lisp Object Code Collection. This includes codes for
 sockets, shell functions, and paths.
Bugs: mailto:ubuntu-users@lists.ubuntu.com
Origin: Ubuntu

anonymous
()
Ответ на: комментарий от mv

("PORT-EXT" "PORT-PATH" "SB-INTROSPECT" "PORT-SYS" "PORT-GRAY" "PORT-NET"
 "PORT-PROC" "PORT-SHELL")

anonymous
()
Ответ на: комментарий от anonymous

> apt-get install cl-port

Поставил еще до начала треда (читай выше), а вот дальше-то почему не заработало, из gcl ругается на require, а в sbcl вот что сейчас пишет:

* (require 'port)

("PORT-EXT" "PORT-GRAY" "PORT-PATH" "SB-INTROSPECT" "PORT-SYS" "SB-BSD-SOCKETS"
"PORT-NET" "PORT-PROC" "PORT-SHELL")
* (port:resolve-host-ipaddr "linux.org.ru")

debugger invoked on a TYPE-ERROR in thread #<THREAD "initial thread" {A806929}>:
The value NIL is not of type SIMPLE-STRING.

sv75 ★★★★★
() автор топика
Ответ на: комментарий от Zubok

Хороший интерпретатор...

; SLIME 2006-04-20
CL-USER> sb-ext:*evaluator-mode*
:COMPILE
CL-USER> (setq sb-ext:*evaluator-mode* :interpret)
:INTERPRET
CL-USER> (defun a (x) x)
A
CL-USER> (disassemble 'a)
; 03827295:       488D65F0         LEA RSP, [RBP-16]          ; no-arg-parsing entry point
;       99:       F8               CLC
;       9A:       488B6DF8         MOV RBP, [RBP-8]
;       9E:       C20800           RET 8
;       A1:       90               NOP
;       A2:       90               NOP
;       A3:       90               NOP
;       A4:       90               NOP
;       A5:       90               NOP
;       A6:       90               NOP
;       A7:       90               NOP
;       A8:       90               NOP
;       A9:       90               NOP
;       AA:       90               NOP
;       AB:       90               NOP
;       AC:       90               NOP
;       AD:       90               NOP
;       AE:       90               NOP
;       AF:       90               NOP
;       B0:       CC0A             BREAK 10                   ; error trap
;       B2:       02               BYTE #X02
;       B3:       18               BYTE #X18                  ; INVALID-ARG-COUNT-ERROR
;       B4:       4E               BYTE #X4E                  ; RCX
; 
NIL
CL-USER> 

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.