質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Common Lisp

Common Lispは、複数のLISP方言を統合した言語で、LISPの標準です。LISPの特徴を持ちつつ、他のプログラミングパラダイムも取り入れています。人工知能などの領域で多く用いられている言語です。

Q&A

0回答

416閲覧

関数を変数に束縛させる方法

tf2014

総合スコア75

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Common Lisp

Common Lispは、複数のLISP方言を統合した言語で、LISPの標準です。LISPの特徴を持ちつつ、他のプログラミングパラダイムも取り入れています。人工知能などの領域で多く用いられている言語です。

0グッド

0クリップ

投稿2022/12/29 20:15

編集2022/12/29 21:29

関数を他のシンボルに束縛することができますか?

例えば、SchemeのREPLに以下を入力すると期待通りが表示されます。

Scheme

1 (let ((x *)) 2 (x 2 2)) 34

同じことをSBCLで試すと、"illegal function call"というエラーになります。そこで、xinspectしてみると束縛されていないようです。

LISP

1CL-USER> (let ((x *)) 2 (inspect x)) 3 4The object is a SYMBOL. 50. Name: "NIL" 61. Package: #<PACKAGE "COMMON-LISP"> 72. Value: NIL 83. Function: "unbound" ;; <------ 束縛されていない 94. Plist: NIL 10>

グローバル変数でも同じ結果になります。

LISP

1CL-USER> (defparameter y *) 2Y 3CL-USER> (inspect 'y) 4 5The object is a SYMBOL. 60. Name: "NIL" 71. Package: #<PACKAGE "COMMON-LISP"> 82. Value: NIL 93. Function: "unbound" ;; <------ 束縛されていない 104. Plist: NIL 11> q 12; No values

Common Lispでは関数をシンボルに束縛することはできないのでしょうか? 

よろしく、お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/12/30 01:32

(let ((x '*)) (funcall x 2 2)) か、 (let ((x '*)) (apply x '(2 2))) でしょう。
otn

2022/12/30 04:25

Common Lispの処理系が手元に無いですが、Emacs-Lispだと、letでは無理ですが、 (fset 'x '*) (x 2 2) => 4
tf2014

2022/12/31 00:53

melianさん、otnさん、 お返事ありがとうございます。'funcall`と`apply`をつかったら、出来ました。`fset`はcommon-lispでは"undefined function"になりました。`setf`で試してみましたができませんでした。 お2人の知恵を貸していただいて、ありがとうございます。
otn

2023/01/01 06:09

「関数」でなく「関数名(のシンボル)」をセットすれば良いのであれば、funcallで良いかと思います。
tf2014

2023/01/01 17:26

ありがとうございます。 (慣れないせいか、funcall の表記のほうが、見やすいです)
melian

2023/01/01 17:50

参考までに、setf の場合は、 (setf (fdefinition 'x) #'*) とします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問