2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

【入門】Common Lisp その10【質問よろず】

1 :デフォルトの名無しさん:2013/02/20(水) 15:31:16.00
Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、
Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。
それ以外でもCommon Lispについての話題なら歓迎します。

ま、ゆっくりやりましょう。

「いいものの本質は、いかなる時代においても変わらない」byパワーズ

■前スレ
【入門】Common Lisp その9【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1330888006/

■Wiki
http://wiki.fdiary.net/lisp/ (id:guest pass:cl)
http://cl.cddddr.org/
http://tips.lisp-users.org/common-lisp/

781 :デフォルトの名無しさん:2014/04/17(木) 01:24:10.54 ID:IbvTFaeD
世間一般じゃマクロといえばエクセルと言う印象なんだろうな
おれもlispを知らない頃はそう思ってた

782 :デフォルトの名無しさん:2014/04/17(木) 16:51:59.12 ID:zyw99q6w
elispで書くのはマクロじゃねーよ。
いつまでTECO引きずってんだ。
elispに今もあるマクロはdefmacroとkeyboard macroの二つだけ。
elisp infoやemacswikiのglossaryで確認しろ。

783 :デフォルトの名無しさん:2014/04/17(木) 17:04:38.50 ID:xMLxyHMV
>>782
emacsのエディタマクロとlispのmacroが混線してない?

784 :デフォルトの名無しさん:2014/04/17(木) 17:22:44.64 ID:NyU+/LXv
もうエディタマクロなんてないんだよ。
今あるのはキーボードマクロだけ。

785 :デフォルトの名無しさん:2014/04/17(木) 20:33:44.45 ID:xMLxyHMV
emacsってEditor MACroSの略だと思ってたけど今は昔なんやね。

786 :デフォルトの名無しさん:2014/04/17(木) 20:37:34.78 ID:zyw99q6w
TECOの時代は終わったのさ。

787 :デフォルトの名無しさん:2014/04/18(金) 17:15:18.23 ID:Tf5Wc60A
Real programming languageで書いたコードはmacroじゃない。

788 :デフォルトの名無しさん:2014/04/18(金) 18:33:29.25 ID:32S9ba0j
>>787
VBもPythonもエディタマクロに使われているけど全否定?

789 :デフォルトの名無しさん:2014/04/18(金) 19:08:27.69 ID:RLtKHaB0
Lispのマクロについて根本的に誤認している人がいるようだ。
Excelのマクロ言語はVBAであるとか
wzeditorはC言語ライクなマクロ言語を持つとか
そういう意味じゃないからなあ

790 :デフォルトの名無しさん:2014/04/18(金) 19:29:41.00 ID:32S9ba0j
>>789
elispはマクロじゃ無いって話の流れからついに一週してしもたかんじやね。

791 :デフォルトの名無しさん:2014/04/18(金) 19:42:43.89 ID:Mcdvxl1M
emacs lispはemacsの機能を拡張するMacro言語であるようにみえる
emacs lispではLispのMacroが使用できる
emacsにはKeyboard Macroと呼ばれるキー入力シーケンスを保存して再現する機能がある
emacsの名前の由来になったMacroとは、かつてテキストエディタTECO上で動作する特殊なマクロ言語でemacsが実装されたことによる

上記四つのMacroは全部別のモノ
emacsの話を出すとMacroがややこしくなる

792 :デフォルトの名無しさん:2014/04/18(金) 21:29:22.37 ID:RJBDeLhq
マクロって命令の羅列のこと。
elispみたいな本格的なプログラミング言語のコードをマクロとは言わない。

793 :デフォルトの名無しさん:2014/04/18(金) 21:31:08.69 ID:RJBDeLhq
vimはマクロと言っているなあ。
もはや死語に近いだろうな。

794 :デフォルトの名無しさん:2014/04/18(金) 23:11:58.90 ID:GBzJyQo4
Intel CPU のマクロフュージョンも取り上げてみたい。

795 :デフォルトの名無しさん:2014/04/19(土) 10:31:46.12 ID:SVxJm38+
>>792
>マクロって命令の羅列のこと。

