[過去ログ] Lisp Scheme Part40 [転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
953: デフォルトの名無しさん [sage] 2018/06/01(金) 08:38:48 ID:pJKbzob1(1) AAS
マンガは面白い
954
(1): デフォルトの名無しさん [sage] 2018/06/30(土) 04:32:01 ID:7M67VtrJ(1) AAS
stackoverflowってホントの初心者が質問してもいい雰囲気なん?
955
(1): デフォルトの名無しさん [sage] 2018/06/30(土) 21:17:22 ID:68JzM2MV(1) AAS
>>954
雰囲気ってのが曖昧だけど、質問内容が馬鹿げたものでもどんどんしていいよ。
初心者の質問内容がしょうもないことなのは普通のこと。
だけど、質問の仕方にはある程度の作法がある。

外部リンク:ja.stackoverflow.com

「ホントの初心者」というのは自分が何を知りたいのか理解していないことが多いので、
回答できる質問に修正されるまでしつこくコメントされるかもしれないけど、
それは非難ではなく回答するために必要な対話なので、面倒くさがらないでね。
956: ◆QZaw55cn4c [sage] 2018/07/01(日) 21:02:57 ID:7W/RE1b9(1) AAS
>>955
>自分が何を知りたいのか理解していないこと
それがわかるようであれば、回答を半分得たも同然ですね…
私にはわからないことが沢山あります、それが減る気配もない…
957
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2018/07/03(火) 11:46:05 ID:BKTruI85(1/2) AAS
Gauche の 0.9.6 リリースが近いらしい
958
(1): デフォルトの名無しさん [sage] 2018/07/03(火) 19:48:45 ID:BYpLJ+yC(1) AAS
>>957
川合さん、未だメンテしてるのか。
ハワイで俳優業やってんじゃなかったけ?
959: はちみつ餃子 ◆8X2XSCHEME [sage] 2018/07/03(火) 22:38:46 ID:BKTruI85(2/2) AAS
>>958
ずっと兼業してるみたいだよ。

俳優としての履歴はここに書かれているけど、 (実際には仕事につながらなかったオーディションも含めると) 2003 年からスタートしてる。
外部リンク[cgi]:practical-scheme.net

スクウェアの映画の仕事を終えてから Scheme Arts という名前で法人 (といっても史郎さんひとりの会社だが)
を立ち上げてコンサルティングの仕事を始めて、そのほんの少し後から平行して俳優としても活動してることになる。
960: はちみつ餃子 ◆8X2XSCHEME [sage] 2018/07/04(水) 00:27:22 ID:afbTNZQQ(1) AAS
0.9.6 キタ――♪ o(゚∀゚o) (o゚∀゚o) (o゚∀゚)o キタ――♪
961: デフォルトの名無しさん [] 2018/07/04(水) 01:17:41 ID:OTzKBqUL(1) AAS
関数型言語で画像処理をやってみたいんだけれど
Common Lispで画像読み込みの定番ってある?

debianでcl-png使おうとしたらlibpng12が必要みたいで
使えませんでした。(libpng16ならある)

clwikiに載っているimageライブラリでドキュメントが充実してるのって
cl-pngが一番なんだけど。
962
(1): デフォルトの名無しさん [sage] 2018/07/04(水) 07:25:53 ID:vo63HsfH(1) AAS
そーいやgimpがlisp系
963: デフォルトの名無しさん [] 2018/07/04(水) 21:49:20 ID:gFgZc5FG(1) AAS
KI1
964: はちみつ餃子 ◆8X2XSCHEME [sage] 2018/07/05(木) 03:00:09 ID:l9X7uzb+(1) AAS
>>962
Scheme やね。
TinyScheme がベース。
R5RS のサブセットになってる。
965
(1): デフォルトの名無しさん [] 2018/07/06(金) 01:28:47 ID:xqwQ2rU4(1) AAS
ラムダ計算と純lispはともにチューリング完全
だからlambdaだけで純lispが作れるはず
実際、cons,car,cdrは作れる
(define (my-cons a d) (lambda (f) (f a d)))
(define (my-car ad) (ad (lambda (a d) a)))
(define (my-cdr ad) (ad (lambda (a d) d)))
でも、atom?またはpair?はどう作ればいいの?
966
(8): デフォルトの名無しさん [sage] 2018/07/11(水) 13:07:02 ID:7FwajRbN(1/7) AAS
教えてください。初心者です。

(defun test ()
(let ((result '(0 0 0 0 0 0 0)))
(format t "~{ ~a ~}" result)
(incf (nth 4 result) 7)
(incf (nth 6 result) 6)
result))

この関数なんですが、実行するたびに結果が変わるのです。

HOGE 28 > (test)
0 0 0 0 0 0 0
(0 0 0 0 7 0 6)

HOGE 29 > (test)
0 0 0 0 7 0 6
(0 0 0 0 14 0 12)

(let ((result (make-list 7 :initial-element 0)))...
にすれば意図したとおりに動作するのは分かっているのですが、
何で元の関数定義でだめなのかが分からないのです。
ちなみに、Lispworks 7.0 Windows 32bitです。
他の処理系でも同じような動作になるのでしょうか。
967
(1): 966 [sage] 2018/07/11(水) 13:41:02 ID:7FwajRbN(2/7) AAS
何でこうなるかは、何となくわからなくはないのですが(1回目の実行と2回目の実行で同じリストをletで束縛してるってことですよね?)、
letってそういう動作するのを想定して使わなきゃいけないものなのか、ってのがわかってないのです。
僕の理解では元の関数定義でいけそうな気がするのです。
968: 966 [sage] 2018/07/11(水) 15:14:10 ID:7FwajRbN(3/7) AAS
(defparameter *FOO* '(bar bar bar))
(defun hoge-is-foo (&optional (piyo nil))
(let ((hoge '(fuga fuga fuga)))
(if piyo (setf *foo* hoge))
(format t "HOGE: ~{ ~a ~}~%" hoge)
(format t "*FOO*: ~{ ~a ~}~%" *foo*)
(if (eq hoge *foo*)
(format t "HOGE IS FOO!~%")
(format t "HOGE IS NOT FOO!~%"))))

PIYO 82 > (hoge-is-foo)
HOGE: FUGA FUGA FUGA
*FOO*: BAR BAR BAR
HOGE IS NOT FOO!
NIL

PIYO 83 > (hoge-is-foo t)
HOGE: FUGA FUGA FUGA
*FOO*: FUGA FUGA FUGA
HOGE IS FOO!
NIL

PIYO 84 > (setf (car *foo*) 'baz)
BAZ

PIYO 85 > (hoge-is-foo)
HOGE: BAZ FUGA FUGA
*FOO*: BAZ FUGA FUGA
HOGE IS FOO!
NIL

こーゆーもんなん?
969
(3): デフォルトの名無しさん [] 2018/07/11(水) 15:25:01 ID:16Hc9NDk(1/3) AAS
>>966
let の使い方というより、 quote されたリストの破壊的変更は literal object の変更にあたるから未定義動作になるはずで、そのせいで変な挙動になってるんだと思う。

ちなみに Allegro だと LispWorks と同じ挙動になった。

SBCL だと警告で "Destructive function SB-KERNEL:%RPLACA called on constant data: (0 0 0)." と出る。
で、繰り返し呼んでも毎回 (0 0 0 0 0 0) が返されるみたい。
970
(1): 969 [sage] 2018/07/11(水) 16:28:25 ID:16Hc9NDk(2/3) AAS
>>967
あ、質問の趣旨が違うか。

(defun hoge ()
'(1 2 3))

があるときに、

(eq (hoge) (hoge))

は、同じリストを返すのだから常に T になるのか?って話かな
971
(1): 966 [sage] 2018/07/11(水) 17:18:46 ID:7FwajRbN(4/7) AAS
>>970
966です。
僕が知りたかったのは>>969の内容です。どうもありがとうございました。
未定義動作なのですね。基本的にこのような破壊的代入は避けるってことですかね。

しかし、これが未定義だと、確率は低いでしょうけど、いつかどこかで事故が起こったりするんじゃないのかな。知らんけど。
972
(1): デフォルトの名無しさん [sage] 2018/07/11(水) 19:41:32 ID:16Hc9NDk(3/3) AAS
>>971
うーん、リストを破壊的に変更する場合、上のようにリテラルを破壊するのもまずいし、リテラルでなくても部分共有されたリストだと予想外の場所に影響が及ぶので、自分は安全とわかってないとやらないです。

破壊的変更をするのが前提なら、 list 関数や言及されてるmake-listで新しく作ったり、 copy-list で複製してからいじったりすることが多いかも。
973
(1): デフォルトの名無しさん [sage] 2018/07/11(水) 20:14:45 ID:VhV09Bdv(1) AAS
>>965
↓の isnil あたりを参考にすれば作れそう。
外部リンク:en.wikipedia.org
974: 966 [sage] 2018/07/11(水) 20:23:44 ID:7FwajRbN(5/7) AAS
>>972
破壊的な変更には注意が必要なこと自体は、入門書などを読んで知っていたのですが、
今回の例では関数を呼び出す度に別のリストをletが束縛するだろうjkと勝手に思っていました。

勉強になりました。ありがとうございます。
975
(1): デフォルトの名無しさん [sage] 2018/07/11(水) 20:33:50 ID:Igjhxsb4(1) AAS
>>966
SBCLは警告が出るから出ないように修正するだけだし、無視しても意図した通りに動く
LispWorksは警告出ないの?
976: 966 [sage] 2018/07/11(水) 20:46:42 ID:7FwajRbN(6/7) AAS
>>975
でないっす。
977
(2): 966 [sage] 2018/07/11(水) 21:11:34 ID:7FwajRbN(7/7) AAS
自分の環境でSBCLでやってみたら↓みたいになった。
個人的にはLispworksの挙動より意味不明かも。
(hoge-is-foo)はLispworksと同じ結果。

* (test)
0 0 0 0 0 0 0
(0 0 0 0 7 0 6)
* (test)
0 0 0 0 7 0 6
(0 0 0 0 7 0 6)
* (test)
0 0 0 0 7 0 6
(0 0 0 0 7 0 6)
1-
あと 25 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.252s*