符号编程的例子是什么?

时间:2010-09-21 01:13:03

标签: programming-languages lisp computer-science scheme common-lisp

我必须在我的符号编程类中做一个术语项目。但我不确定一个好的/合法的项目会是什么。任何人都可以给我一些符号编程的例子吗?只是任何一般的想法,因为现在我倾向于基于转弯的战斗游戏(基本上是jrpg风格),但我真的不想做游戏。

3 个答案:

答案 0 :(得分:4)

Peter Norvig的书Paradigms of Artificial Intelligence Programming, Case Studies in Common Lisp在这方面很有用。

本书详细描述了使用Common Lisp的符号AI编程。

这些例子属于计算机代数领域,解决数学任务,游戏,编译器实现等问题。

很快就会出现另一本有趣的书:康拉德巴斯基的The Land of Lisp

通常,符号编程有很多可能的应用:

  • 自然语言问题解答
  • 自然语言故事生成
  • 物流规划
  • 计算机代数
  • 技术系统的故障诊断
  • 事物目录和匹配的描述
  • 游戏
  • 场景低估
  • 技术性的配置

答案 1 :(得分:3)

Scheme中的一个简单的算术解释器,它将符号列表作为输入:

(define (symbolic-arith lst)
  (case (car lst)
    ((add) (+ (cadr lst) (caddr lst)))
    ((sub) (- (cadr lst) (caddr lst)))
    ((mult) (* (cadr lst) (caddr lst)))
    ((div) (/ (cadr lst) (caddr lst)))
    (else (error "unknown operator"))))

试运行:

> (symbolic-arith '(add 2 43))
=> 45
> (symbolic-arith '(sub 10 43))
=> -33
> (symbolic-arith '(mu 50 43))
unknown operator
> (symbolic-arith '(mult 50 43))
=> 2150

这显示了元循环解释器背后的基本思想。 Lisp in Small Pieces是了解这些口译员的最佳场所。

另一个简单的例子,其中符号列表用于实现键值数据存储:

> (define person (list (cons 'name 'mat) (cons 'age 20)))
> person
=> ((name . mat) (age . 20))    
> (assoc 'name person)
=> (name . mat)
> (assoc 'age person)
=> (age . 20)

如果您是Lisp的新手,Common Lisp: A Gentle Introduction to Symbolic Computation是一个很好的起点。

答案 2 :(得分:2)

这不是(只是)裸体企图偷走@Ken的代表。我不记得McCarthy创造Lisp的原始动机可能是什么。但它肯定适用于计算机代数,包括差异化和集成。

我发布的原因是自动区分用于表示除了区分符号表达式之外的其他内容。它用于表示编写计算另一个函数的导数的函数。例如,给定计算f(x)自动微分工具的Fortran程序将编写计算f'(x)的Fortran函数。当然,一种技术是尝试将程序转换为符号表达式,然后使用符号区分,然后将结果表达式再次转换为程序。

第一个是符号计算的一个很好的练习,虽然它很好地被践踏,它可能不是一个学期论文的好选择。第二个是积极的研究前沿,OP必须要小心,不要咬他可以咀嚼的东西。然而,即使是有限的实施也会很有趣且具有挑战性。