LISP Scheme Part3

このエントリーをはてなブックマークに追加
952947:02/03/13 21:42
上手く行かないようです。名案のある方がいらっしゃればお願いします。
何度もすみません。
Guile だと (environ) で全部出るけど、SCM は知らん。

>>952
#\newline で split すればいいじゃん
>>946
是非作ってみたいんだけど、Gauche に curses とか readline みたいな
ライブラリってあったっけ? slib にならあるかな。
956947:02/03/14 01:52
>>964
あまりSchemeから出たくないですが、それしかないでしょうかね。。。

( ("TERM" . "kterm") ("PWD" . "home/hoge") ......)のように連想リストの形にしたい
と思っています。Guileも入れてみたので、こっちでも試してみます。

>>955
すでにご存じだと思いますがどうぞ。
http://tanaka-www.cs.titech.ac.jp/~euske/scm/oldindex.html
957953:02/03/14 02:03
>>956
Guile だとこんな感じかな。もっと良いの書けそうだけど。

(map (lambda (str)
    (call-with-input-string str
     (lambda (port)
      (let* ((key (read-delimited "=" port))
         (val (read-delimited "" port)))
       (cons key val)))))
   (environ))
958デフォルトの名無しさん:02/03/14 09:03
>>955
描画部分はviから奪ってくればよし
959デフォルトの名無しさん:02/03/14 12:16
scheme を使った階乗の計算で、
(define fact
(lambda (n) (if (= n 0) 1
(* (fact (- n 1)) n))))

は末尾再帰を使うと
(define fact-tail
(lambda (n x) (if (= n 0) x
(fact-tail (- n 1) (* n x)))))

のようになるらしいのですが、どのように考えたら下の式のようなものが書け
るようになりますか?

末尾再帰って禿げしく便利そうだということをよく見かけますが、実際に自分
では書けそうな気がしません。

