【叩かれて】Emacs Lisp道場【強くなれ】
emacs覧 / PC版 /みんなの評価 : ○
901 = :
>>896
再帰使うまでもない。
(defun list-ref (lis n)
(nth (1- n) lis))
902 = :
(defun my-mapcar (func list)
(let ((rest list) (results ()))
(while (not (null rest))
(setq results (cons (funcall func (car rest)) results))
(setq rest (cdr rest)))
(nreverse results)))
とかかな。
903 = :
setq とか cons を使いたくないんですとか来た場合に備えておこう。
(require 'cl)
(defun my-mapcar-2 (func lst)
(loop for elem in lst
collect (funcall func elem)))
904 = :
>>898 つうか、そゆのは大抵自分では考えないだろうし、調べないだろうし、向上心もないだろうし、礼儀も知らないだろうし、
人の忠告も聞かないだろうから。さっさと答を与えればそれ以上しつこく聞いてこない軽い荒らしだと思って対応するが吉。
905 = :
cl は宗教上の理由でちょっと……。
906 = :
自分も書いてみた。リストしか考慮してない。
あんまり慣れてないからどっかまずいところあるかも・・・(自分への免罪符
(defun my-mapcar (func list)
(defun my-mapcar-iter (func list rtn)
(if (null list)
rtn
(my-mapcar-iter func (cdr list)
(setq rtn (cons (funcall func (car list)) rtn)))))
(my-mapcar-iter func list '()))
910 = :
>>898の質問者はもうダメだろうね。レポートは突破できても試験は無理そうだ……。
授業二三回でればいいだろうになぁ。まったく聞いてなかったんだろうな。授業料無駄だったね。
911 = :
>>909
最近、ちょっと scheme で遊んでたもので・・・。
> Emacs Lisp じゃー再帰は実用的じゃないお。
調べてみたところ、再帰回数が max-lisp-eval-depth で制限されてる、
末尾再帰が最適化されない、のようなことがあるのですね。
> しかも defun は internal define と違ってグローバルだし…。
M-x help f で関数のリスト見たら、my-mapcar-iter があって驚きました。
よくよく考えてみたら、setq はいらなかった。
なんでつけたんだろう。
まずいところ多すぎorz
912 = :
>>905
改宗すればおk
914 = :
flet を使って書き直すなら、こんなかんじでしょうか。
たしかに my-mapcar-iter が隠れた。これ便利かも。
(require 'cl)
(defun my-mapcar (func list)
(flet ((my-mapcar-iter (func list rtn)
(if (null list)
(reverse rtn)
(my-mapcar-iter func (cdr list)
(cons (funcall func (car list)) rtn)))))
(my-mapcar-iter func list '())))
915 = :
…再帰するなら labels じゃねーとダメなんじゃね? cl のバグ?
ズバリこうだろ。while 版より短い!! 俺のバイク小屋ハァハァ
(defun my-mapcar (func lst)
(let ((result nil))
(dolist (e lst)
(push (funcall func e) result))
(nreverse result)))
916 = :
なんとなく nreverse なしのループで書いてみた
(defun my-mapcar (fun list)
(let* ((result (list nil))
(x result))
(while list
(setcdr x (list (funcall fun (car list))))
(setq x (cdr x) list (cdr list)))
(cdr result)))
>>915
flet を macroexpand してみればわかるよ
まあしょうがないんだろうけどちょっと気持ち悪いよね
917 = :
ずびまぜん。
elispで 16進数文字列を整数に変換する楽な方法ってありません?
(hoge "64") => 100
ってなるような。
(defun hoge (s)
(string-to-number (concat "#x" s)))
とかじゃ 0が返ってきてしまいました。
919 = :
おお、そんなところに &optional があったとは...
infoをもっとちゃんと読むべきでした。
どうも有難うございました。
920 = :
923 = :
あるオブジェクトに対し、car-safeが非nilとなる時
cdrでなくcdr-safeを使うべき局面ってある?
925 = :
同じ名前の変数 (defvar hoge)と関数 (defun hoge ())が定義されているとき、
変数だけ定義を消すことってできますか?
(unintern 'hoge) だと、両方消えてしまうので。
927 = :
ぬりがとう。
ところでこれ何て読むのですか?
(エフ)メイク・アン・バウンドでいいんかな?
思い出されるcreat()。
928 = :
>ところでこれ何て読むのですか?
なんでしょうね?
>思い出されるcreat()。
なるw
929 = :
defconstしてるものには、時に大文字のシンボルを使ってみるのも一興かなと
ふと思った。
たぶんウザいだろうけど。
930 = :
EmacsがXで動いているときだけ、
C-zでアイコン化しない様にしたいと思っています。
Xで動いているのかterminalで動いているのか判別するには
どうしたらよいのでしょうか。
934 = :
本当に文字通りそうしたいのならば
(shell)
と書く。
935 = :
>>934
できました。ありがとうございました。
936 = :
(global-set-key [?\C-;] 'なにか)
とか
(global-set-key "\C;" 'なにか)
とやってもエラーがでて動きません。
;をjにしたら動いたので”なにか”が間違っていることはいないと思います。
C-;やC-, C-. へのバインドを指定するにはどうしたらよいのでしょうか
どなたか教えていただけないでしょうか?
937 = :
[(control ?;)]
設定程度の質問なら、次回からelispスレじゃなくてemacsスレ行きな。
938 = :
>>937
ありがとうございます
今後は気をつけます
どうもすいませんでした
そのようにしても動きはしませんでしたが、
それはターミナルからの接続の仕様らしいと分かったので、
別のキーを割りあてることにします
940 = :
まちがえた。以外が一つ多かった。
942 = :
普通に1文字ずつチェックすれば良いじゃない。
944 = :
>>943
幸あれ。
やっぱりあるよね。token で探してたよ
>>942
普通?とりあえずこんなん書いてた
(lambda (string delimiter)
(let* ((iter (lambda (str dlm lst)
(if (and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
(funcall iter
(and (string-match dlm str) (substring str (1+ (string-match dlm str)) nil))
dlm
(cons (substring str 0 (string-match dlm str)) lst))
(cons (substring str 0 (string-match dlm str)) lst)))))
(funcall iter string delimiter ())))
945 = :
下記のような独自スクリプトのメジャーモードを作っています。
function:
if hoge == 0 {
hogehoge;
}
elseif hoge ==1 {
if hoge2 == 0 {
hogehoge2;
}else{
hogehoge3;
}
}
end;
階層は上記のif文のみです。
自動インデントをつけたいのですがどうすればいいでしょうか?
947 = :
buffer-local-variableなるものがあるそうですが、
.emacs.elなどでsetq-defaultで設定した値は、
新しいバッファを作る度にバッファごとの値のコピーが作られてしまうんでしょうか。
カスタマイズ性から見るとsetq-defaultの方が使い易そうなのですが、
パフォーマンスに悪影響がでないか心配なんです。
948 = :
make-variable-buffer-local されてるような変数の話だよね。
これは setq とかで書き換えた時点で、その buffer に local な変数が作られるってシステム。
書き換えるまではどの buffer でも初期値を参照してて、 setq-default はこの初期値を書き換える。
それ自体がコピーの原因になったりはしないはず。
949 = :
call-processとかの外部コマンド呼び出し関数で
コマンドの出力(標準出力)を文字列もしくは文字列リストで
返すようなものってないでしょかね?
いちいちバッファに出すのがとても無駄に感じる時がある
みんなの評価 : ○
類似してるかもしれないスレッド
- 【熱く】お前のEmacsにはまった理由【語れ】 (577) - [36%] - 2021/8/28 17:30 ○
- 「Emacsは消滅すべき」、ゴスリング氏 (127) - [17%] - 2023/1/12 15:45
トップメニューへ / →のくす牧場書庫について