Prolog 中的 Switch 语句

2023-11-22

在 Prolog 谓词中,我经常编写像这样的重复条件语句,但我希望它们可以写得更简洁:

output(Lang, Type, Output) :-   
    (Lang = javascript ->
        Output = ["function", Type];
    Lang = ruby ->
        Output = ["def", Type];
    Lang = java ->
        Output = [Type]).

是否可以用更简洁的 switch 语句来替换这一系列条件语句?


在 Prolog 中,使用元谓词(以目标或谓词作为参数的谓词)来定义自己的控制结构非常容易。

例如,您可以实现一个 switch 结构,例如

switch(X, [
    a : writeln(case1),
    b : writeln(case2),
    c : writeln(case3)
])

通过定义

switch(X, [Val:Goal|Cases]) :-
    ( X=Val ->
        call(Goal)
    ;
        switch(X, Cases)
    ).

如果有必要,可以通过许多 Prolog 系统支持的编译时转换来提高效率(inline/2在 ECLiPSe 中,或在其他几个系统中的目标扩展)。

通过运算符声明,您可以将语法调整为几乎任何您喜欢的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prolog 中的 Switch 语句 的相关文章

  • switch 在 Visual C++ 中如何编译?它的优化程度和速度如何?

    我发现我只能在 C 中使用数值switch陈述 我认为它和一堆更深层的区别if else s 因此我问自己 如何switch与 不同if elseif elseif在运行速度 编译时优化和一般编译方面 我这里主要说的是MSVC 开关通常被编
  • 我在 Python 中查找重复循环的正则表达式模式有什么问题?

    我想匹配任何具有重复循环的字符串 就像这个数据一样 3333333333333333333333333333333333333333 1 digit cycle 3 1666666666666666666666666666666666666
  • 列表中的连续元素

    我正在阻止一个谓词来编码Prolog 我需要对两个谓词进行编码 如果我打电话 u a b c d e f X 它会给X a b X b c X c d 如果我打电话 v a b c d e f X 它会给X a b X c d X e f
  • 可与 switch() 一起使用的自定义结构/类型

    我的一个项目有一个值类型 结构 表示视频格式的自定义标识符字符串 在本例中 它将包含内容类型字符串 但这可能会有所不同 我使用了一个结构体 因此它在传递时可以是强类型的 并对初始字符串值执行一些健全性检查 实际的字符串值可以是任何内容并由外
  • Haskell/GHC:使用相同模式匹配多个一元构造函数

    所以我正在尝试定义 TrieSet 数据类型 尽管我知道我不需要 http hackage haskell org package TrieMap module Temp where import Data Map data TrieSet
  • PostgreSQL 对 string\varchar 的各种清理

    我必须通过以下方式清理一些 varchar 删除特殊字符 例如 来自封闭列表 我已经成功地通过大量使用replace regexp replace来做到这一点 但我正在寻找类似于SQL Server中的东西 删除以下数字但不删除相邻的数字含
  • C++ 中的 switch 语句

    考虑 include
  • 如何在 switch 语句中将向量作为参数传递

    我对问题的谷歌搜索没有返回有用的结果和文档 switch没有告诉我如何做 所以我希望我能在这里得到答案 假设我有一个向量 cases lt c one two three 我想使用 switch 语句并将这些元素作为 switch 语句的参
  • 当函数中的模式匹配采用 &self 或 &mut self 时,如何避免使用 ref 关键字?

    铁锈书称为ref关键词 遗产 https doc rust lang org book ch18 03 pattern syntax html legacy patterns ref and ref mut 因为我想遵循隐含的建议来避免re
  • Same_length/2 更好的纯版本

    鉴于频繁的纯定义same length 2 as same length same length As Bs same length As Bs same length L L loops 是否有一个纯粹的定义不会在这种情况下循环 类似于纯
  • Switch 语句,其中 value 为 Int 但 case 可以包含数组 [重复]

    这个问题在这里已经有答案了 我想将我的值数组作为 switch 语句的案例 我有一个值数组 let intValues 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 100 我想使用
  • Prolog家谱

    我做到了 但没有显示答案 当我询问兄弟姐妹 叔叔 阿姨时 这是我写的 有什么问题吗 uncle X Y male X sibling X Z parent Z Y uncle X Y male X spouse X W sibling W
  • Scala 模式匹配与 Option[Any] 的混淆

    我有以下 Scala 代码 import scala actors Actor object Alice extends Actor this start def act loop react case Hello gt sender Hi
  • 使用枚举变量切换字符串

    我有一个具有不同值的枚举 并且想要切换字符串变量 现在 我在尝试将枚举值转换为字符串 可以用作大小写常量 时遇到了困难 我最好的尝试是将枚举转换为字符串数组 但开关似乎不接受数组值作为大小写常量 IntelliJ 说 需要恒定的表达 Enu
  • 一次性删除不正确的后续解决方案

    我有一个谓词 它找到正确的解决方案 但随后又找到不正确的解决方案 data D data threshold nonredundantbumps D 5 Bs write D 3 6 7 8 2 4 5 6 9 4 7 3 D 3 6 7
  • Swift:使用元组在单个 switch-case 中使用多个间隔

    有这样的代码 switch indexPath section indexPath row case 0 1 5 println in range default println not at all 问题是我可以在第二个元组值中使用多个间
  • C / Objective C 中的 switch 语句

    我是 Objective C 的新手 但根据我对 switch 语句的了解 以下代码不应该打印任何内容 因为对我来说 似乎应该存在编译错误 但是打印了 2 我不懂为什么 有人可以解释一下吗 void test int myVar 2 swi
  • Prolog DCG:找到最后一个元素

    我正在尝试更好地理解 DCG 的用途 为了做到这一点 我尝试将 LearnPrologNow 书中的一些练习转换为 DCG 表示法 然而 我却失败得很惨 我试图编写一个程序 仅命名列表中的最后一个元素 就这样 我只是想不出正确的 DCG 语
  • 在这种情况下(C#)替换开关块和枚举的正确方法是什么?

    如果有帮助的话 以下问题是在我正在构建的游戏的背景下提出的 在几个不同的地方我有以下场景 存在一个父类 在本示例中称为 Skill 并且我有许多子类实现父类中的方法 还有另一个父类 我们称之为 Vocation 这些技能需要列在职业的不同子
  • SWI Prolog 转义引号

    我需要在序言中将 放在字符串周围 我从另一个程序获取输入 看起来我无法转义该程序中的 因此我必须在序言中添加 否则序言语句将不起作用 感谢您的帮助 为了讨论strings https stackoverflow com a 39922411

随机推荐

  • 新升级的声纳不显示项目或用户

    您好 我遇到的问题是从 5 1 2 gt 5 6 gt 6 4 升级后 我相信我遵循了记录的升级路径 该系统在 5 1 2 和 5 6 上运行良好 但现在在 6 4 上 加载第一件事的初始项目页面是空的 上面写着 一旦你分析了一些项目 它们
  • require: 'ngModel' 是什么意思?

    这是我的指令的 HTML
  • 如何在 Chrome 打包应用程序中设置 script-src?

    我正在尝试从复杂的网络应用程序创建 Chrome 打包应用程序 我目前收到错误 拒绝执行内联事件处理程序 因为它违反了 以下内容安全策略指令 default src self chrome extension resource 请注意 sc
  • 为什么访问令牌会过期?

    我刚刚开始使用 Google API 和 OAuth2 当客户端授权我的应用程序时 我会获得一个 刷新令牌 和一个短暂的 访问令牌 现在 每次访问令牌过期时 我都可以将刷新令牌发布给 Google 他们会给我一个新的访问令牌 我的问题是访问
  • 如何从以下 .htaccess 重写规则中排除特定文件类型?

    如何从以下重写规则中排除特定文件类型 xml 和 txt RewriteEngine On RewriteBase RewriteCond REQUEST FILENAME f RewriteCond REQUEST URI Rewrite
  • 如何为 Windows 安装 libjpeg?

    我下载了一些使用 libjpeg 的代码 但源文件中不包含 dll 我试图使其正确编译 执行 我使用的是VS2010 在我的源文件中我有 include jpeglib h and in Linker gt Input gt Additio
  • 使用 C# 中的函数返回两个字符串[重复]

    这个问题在这里已经有答案了 我有一个函数想要返回两个值 这可能吗 这是我的代码 但它似乎不喜欢我想返回两个值 public string PlayerCards string player1C1 string player1C2 gener
  • 无法连接到 Kubernetes 集群中的 mongodb 服务

    我在 Google Cloud 上有一个 Kubernetes 集群 有一个数据库服务 它在 mongodb 部署之前运行 我还有一系列微服务 它们正在尝试连接到该数据存储 然而 他们似乎找不到主人 apiVersion v1 kind S
  • Intellij 13 鼠标悬停解决方案上弹出的自动文档不再起作用[重复]

    这个问题在这里已经有答案了 我一直在使用这个解决方案适用于 IntelliJ 12 用于在鼠标悬停时自动弹出快速文档 但是新版本的 IntelliJ 13 当你设置auto show quick doc true in the idea p
  • Durandal:在合成过程中显示“正在加载...”

    当 activate 方法执行其操作时 我可以轻松地显示加载消息 如下所示 div div class text center style margin 75px i class fa fa spinner fa spin i div di
  • 使用 mamp 在本地测试电子邮件

    首先 我对这种本地主机服务器设置完全陌生 过去几天我一直在试图解决这个问题 但没有运气 我正在开发一个带有电子邮件表单的 php 网站 我在一个MAC using codekit and 免费的MAMP一切正常 现在我的问题是 是否可以在本
  • .Net 超时:WaitForSingleObject 与 Timer

    我正在异步操作 一系列网络 IO 上实现超时 但我不确定哪个 更好 从分配 性能 的角度来看 创建 EventWaitHandle 并使用 RegisterWaitForSingleObject 或者只是创建一个 Timer并使用它的Tic
  • 为什么没有 cv2.waitkey() 则 cv2.imshow() 不会渲染?

    如果没有 cv2 waitkey 方法 cv2 imshow 将显示黑色窗口 为什么不等待就无法正常渲染 cap cv2 VideoCapture video path while cap isOpened ret frame cap re
  • 如何在 Swing 应用程序中隐藏光标?

    有没有办法隐藏光标 除了使用透明图像作为光标之外 当用户将鼠标指向 JFrame 中的 JPanel 之外时 我想隐藏光标 看来Cursor类一开始就没有 空白 光标 因此可以使用以下命令定义一个新的 空白 光标Toolkit create
  • 在SQS队列中使用许多消费者

    我知道可以使用多个线程来使用 SQS 队列 我想保证每条消息都会被消耗一次 我知道可以更改消息的可见性超时 例如等于我的处理时间 如果我的进程花费的时间超过可见性超时 例如连接速度慢 其他线程可以使用相同的消息 保证消息被处理一次的最佳方法
  • 检查字符串是否为回文

    A 回文是一个单词 短语 数字或其他单位序列 可以在任一方向以相同的方式阅读 为了检查一个单词是否是回文 我获取该单词的字符数组并比较字符 我测试了它 它似乎有效 但我想知道这是否正确或者是否有需要改进的地方 这是我的代码 public c
  • Laravel 简单月份选择

    y 尝试从日期字段 fechas 日期时间类型 检索月份 其中使用 SQL 子句 MONTH 进行测试不起作用 感谢您的回复 data DB table ordenes gt select array DB raw cant ped pre
  • 用于按月计算计数的 SQL 查询

    将一列中的 1 12 连接到一组按月计数的好方法是什么 在 SQL 中 SELECT months count whatever1 count1 count whatever2 count2 FROM months LEFT JOIN wh
  • MVC 站点具有特定要求的细化权限

    我不喜欢内置的会员提供商 我决定自己动手 我正在尝试想出一种在操作级别执行授权的好方法 这是我的要求trying前往 属性使用 我喜欢这个 因为它在调用堆栈中控制在非常高的级别 并且是组织权限的好地方 没有魔法字符串 这就是我远离当前角色提
  • Prolog 中的 Switch 语句

    在 Prolog 谓词中 我经常编写像这样的重复条件语句 但我希望它们可以写得更简洁 output Lang Type Output Lang javascript gt Output function Type Lang ruby gt