;; 末尾再帰が「引数つき goto」っていうのも、再帰と goto がどう結びつく
;; のかよくわからないんですが。
960947:02/03/14 12:16
>>957
ありがとうございます。
求めていたものが得られました。
これからも精進します。
961 :02/03/14 12:19
     |Д`)
     |⊂  ダレモイナイオドルナライマノウチ
     |     


           Å
       ♪ / \
     ♪  ヽ(´Д`;)ノ ランタ ランタ
         (  ヘ)   ランタ タン
          く     ランタ タンタ
                 タン

          Å
     ♪   / \
        ヽ(;´Д`)ノ ランタ ランタ
      ♪  (へ  )   ランタ タン
            >   ランタ タンタ
                 タン
>>959
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/recursive.html
これとか読んでわからなかったら死にましょう。
964デフォルトの名無しさん:02/03/14 21:26
mit scheme で cmu-scheme.el でなく xscheme.el 使えば
emacs の lisp-interaction-mode に近くなるよ。
あと mit scheme だけでできてる emacs like editor も
面白いかも。elisp と scheme が入れかわったような感じ。
emacs ほどボリュームはないけど拡張性は同じくらいある。
965デフォルトの名無しさん:02/03/14 23:39
guile-1.7.0 を使っているのですが、readline を使おうとしたら

guile> (use-modules (ice-9 readline))
ERROR: In procedure dynamic-link:
ERROR: file: "libguilereadline", message: "file not found"
ABORT: (misc-error)

となってしまいます。/usr/local/lib の下に libguilereadline.a や .so な
どのファイルがあるのですが、何か設定しなければならないのでしょうか。
Info にはとくに何も書いていないのですが。
966デフォルトの名無しさん:02/03/14 23:49
>>955
vimにschemeを組み込むってアプローチもあると思う。

vim-perl - Vi IMproved - with perl support
vim-python - Vi IMproved - with python support
vim-tcl - Vi IMproved - with tcl support

好きな言語ないから素のvim script使ってるけど、schemeがあれば使う。
>>347 に regex と readline が必要だったって書いてありますね。
readline は rpm で入ってたけど regex がなかったので、
regex-0.12.tar.gz 入れたけどやっぱりだめだ。。。
>>965
まずエラーの原因を特定する。メッセージのとおりなのか、それとも誤報なのか
コード公開されてんだからわかるっしょ。デバッガもあるし、
truss/strace/ltrace系のツール使ってもわかるだろうし。
メッセージのとおりの原因だったら何でダイナミックリンク失敗するか考えてみ。
ld.so.confとか確認したか?
そろそろ次スレを立てれよ
970デフォルトの名無しさん:02/03/15 01:26
現実問題として、vi-schemeなんかがんばって作っても使う人いないと思う。
ただでさえviなんだからさ(w
971965:02/03/15 01:43
>>968
エラーの原因ですか、、
strace と ltrace というのを今初めて使って調べてみましたが何だかよくわ
からないです。
とりあえず分かる範囲で、/etc/ld.so.conf に /usr/local/lib と
/usr/local/include/libguile を追加して /slib/ldconfig してみましたが状
況は変わりませんでした。続きはまた明日調べてみます。
973953:02/03/15 01:52
偏見で申し訳ないが、vi ユーザに Lisp/Scheme は合わない。
閉じ括弧だけの行を作ったり、タブ文字でインデントするような
人達だから。Haskell でも使ってなさい。
>>965=967=971
ldd -V guileしてみ
975vi-lisper なめんな:02/03/15 01:57
>>953
vi -l してみ
976965:02/03/15 02:22
>>974
レスありがとうございます。でも新しい問題が発生しました。
$ ldd -V guile
ldd: unrecognized option `-V'
Try `ldd --help' for more information.
となってしまいます。man ldd には確かに -V オプションの説明があるのですが。

$ ldd --help
Usage: ldd [OPTION]... FILE...
--help print this help and exit
--version print version information and exit
-d, --data-relocs process data relocations
-r, --function-relocs process data and function relocations
-v, --verbose print all information
Report bugs using the `glibcbug' script to <[email protected]>

となっています。ldd なんていじってないのになぁ。man とバージョンが違う
なんてことはないですよねぇ。OS は Redhat7.2 です。
;; 板違いになってしまってすみません。
977デフォルトの名無しさん:02/03/15 03:19
>>976
あのさ、>>965のエラーって、
ld.soじゃなくて、guileがlibdlを使って、(dlopen(3)ね)
moduleが必要になったときにやるdynamic linkingだよ。
libguilereadline.so*があるか、
あるならdynamic-linkが使うpathがあってるか調べなよ。

readline.scm:
(dynamic-call "scm_init_readline" (dynamic-link "libguilereadline.so"))
こういうことになってるから。
978965:02/03/15 10:52
In guile-1.4 you could just type into a repl:
(use-modules (ice-9 readline))
(activate-readline)

This doesn't work in guile-1.5.x out of the box because the default
curent module for the repl is now (guile-user). The workaround is to
place in your .guile file:
(define-module (guile-user))
See NEWS for more info.

もしかして、1.7 では使えないってことでしょうか。
今 windwos2000 + cygwin + guile-1.5.4 なんですが、同じエラーが出ます。
cygwin だからだめなんだと思って昨日はあきらめてたんですが。

LD_LIBRARY_PATH=/usr/local/lib
と libguilereadline.a と libguilereadline.la がある場所を指定してみた
んですがこれは関係ないようですね...
979965:02/03/15 23:22
あ、guile 関係のファイルを一回全部消してからインストールやりなおした
ら readline 使えるようになった。よかったぁ。
>>978
cygwin では "guile" コマンドの make 時に libguilereadline.a
を一緒にリンクしてしまえば readline が使えるようになるよ。
981デフォルトの名無しさん:02/03/16 01:45
Gauche でシェルのコマンドを実行するのは (sys-system "command")
でできるのね。

>>973
tput 等使ってムフフなスクリプトを書いていますよん。
そろそろ次スレだね
いちおう、次スレです

LISP Scheme Part4
http://pc.2ch.net/test/read.cgi/tech/1016211619/
984 :02/03/16 03:11
age
>984
次スレあるのに。
あまのじゃくさん?
;; あまりに低レベルなのでこっちに。
nil でなければ t にするのに適当なのありますか?
(not (null hoge)) ってのはチトカコワルイ
>>986
nilでなければtにするのがnotだと思うんですけど……。
ifの代わりならunless、とか?
  ∧_∧
 ( ・∀・) ニヤニヤ
 ( 1000 )
 | | |
 (__)_)
コソーリ
マターリ
ヒソーリ
コソーリ
マターリ
ヒソーリ
コソーリ
(・∀・)アト4!!
∀・)アト3!!
・)アト2!!
 サッ
)彡
10001000 ◆h.gHK9LE :02/03/19 14:42
                / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         Λ_Λ <  コソーリ
        (´∀` )  \__________
  ∧ ∧   (___,,)_     
 (.,゚Д゚)/ ̄ ̄ ̄ ̄ /|     
 │ /∧ ∧    //||
 (/___(   ,,) _//  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ||  ,,/  つ ||/   <  1000!!
 ||  (__丿  ||      \__________
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。