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

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

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

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

Q&A

解決済

1回答

1791閲覧

Lispの課題がわかりません

papi_tokei

総合スコア106

LISP

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

0グッド

0クリップ

投稿2017/01/05 10:20

編集2017/01/06 05:28

###前提・実現したいこと
授業でLispについての課題が出ました.
これまでC++やpythonといった言語しか触ったことがないので,
Lispの課題が難しく,質問させていただければと思います.

できるだけweb等で調べましたが,提出期限が迫ってきていますので,
お力をお貸しいただければと思います.

###該当のソースコード
いかにソースコードを載せます.
namesと,salaryとpositionという関数を作成せよという問題です.
さらに,make-personの最初の要素を抽出する関数family-nameと最初以外の要素を抽出する関数given-nameも作成しないといけません.

lisp

1(define (make-entry person salary position) 2 (list person salary positon)) 3(define make-person list) 4(define test-person (make-entry (make-person "james" "tom" "harry") 300000 "president")) 5 6(names test-person) 7; Value: (james tom harry) 8(salary test-person) 9; Value: 300000 10(position test-person) 11; Value: president 12 13(given-names (make-person "williams" "anne" "marie" "heather")) 14; Value: (anne marrie heather) 15(family-name (make-person "williams" "anne" "marie" "heather")) 16; Value: williams

Lispについての知識がほぼありません.
ですが,コードを見ればある程度理解できるようになりました.
解答のためのアドバイス等をお願いできればと思います.
よろしくお願いいたします.

###追記です.
まず,最初の3問についてですが,以下のように関数を定義して解決しました.

lisp

1>(define (names x) 2 (car x)) 3> (names test-person) 4'("james" "tom" "harry") 5> (define (salary x) 6 (car (cdr x))) 7> (salary test-person) 8300000 9(define (position x) 10 (cdr (cdr x))) 11> (position test-person) 12'("president")

さらに,最後の2問ですが以下のように関数を定義して解決しました.

lisp

1> (define (given-names x) 2 (cdr x)) 3> (given-names (make-person "williams" "anne" "marie" "heather")) 4'("anne" "marie" "heather") 5> (define (family-name x) 6 (car x)) 7> (family-name (make-person "williams" "anne" "marie" "heather")) 8"williams" 9

###補足情報(言語/FW/ツール等のバージョンなど)
実行環境はDrRacketです.
OSはwindows7です.

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

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

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

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

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

ikedas

2017/01/05 11:20

作成しなければならない関数をご自分で書けるところだけでも書いてみて下さい。動かなくてもいいので、それを質問に追記してもらえますか。院生といえば立派な大人ですので、さすがに小学生の夏休みの宿題の手伝いみたいなことをしてあげるのは気がひけます (参考書も紹介しましたし)。
ozwk

2017/01/06 00:51 編集

何ができてないんですか?まさか1から10まで全部教えろと?問題の前提もわかりません。(すでに定義された関数を使えということ?)
papi_tokei

2017/01/06 05:30

ikedasさん.返信いただきありがとうございます.私も少し甘えている部分がありました.ご指摘いただき,反省しました.昨日一日かけて必死にLispの勉強をしました.質問に自分なりの回答を追記いたしました.
papi_tokei

2017/01/06 05:36

ozwkさん.回答いただきありがとうございます.参考にさせていただきました.私なりに作成した答えを質問に追記させていただきました.
guest

回答1

0

ベストアンサー

Lisp系は前回の質問で初めて触りましたが回答します。

要点のみ言うと、
0. test-personはリストになっている。
0. リストの先頭と残りはそれぞれcarcdrで取れる。

対話環境でtest-personがどういう構造になっているか確かめて、carとcdrを適当に作用させて、
目的のものが得られたら関数にするだけです。

投稿2017/01/06 01:03

ozwk

総合スコア13521

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

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

papi_tokei

2017/01/06 05:41

最後に一点だけ質問させていください.今回私が作成した回答で,返り値が"williams"となっていると思います.ダブルクォーテーションを無くして,返り値をwilliamsにすることは可能でしょうか? (family-name (make-person 'williams "anne" "marie" "heather")) とすると,返り値が'williams になりました.完全にwilliams にすることは不可能なのでしょうか?
ozwk

2017/01/06 05:49

文字列入れて文字列返しているんだから、 対話環境で""付きで返却されても別にいいんじゃないかと思うんですが。
papi_tokei

2017/01/06 06:06

確かに,おっしゃるとおりですね.少し気になってので,質問させていただきました. ご協力いただきありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問