より正確には、「拡張操作をパッケージ化したもの。またはその機能」
プログラミング言語での「操作」を、命令の羅列で表現する事がよく有るという事。
何に(言語、ツール)言及しているかによって、「拡張操作」の対象が変わるというだけ。

796 :デフォルトの名無しさん:2014/04/19(土) 13:56:07.37 ID:z/3w4FOm
macro/mak'roh/ [techspeak] /n./

A name (possibly followed by a formalarglist) that is equated to a text or symbolic expression to which it is to be expanded (possibly with the substitution of actual arguments) by a macro expander.
This definition can be found in any technical dictionary; what those won't tell you is how the hackish connotations of the term have changed over time.

The term `macro' originated in early assemblers, which encouraged the use of macros as a structuring and information-hiding device.
During the early 1970s, macro assemblers became ubiquitous, and sometimes quite as powerful and expensive asHLLs, only to fall from favor as improving compiler technology marginalized assembler programming (seelanguages of choice).
Nowadays the term is most often used in connection with the C preprocessor, LISP, or one of several special-purpose languages built around a macro-expansion facility (such as TeX or Unix's [nt]roff suite).

Indeed, the meaning has drifted enough that the collective `macros' is now sometimes used for code in any special-purpose application control language
(whether or not the language is actually translated by text expansion),
and for macro-like entities such as the `keyboard macros' supported in some text editors (and PC TSR or Macintosh INIT/CDEV keyboard enhancers).

797 :デフォルトの名無しさん:2014/04/19(土) 18:57:11.15 ID:2TBNSLSb
パッケージはないw

798 :デフォルトの名無しさん:2014/04/20(日) 02:33:59.70 ID:jJiPXZnf
>>797
「パッケージ管理システム」の"パッケージ"に限定しない話だろ?

799 :デフォルトの名無しさん:2014/04/20(日) 11:52:28.66 ID:ikGZm3gS
限定しなくてもない。
マクロ化にパックの意味なんてない。

800 :デフォルトの名無しさん:2014/04/21(月) 02:27:11.46 ID:fGRnx6yv
CLisp Win 64bit版の置き場を見つけられませんでした。
教えて下さい。初歩的な質問で申し訳無い。

801 :デフォルトの名無しさん:2014/04/21(月) 08:47:59.11 ID:lFeTo/mg
ハンナ・ユスティーナ・マルセイユ

802 :デフォルトの名無しさん:2014/04/21(月) 13:34:42.74 ID:bZ7teAnE
関数を返す関数の勉強のために
対話応答システムを作ってみたら
ゲロゲロの悲惨なものになった。ウーム。知らなさすぎる中で創るとわやになるな。
表示はdisplayのみ
キーボードからの入力はreadのみ

803 :デフォルトの名無しさん:2014/04/25(金) 18:03:13.94 ID:6BEElz8i
onlispの日本語訳はpdfやhtmlで無料で公開されてますが書籍と比べてどうですか
無料版だけで事足りますか

804 :デフォルトの名無しさん:2014/04/25(金) 18:52:24.46 ID:NEPb//MG
>>803
オンライン版を読んでから考えてみたら?

805 :デフォルトの名無しさん:2014/04/25(金) 19:11:55.61 ID:6BEElz8i
>>804
継続まで読んだんですが両方一通り読んだことがある人の意見が欲しいんです

806 :デフォルトの名無しさん:2014/04/25(金) 19:28:44.13 ID:Lv/ArU8B
英語版のon lisp基本にすれば、翻訳なんかなんでもいいような

807 :デフォルトの名無しさん:2014/04/25(金) 20:07:20.89 ID:+TF8D1gC
>>803
いろいろ気になる奴は書籍買え

808 :デフォルトの名無しさん:2014/04/28(月) 10:23:07.40 ID:vtVIy75a
lighttableでlisp使えるようにならにゃいかな

809 :デフォルトの名無しさん:2014/04/28(月) 10:29:57.05 ID:mheEU0a2
>>805
折れは1今、継続、勉強中

なんかわけわからんな、なんだこれは!
と勉強してたら
col is short for collection
;"continuation"
とか出できて
「おお、これが継続ちゅうもんかい!」
とある意味感激した
折れも継続身につけるとこまで来たんやあ
「カーカー、おまえはカラスかい!
人間、なめとんのか!、()ばかりやないカー!」
とリスプに喧嘩売ってた時がなつかしい

810 :デフォルトの名無しさん:2014/04/28(月) 21:22:46.02 ID:k3LtCAjB
>>808
Clojure……(震え声

811 :デフォルトの名無しさん:2014/04/29(火) 17:51:41.95 ID:UBPAuzy/
勉強も継続してください。

812 :デフォルトの名無しさん:2014/04/29(火) 19:19:10.84 ID:NGZ8LFiM
onlisp書籍版は表紙がいいし手触りも良い。
持ち歩いてちょっと汚れや痛みが付いてきた頃の風合いも良い。

813 :デフォルトの名無しさん:2014/04/29(火) 21:19:52.31 ID:TDR4lejK
>>812
原典、翻訳本、どっち買ったの?

814 :デフォルトの名無しさん:2014/05/04(日) 02:53:08.77 ID:6dfFx+9a
onlispのhtml版はあくまで草稿だから図が抜けてたりするし
オーム社から出てる紙の本か電子版を買った方がいいとおもう

onlispの継続の実装ってsbclに入れると警告出まくるよね
実際にはcl-contを使うのがよい

815 :デフォルトの名無しさん:2014/05/22(木) 20:36:07.46 ID:l7dCfkj7
恥ずかしすぎて質問しにくいのですが・・・
xyzzyで

(ceiling 120)
120
0.0

(ceiling 312 2.6)
121
-2.599988

なぜ後者は120にならないのか、初歩すぎて検索しても見つからない TT

816 :デフォルトの名無しさん:2014/05/22(木) 20:56:24.23 ID:Fu9GuZb0
ceilingは正の無限大に向けて丸めるからです。(切り上げ)
負の無限大に向けて丸めたければfloor、
0に向かって丸めたければtruncate、(小数部破棄=切り捨て)
一番近い整数に近づけたければroundです。(四捨五入)

817 :デフォルトの名無しさん:2014/05/23(金) 01:09:56.04 ID:gWh9LE9u
いやそっちじゃなくて、
コンピュータ上でほとんど小数は近似値だよー、312/2.6=120.00001になっちゃうよー、って絡みの話では?

818 :815:2014/05/23(金) 02:13:12.85 ID:Dj6yziyp
>>817
なるほど 120.00001 になるんだったら120にならないのは当然ですね
近似値になるって事を考えて試行錯誤し
2.6 を 2.6001にすると言う適当な事で対処しました・・・

819 :デフォルトの名無しさん:2014/05/23(金) 08:31:19.17 ID:S9ZhBRpZ
じゃなくて、四捨五入にしないと危ないだろそれ。

820 :デフォルトの名無しさん:2014/05/23(金) 08:41:53.80 ID:UMGtPnEJ
ラウンドやな

821 :デフォルトの名無しさん:2014/05/23(金) 08:58:33.93 ID:UMGtPnEJ
リスプ勉強始めました。まだリスプらしい発想ができず知識もないのですが、C言語でいう静的局所変数の実現方がわからず次のようにしてみました。
もっと、まともな方法有るでしょうか?

;;;隠れ引数cntを利用して静的局所変数を実現する
;;;
;;;目的のatomが与えられたlistの何番目にあるか?
;;;なければゼロを返す
;;;(member* 'c '(a b c d )) -> 3
;;;(member* 'x '(a b c d )) -> 0

(defun member* (x lst &rest cnt)
(if (null cnt) (setq cnt '(1)))
(cond
((null lst) 0)
((eq (car lst) x)
(car cnt))
(t
(member* x (cdr lst) (+ (car cnt) 1)))))

822 :815:2014/05/23(金) 09:13:01.50 ID:5/FhmPgX
>>819
なんて説明したら良いんだろう・・・
あるブラゲのカードの攻撃力を求める計算を良くするので
それを簡単に求めれないかと xyzzyのLisp入門見て関数作ったのです
Lv1時数値の0.08倍ずつLvUp毎に増えるので
Lv1からLv?の計算は簡単でした

(defun st計算 (ステ Lv) (decf Lv)
 (+ Lv ステ (* Lv 0.08 ステ))
)

しかしLv10とかLv20とかからLv?で躓きました
LvUp済み数値は切り捨てられているため
その数値から計算した数値は必ず求めたい数値以下になる
なのでceilingで切り上げたのですが
丁度の場合 (/ 312 2.6) に落とし穴が><

後、四捨五入も最初試しましたが
Lv3のカードとか低Lv時にまずい結果となりダメでした

もっとスマートなやり方あるのでしょうが
現在問題なく計算出来てるため良しとしています
日本語入ってたり段落が・・・初心者丸出しですが晒します TT

(defun st (ステ 現L L) (decf 現L) (decf L)
 (setq X (ceiling (- ステ 現L) (+ 1.001 (* 0.08 現L))))
  (+ L X (* 0.08 L X ))
)

ステ = 現在のステータス値
現L = 現在のLv値
L   = 求めたいLv値

823 :デフォルトの名無しさん:2014/05/23(金) 10:05:01.75 ID:fRyU8CgY
>>820
この例ではカウンタを引数渡しでいいと思う。
C言語でいう静的局所変数に相当する機能としてはクロージャがある。
ttp://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp11.html
クロージャを使ってmember*を実装しようとするとこうなる。

 (let ((cnt 1))
  (defun member* (x lst)
  (cond ((null lst)
  (setq cnt 1)
  0)
  ((eq (car lst) x)
  (prog1 cnt
  (setq cnt 1)))
  (t (setq cnt (1+ cnt))
  (member* x (cdr lst))))))

824 :デフォルトの名無しさん:2014/05/23(金) 11:01:01.63 ID:VIeF9Nr2
(defun member* (x lst &hidden (c 1))
(cond
 ((null lst) 0)
 ((eq (car lst) x) c)
 (t (member* x (cdr lst) (1+ c)))))

(member* 3 '(1 2 3 4 5) 1) => ERROR
(member* 3 '(1 2 3 4 5)) => 3

みたいな砂糖が欲しい

825 :デフォルトの名無しさん:2014/05/23(金) 11:14:23.71 ID:EZ1gF0i3
>>823
どうも有り難うございます。書いてもらったSample睨みながら勉強してみます。

826 :デフォルトの名無しさん:2014/05/23(金) 11:15:49.84 ID:SQmi/tAr
nthに合わせて0オリジンじゃないと気持ち悪いな。

827 :デフォルトの名無しさん:2014/05/23(金) 11:24:51.58 ID:fRyU8CgY
>>821,824
Lisp的に書くなら関数内で局所関数を定義すると思う
(defun member* (x lst)
(labels ((iter (lst cnt)
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))
(iter lst 1)))

Schemeの名前付きletを移植するとか (Let over Lambdaより)

(defmacro nlet (n letargs &rest body)
`(labels ((,n ,(mapcar #'car letargs)
,@body))
(,n ,@(mapcar #'cadr letargs))))

(defun member* (x lst)
(nlet iter ((lst lst) (cnt 1))
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))

828 :デフォルトの名無しさん:2014/05/23(金) 11:33:16.96 ID:C0KuPecL
>>827
たびたびサンクスです
どうも有り難う

829 :デフォルトの名無しさん:2014/05/23(金) 11:46:22.83 ID:/J+wV7gv
できるだけ無駄をはぶきたくてライブラリ解読して、書き換えて自前のライブラリつくっていってるんだが、usocketの内部をだれか解説してけろ。

830 :デフォルトの名無しさん:2014/05/23(金) 12:54:38.32 ID:3Eda7qDb
usocket-0.6.1/backend/使ってる実装.lispを参考にしてください。
"U"niversal部分はいらないだろうから。

199 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)