안녕하세요 초보자의 prolog고민에 대한 조언좀 부탁드리겠습니다. .

sungsoo81의 이미지

안녕하세요 prolog 수업을 듣고 있는 학생인데 다른 프로그램에 비해 prolog는 자료도 많지 않고 쉬운듯 하면서 정말 헷갈려서 조언을 구하고자 글 올립니다.

숙제는

심볼테이블 "class” 를 만드는건데 . 심볼테이블의 요소는 다음과 같습니다.

(Name, Category, Type, Value) 이렇게 4개고 심볼테이블 이름이 리스트에 들어가야 합니다.

다음과 같은 predicate가 필요 한데요.

1) add (현재SymbolTable, Name, Category, Type, Value, NewSymbolTable)
새로운 심볼테이블을 name, category, type, value로 만들어야 합니다. 근데 현재 심볼테이블의 Name 값이 새로 만들려는 Name값과 일치한다면 fail을 출력합니다.

2) entry (SymbolTable, Name, Category, Type, Value) - Name값에 연관된 category, type, value을 출력하는데 심볼 테이블에 이름이 없으면 fail을 출력합니다. ,

맞는지 모르겠는데

Symbol1((name1, category, type, var),(name2, category, type, var),.....)
Symbol2((name3, category, type, var),(name4, category, type, var),.....)
Symbol3((name5, category, type, var),(name6, category, type, var),.....)

이런 모양(의미상)으로 저장되고 name값을 찾아 나머지를 출력하라는 거 같은데...

프롤로그에서 어떻게 리스트에 이름을 부여하고 그걸 저장하고 다시 호출해 사용할수 있는지 모르겠습니다.

예를 들면

add([],a,b,c,d,[a,b,c,d]).
이런 predicate를 만들고
실행을
add([],a,b,c,d,Test1).
이라고 실행하면
Test1=[a,b,c,d]
yes
이렇게 출력이 되지만
Test1이라는 이름을 호출해서 무얼 할수 있는 predicate를 어떻게 만드는지 모르겠습니다.

add([Test1],q,w,e,r,[Test3]). 이런식으로 실행을 시키면 작동을 안합니다..ㅠㅠ

어디서 보니 이건 assignment 기호가 없기 때문에 Test1에 실질적으로 저장이 되지 않는다고 들었는데

그럼 구분을 어떻게 해야 할지 ...

아니면 애초에

entry([a,b,c,d],q,w,x,z) :- add([],a,b,c,d,[a,b,c,d]),not(a = q).

이런식으로 짜볼까 했는데 이것도 작동이 제대로 안되요.

append 같은걸 써봐야 하나 해도 어떻게 찾는것이고 어떻게 add를 해야할지 안풀리네요...
고수분들 제발 조언해주시고 이 불쌍한 중생을 구제해 주세요.

klutzy의 이미지

?- add([],a,b,c,d,Test1), add(Test1,q,w,e,r,Test3).

prolog는 논리 추론을 위한 구조라서, 대입 같은 것이 존재하지 않습니다. add([],a,b,c,d,Test1)는 Test1에 [a,b,c,d]를 대입하는 과정이 아니라 Test1에 어떤 값이 들어갈지를 추정하기 위한 질문입니다. 그래서 거꾸로 생각하면 add(X, a, b, c, d, [a,b,c,d])를 질문하면 X = []라는 답이 나오는 것이고요.

Test1을 이용해서 Test3을 추정하려면 두 질문을 묶어서 해야겠죠.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.